Python绘图移除图例中None,None问题求助
解决Python折线图中无效“None, None”图例问题
你遇到的问题是用pandas的groupby+agg处理数据后,绘制折线图出现了无效的“None, None”图例,以下是几种实用解决办法:
问题代码
plt.figure(figsize=(15,10.5)) df_select = employee_5years.drop(['Age','Years.of.Service','County.Code','YEAR','Tenure.Years','Assigned_Department'],axis=1) df_select = df_select.loc[(df_select['Gender'] == 'F')] df_select = df_select.loc[(df_select['Department'].str.contains('DEPARTMENT E'))] x_select = df_select.groupby(['YEAR.year']).agg({'Base.Pay': ['median']}) x_select.plot(title='Female Salaries Increase by E Department in last 5 Years') plt.ylabel('Median Base Salary') plt.xlabel('Department E by Year') plt.show() x_select
解决方案
1. 直接移除图例
如果完全不需要图例,两种方式都能快速实现:
- 绘图后清空图例:
plt.figure(figsize=(15,10.5)) df_select = employee_5years.drop(['Age','Years.of.Service','County.Code','YEAR','Tenure.Years','Assigned_Department'],axis=1) df_select = df_select.loc[(df_select['Gender'] == 'F')] df_select = df_select.loc[(df_select['Department'].str.contains('DEPARTMENT E'))] x_select = df_select.groupby(['YEAR.year']).agg({'Base.Pay': ['median']}) x_select.plot(title='Female Salaries Increase by E Department in last 5 Years') plt.ylabel('Median Base Salary') plt.xlabel('Department E by Year') plt.legend([]) # 清空图例 plt.show()
- 调用
plot时直接关闭图例:
x_select.plot(title='Female Salaries Increase by E Department in last 5 Years', legend=False)
2. 修复多级索引,让图例显示正常
出现“None, None”的核心原因是agg操作生成了多级列索引(列名是('Base.Pay', 'median')),把列名改成单一索引就能让图例显示正确名称:
plt.figure(figsize=(15,10.5)) df_select = employee_5years.drop(['Age','Years.of.Service','County.Code','YEAR','Tenure.Years','Assigned_Department'],axis=1) df_select = df_select.loc[(df_select['Gender'] == 'F')] df_select = df_select.loc[(df_select['Department'].str.contains('DEPARTMENT E'))] x_select = df_select.groupby(['YEAR.year']).agg({'Base.Pay': ['median']}) # 重命名列,取消多级索引 x_select.columns = ['Median Base Pay'] x_select.plot(title='Female Salaries Increase by E Department in last 5 Years') plt.ylabel('Median Base Salary') plt.xlabel('Department E by Year') plt.show()
3. 自定义图例名称
如果需要保留图例并修改显示内容,直接设置图例标签即可:
plt.figure(figsize=(15,10.5)) df_select = employee_5years.drop(['Age','Years.of.Service','County.Code','YEAR','Tenure.Years','Assigned_Department'],axis=1) df_select = df_select.loc[(df_select['Gender'] == 'F')] df_select = df_select.loc[(df_select['Department'].str.contains('DEPARTMENT E'))] x_select = df_select.groupby(['YEAR.year']).agg({'Base.Pay': ['median']}) x_select.plot(title='Female Salaries Increase by E Department in last 5 Years') plt.ylabel('Median Base Salary') plt.xlabel('Department E by Year') plt.legend(['女性中位数薪资']) # 设置自定义图例名称 plt.show()
内容的提问来源于stack exchange,提问作者Data Science Analytics Manager
相关产品推荐
相关产品推荐

