You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中多列图例设置:将图例置于X轴下方

问题描述

我用以下代码创建了一个堆叠水平条形图,用来展示归一化序列里的数值:

data = df['state'].value_counts(normalize=True).to_frame()
data.T.plot.barh(stacked=True, figsize=(18,3))

生成的图表如下:
堆叠水平条形图

我希望将图例标签排列成多列,并显示在X轴下方,请问该如何实现?

解决方案

你可以通过获取图表的坐标轴对象,调用legend()方法时设置对应参数来实现需求。修改后的代码如下:

import matplotlib.pyplot as plt

data = df['state'].value_counts(normalize=True).to_frame()
ax = data.T.plot.barh(stacked=True, figsize=(18,3))

# 调整图例:设置列数、位置
ax.legend(
    ncol=3,  # 设置图例的列数,可根据标签数量调整
    bbox_to_anchor=(0.5, -0.15),  # 定位到X轴下方居中位置
    loc='upper center'  # 图例自身的锚点为上边缘居中
)

# 自动调整布局,防止图例被截断
plt.tight_layout()
plt.show()

参数说明

  • ncol:控制图例的列数,比如设置为3就会把图例分成3列排列,可根据标签总数灵活调整;
  • bbox_to_anchor:第一个参数0.5表示水平方向对齐图表中点,第二个参数-0.15让图例向下偏移到X轴下方,数值可根据实际显示效果微调;
  • loc='upper center':指定图例以自身的上边缘中点为锚点,配合bbox_to_anchor实现精准定位;
  • plt.tight_layout():自动调整图表元素的位置,确保图例完整显示在画布内。

内容的提问来源于stack exchange,提问作者vonbecker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:51:07