matplotlib将xticks设置为列,标签为相应的索引

时间:2017-05-01 10:36:30

标签: python matplotlib axis-labels

我是matlpotlib的新手,我发现滴滴定位器和标签令人困惑,所以请耐心等待。我发誓我已经谷歌搜索了几个小时。

我有一个数据帧'框架'像这样(相关专栏):

dayofweek   sla
weekday         
Mon     1   0.889734
Tue     2   0.895131
Wed     3   0.879747
Thu     4   0.935000
Fri     5   0.967742
Sat     6   0.852941
Sun     7   1.000000

其中工作日名称是索引,工作日编号是列。此框架中没有日期时间对象。

我把它变成了一个plt.figure

fig=plt.figure(figsize=(7,5))    
ax=plt.subplot(111)

我需要将我的x轴作为数值,因为我想稍后添加一个散点图,这对于字符串值是不可能的。

x_=frame.dayofweek.values
anbar=ax.bar(x_,y_an,width=0.8,color=an_c,label='angekommen')

这没关系 xticks are 'dayofweek'

所以基本上我希望我的xticks成为'dayofweek'列和它们的标签是相应的索引。 现在,如果我通过

手动set_xticklabels
ax.set_xticklabels(frame.index)

标签从轴上的位置0开始。

enter image description here

我可以通过重新排列标签列表来解决这个问题,但应该有一个正确的'使用Locators或Formatter的方法,但是(见上文)这对我来说非常困惑。 有人能指出我如何使标签与他们的索引相对应吗?

1 个答案:

答案 0 :(得分:8)

直接的解决方案不仅要设置xticklabels,还要设置刻度本身:

ax.set_xticks(frame.dayofweek.values)
ax.set_xticklabels(frame.index)

使用FixedLocator和FixedFormatter

可以实现同样的目的
ax.xaxis.set_major_locator(matplotlib.ticker.FixedLocator(frame.dayofweek.values))
ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(frame.index))

但对于这个简单的任务来说似乎没必要。