使用Matplotlib和Pandas时重命名X轴标签

时间:2015-07-21 10:13:20

标签: python pandas matplotlib

我在Macbook Pro Yosemite 10.10.4上的iPython笔记本上运行我的代码

我有一个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') )

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

  

属性错误:'系列'对象没有属性' set_ylabel'

我遇到过与此问题相关的其他一些帖子,但没有看到专门针对个别标签重命名的帖子。 这并不是非常重要,我只是想学习使用python,而实际的工作是在excel中完成的。

2 个答案:

答案 0 :(得分: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') )

答案 1 :(得分:0)

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)