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

Posted

技术标签:

【中文标题】Matplotlib 轴图例在 barh 中仅显示一个标签【英文标题】:Matplotlib Axes legend shows only one label in barh 【发布时间】:2019-02-27 06:26:10 【问题描述】:

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

我似乎无法让图例正常工作,因此我将 [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 notebook。

【问题讨论】:

尝试使用ax.barh([str(i) for i in current_column_values.index], current_column_values.values, label=[str(i) for i in current_column_values.index])并使用ax.legend() 没有 ax.legend 我看不到图例。如果我只写ax.legend(),那么我会看到只有一种颜色的图例,以及所有标签的列表。 【参考方案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])

样本输出

【讨论】:

以上是关于Matplotlib 轴图例在 barh 中仅显示一个标签的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 Matplotlib 轴图例的字体大小?

如何使用选择图例(matplotlib)自动缩放图形?

如何在 matplotlib 中更改图例字体名称

matplotlib可视化篇barh()--直方图(2)

Python Pandas 并排绘制两个 BARH

如何在绘图中仅显示特定曲线子集的图例?