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

Python中使用pandas的df.plot绘图时如何移动图例位置?

解决pandas df.plot绘制柱状图时图例遮挡柱形的问题

错误原因排查

  • 第一处错误:matplotlib导入语句错误,你代码中写的import matplotlib as plt是导入了整个matplotlib库,而我们需要用到的绘图和图例调整方法都在matplotlib.pyplot子模块中,正确导入语句应为import matplotlib.pyplot as plt
  • 第二处错误:调用legend方法的方式错误,df.plot()是pandas的绘图方法,执行后会返回一个matplotlib的Axes对象,你需要先接住这个返回值再调用其legend方法,或者用导入正确的pyplot来调用plt.legend(),直接写df.plot.legend是调用的类方法,无法作用到你已经生成的图表上

完整可运行正确代码

import pandas as pd
import numpy as np
# 修正matplotlib导入语句
import matplotlib.pyplot as plt

df = pd.DataFrame([['2010', 16.8, 12.6, 14.5, 7.3, 7], ['2011', 14, 9, 4, 6.4, 4], ['2012', 18, 14, 3, 8, 2.8],
                   ['2013', 19.2, 14.2, 5, 8, 1.4]],
                  columns=['Year', 'Lab', 'Corgi', 'German Shepard', 'Poodle', 'Terrier'])

# 接住plot返回的Axes对象,方便后续调整属性
ax = df.plot(x='Year', ylabel= 'Number of Puppies',
        kind='bar',
        stacked=False,
        title='Puppies in Training Group Successfully Sitting When Asked',
        width= 0.7)

# 调整图例位置,将图例放在图幅右侧外部,完全不遮挡柱形
ax.legend(loc='upper left', bbox_to_anchor=(1, 1))

# 自动调整布局,避免图例被画布边缘截断
plt.tight_layout()

# 显示图表
plt.show()

参数说明

你可以根据自己的需求调整参数修改图例位置:

  • loc参数:指定图例自身的哪个位置作为定位锚点,可选值包括upper left、upper right、lower left、lower center等
  • bbox_to_anchor参数:指定锚点要对齐的整个图幅的坐标位置,第一个值为水平位置(1代表图幅最右侧边缘外,0代表图幅最左侧边缘),第二个值为垂直位置(1代表图幅最顶部边缘,0代表图幅最底部边缘)
  • 如果需要把图例放在图内,直接删除bbox_to_anchor参数即可;如果要放在图底部外侧,可以用ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15), ncol=3),其中ncol参数可以设置图例分几列显示,更节省空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:45:03