【问题标题】:Renaming X-Axis Labels when using Matplotlib and Pandas使用 Matplotlib 和 Pandas 时重命名 X 轴标签
【发布时间】:2015-10-10 17:43:58
【问题描述】:

我在 iPython Notebooks 上运行我的代码,在 Macbook Pro Yosemite 10.10.4 上

我有一个 CSV 文件,我正在尝试使用 Python 读取该文件,并希望提供图表。我面临的问题是重命名 X 轴标签。

本质上,该图表试图绘制不同类型的审计违规的计数,但对所述违规的描述非常长。例如:

  • 地区委员会未批准......另外 300 字 - 17
  • 与供应商没有合同......另外 300 字 - 14
  • 供应商注册未记录在案......另外 300 字 - 9

虽然没有这些冗长的原因,我想将 X 轴标签重命名为数字或字母,以便图表看起来有点像这样:

  • A - 17
  • B - 14
  • C - 9

这是我使用的代码,除了标签名称,我对结果很满意。

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np 
import pylab as pl
pd.set_option('display.mpl_style', 'default') 
pd.set_option('display.width', 5000) 
pd.set_option('display.max_columns', 60)
plt.rcParams['figure.figsize'] = (15, 5)
fixed_data = pd.read_csv('audit-rep.csv',sep=',',encoding='latin1',index_col='Index', parse_dates=['Report Date'],dayfirst=False)

viol_counts = data['Audit Flag'].value_counts()
viol_counts[:10]
viol_counts[:10].plot(kind='bar')

我尝试使用下面的代码重命名 x 轴标签。

 viol_counts.set_ylabel('No. of Violations')
 viol_counts.set_title('Audit Results')
 viol_counts.set_xticks(ind+width)
 viol_counts.set_xticklabels( ('A', 'B','C') )

这是我在使用上述代码时遇到的错误。

AttributeError: 'Series' 对象没有属性 'set_ylabel'

我遇到了一些与此问题相关的其他帖子,但没有看到专门解决个别标签重命名的帖子。 不过这不是很重要,我只是在尝试使用python学习,实际工作已经在excel中完成。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    如果您将绘图 Axes 对象分配给变量名称(这里我称之为 viol_plot),那么您可以对该 Axes 对象执行操作(您当前正在尝试设置标签和刻度在Series,不是情节):

    viol_plot = viol_counts[:10].plot(kind='bar')
    
    viol_plot.set_ylabel('No. of Violations')
    viol_plot.set_title('Audit Results')
    viol_plot.set_xticks(ind+width)
    viol_plot.set_xticklabels( ('A', 'B','C') )
    

    【讨论】:

    • viol_plotAxes 对象而不是“情节”。
    • 谢谢。不是很喜欢 pandas 的 API 决定(绘图函数应该返回添加的新艺术家),但它就是这样。
    【解决方案2】:

    set_ylabel、set_title 等方法用于绘图对象。 一种选择是使用子图:

    figure, ax = pl.subplots(1,1)
    #note the ax option.
    viol_counts[:10].plot(kind='bar', ax=ax)
    ax.set_ylabel('No. of Violations')
    ax.set_title('Audit Results')
    ax.set_xticks(ind+width)
    ax.set_xticklabels( ('A', 'B','C') )
    

    或者,您可以绘制和使用不同的函数。一个缺点是我不知道在这种情况下如何设置 xticklabels:

    viol_counts[:10].plot(kind='bar')
    #note names of functions are slightly different
    pl.ylabel('No. of Violations')
    pl.title('Audit Results')
    pl.xticks(ind+width)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 2015-08-28
      • 2012-03-14
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      相关资源
      最近更新 更多