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
相关产品推荐
相关产品推荐

