Pandas绘图:为两个DataFrame添加独立图例(柱状图+折线图)
解决同一画布中堆叠柱状图与折线图的独立图例问题
要实现两个独立图例,核心是手动分离两种图表的绘图元素,分别创建图例。以下是修改后的代码及说明:
ax = figure.add_subplot(111) # 绘制堆叠柱状图并捕获绘图对象 bar_plot = df_Plot.iloc[0:plotFinish].plot.bar(title=employee, xlabel="Date", ylabel="FTE", ax=ax, stacked=True) # 提取柱状图的绘图元素和标签 bar_handles, bar_labels = ax.get_legend_handles_labels() # 移除自动生成的合并图例 ax.legend_.remove() # 绘制折线图 line_plot = df_Plot1.iloc[0:plotFinish].plot(ax=ax, linewidth=4) # 提取折线图的绘图元素和标签 line_handles, line_labels = ax.get_legend_handles_labels() # 移除折线图自动添加的图例 ax.legend_.remove() # 创建第一个图例(对应堆叠柱状图) ax.legend(bar_handles, bar_labels, loc='upper left', title='堆叠柱状图') # 创建第二个图例(对应折线图),用add_artist避免被覆盖 second_legend = ax.legend(line_handles, line_labels, loc='upper right', title='折线图') ax.add_artist(second_legend)
关键细节:
- 调用绘图方法后,通过
ax.get_legend_handles_labels()分别提取两种图表的绘图元素(handles)和对应标签(labels) - 必须先移除自动生成的合并图例,否则新图例会出现混乱
- 第二个图例需要用
ax.add_artist()添加,否则Matplotlib会自动替换掉第一个图例 - 可通过
loc参数调整图例位置,比如upper left和upper right避免重叠
内容的提问来源于stack exchange,提问作者Jim Rutter
相关产品推荐
相关产品推荐

