Matplotlib轴图例在barh中仅显示一个标签

时间:2018-09-23 15:20:55

标签: python pandas matplotlib graph legend

我有15个巴氏子图,如下所示:

enter image description here

我似乎无法使图例生效,因此我将在图形和图例中将[2,3,4]视为单独的标签。

我在为子图进行这项工作时遇到麻烦。我的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def plot_bars_by_data(data, title):
    fig, axs = plt.subplots(8,2, figsize=(20,40))
    fig.suptitle(title, fontsize=20)
    fig.subplots_adjust(top=0.95)
    plt.rcParams.update({'font.size': 13})
    axs[7,1].remove()

    column_index = 0
    for ax_line in axs:
        for ax in ax_line:
            if column_index < len(data.columns): 
                column_name = data.columns[column_index]
                current_column_values = data[column_name].value_counts().sort_index()
                ax.barh([str(i) for i in current_column_values.index], current_column_values.values)
                ax.legend([str(i) for i in current_column_values.index])
                ax.set_title(column_name)
                column_index +=1

    plt.show()

# random data
df_test = pd.DataFrame([np.random.randint(2,5,size=15) for i in range(15)], columns=list('abcdefghijlmnop'))
plot_bars_by_data(df_test, "testing")

我只得到一个8x2的条形,看起来像上面的图。我怎样才能解决这个问题? 我正在使用Python 3.6和Jupyter Python笔记本。

1 个答案:

答案 0 :(得分:1)

在代码中使用以下几行。我不能将整个输出作为带有很多子图的大图放在此处,因此无法显示特定的子图。事实证明,首先必须为子图创建一个句柄,然后传递图例值和该句柄以生成所需的图例。

colors = ['r', 'g', 'b']
axx = ax.barh([str(i) for i in current_column_values.index], current_column_values.values, color=colors)
ax.legend(axx, [str(i) for i in current_column_values.index])

示例输出

enter image description here