如何在Pandas pivot绘制的柱状图中缩小图例条形宽度
调整分组柱状图图例中条形宽度的方案
问题场景
你使用pandas的plot.bar()绘制分组柱状图时,图例里的条形宽度和图中柱子一致,显得过宽,直接通过plt.legend()无法调整这个宽度,需要针对性处理。
解决思路
pandas绘图后会返回Axes对象,我们可以获取图例的图形句柄(handle),逐个修改这些句柄的宽度属性,再重新生成图例。
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl # 全局样式设置 mpl.rcParams['axes.linewidth'] = 0.8 plt.rcParams['xtick.major.pad']='1' plt.rcParams['ytick.major.pad']='1' plt.rcParams['font.family'] = 'serif' plt.rcParams['font.serif'] = ['Times New Roman'] + plt.rcParams['font.serif'] plt.rcParams['xtick.major.size'] = 3 plt.rcParams['xtick.minor.size'] = 1.6 plt.rcParams['xtick.major.width'] = 0.9 plt.rcParams['xtick.minor.width'] = 0.9 plt.rcParams['ytick.major.size'] = 3 plt.rcParams['ytick.minor.size'] = 1.6 plt.rcParams['ytick.major.width'] = 0.9 plt.rcParams['ytick.minor.width'] = 0.9 plt.rcParams['xtick.bottom'] = True df=pd.read_csv("input.csv") print(df) month_dict = {1 : "BiD", 2 : "BCD", 3 : "BTY", 4 : "HJY", 5 : "GGH" , 6 : "GHY", 7 : "JHT", 8 : "JRT", 9 : "KTY", 10 : "MNY" ,11 : "NTY",12 : "NRT", 13 : "PGH", 14 : "RTY" ,15 : "RER",16 : "RAS", 17 : "STT", 18 : "TYU" ,19 : "UIU",20 : "UTY", 21 : "UII", 22 : "UII" ,23 : "UII",24 : "UII", 25 : "UII", 26 : "UII" ,27 : "UII",28 : "UII", 29 : "UII", 30 : "UII"} # 保存Axes对象 ax = df.pivot('Year','stations','Views').rename(columns=month_dict).plot.bar(figsize = (10.5,5.8),width=0.7) # 获取图例的句柄和标签 handles, labels = ax.get_legend_handles_labels() # 修改每个图例条形的宽度(这里设置为0.3,可根据需求调整) for handle in handles: handle.set_width(0.3) # 重新生成图例 ax.legend(handles=handles, labels=labels, bbox_to_anchor=(1.0, 1.0), prop={'size': 7.2}, frameon=False) plt.show()
关键说明
- 通过
ax.get_legend_handles_labels()拿到图例的图形元素(每个元素是一个矩形),修改其width属性就能单独调整图例里的条形宽度,不会影响图中的柱子宽度。 - 宽度值可以根据你的需求自由调整,比如0.2、0.3等,直到视觉效果满意为止。
内容的提问来源于stack exchange,提问作者pro
相关产品推荐
相关产品推荐

