#pandas
Вопрос:
Я написал plot_dataframe()
, чтобы создать два подзаголовка (один для линейчатой диаграммы, а другой для гистограммной гистограммы) для фрейма данных, который передается с помощью аргумента. Затем я вызываю эту функцию из plot_kernels()
нескольких фреймов данных.
def plot_dataframe(df, cnt): row = df.iloc[0].astype(int) # First row in the dataframe plt.subplot(2, 1, 1) row.plot(legend=cnt) # Line chart plt.subplot(2, 1, 2) df2 = row.value_counts() df2.reindex().plot(kind='bar', legend=cnt) # Histogram def plot_kernels(mydict2): plt.figure(figsize=(20, 15)) cnt=1 for key in my_dict2: df = my_dict2[key] plot_dataframe(df, cnt) cnt = cnt 1 plt.show()
Словарь выглядит так
{'K1::foo(bar::z(x,u))': Value Value 0 10 2 1 5 2 2 10 2, 'K3::foo(bar::y(z,u))': Value Value 0 6 12 1 7 13 2 8 14}
И на основе значений в строке[0], [10,2] показаны синей линией, а [6,12] показаны оранжевой линией. Для гистограммы они похожи. Как вы можете видеть, условные обозначения в подзаголовках показаны на рисунке как 0. Я ожидаю увидеть 1 и 2. Как я могу это исправить?
Ответ №1:
Измените legend
на label
, а затем принудительно измените легенду после того, как вы все построите:
def plot_dataframe(df, cnt,axes): row = df.iloc[0].astype(int) # First row in the dataframe row.plot(label=cnt, ax=axes[0]) # Line chart -- use label, not legend df2 = row.value_counts() df2.plot(kind='bar', ax=axes[1], label=cnt) # Histogram def plot_kernels(d): # I'd create the axes first and pass to the plot function fig,axes = plt.subplots(2,1, figsize=(20, 15)) cnt=1 for key in d: df = d[key] plot_dataframe(df, cnt, axes=axes) cnt = cnt 1 # render the legend for ax in axes: ax.legend() plt.show()
Выход: