Подзаголовки со счетчиками, как легенды

#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()  

Выход:

введите описание изображения здесь