绘制Pandas数据框时xticklabels的第一个值丢失

jxct1oxe  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(252)

我是Pandas和matplotlib的新手,希望绘制此DataFrame

season   won               team  matches    pct_won
0  2008/2009  28.0  Manchester United       38  73.684211
1  2009/2010  27.0  Manchester United       38  71.052632
2  2010/2011  23.0  Manchester United       38  60.526316
3  2011/2012  28.0  Manchester United       38  73.684211
4  2012/2013  28.0  Manchester United       38  73.684211
5  2013/2014  19.0  Manchester United       38  50.000000
6  2014/2015  20.0  Manchester United       38  52.631579
7  2015/2016  19.0  Manchester United       38  50.000000

使用以下代码行:

ax = aggregated_frame.plot(x='season', y='pct_won', figsize=(8,8), marker='o', rot=90, title='Performance by season of Team: {}'.format(aggregated_frame.iloc[0]['team']))
ax.set_xticklabels(aggregated_frame.season)
ax.set_xlabel('')
ax.yaxis.grid()
ax.yaxis.set_major_formatter(mtick.PercentFormatter())
ax.legend(['Percentage of Matches Won'], fontsize=14)
for item in ([ax.title, ax.xaxis.label] + ax.get_xticklabels() + ax.get_yticklabels()):
    item.set_fontsize(14);

但在结果图中,xticklabels的第一个值被删除:

我尝试了几个选项,甚至只是设置ax.set_xticklabels([1,2,3,4,5,6,7,8]),但第一个值每次都被删除。
怎么了?任何帮助都是非常欢迎的。
此外还有:为什么season的值一开始没有被用作标签?如果我省略了set_xticklabels,x轴上就不会打印任何标签。

4ioopgfo

4ioopgfo1#

在设置标签时,您不应该同时设置刻度位置。也就是说,如果您使用ax.set_xticklabels,则始终需要同时使用ax.set_ticks(否则,可能会有例外,在这种情况下,您需要确切地知道您在做什么)。
在这里:

ax.set_xticks(range(len(df)))
ax.set_xticklabels(df.season)

产生

xesrikrc

xesrikrc2#

我在做热图的时候也遇到了同样的问题。我试过上面的方法,但是它切断了我的热图的边缘行和列。
我这样做是为了解决

l_col_list = list(df.columns.values)
ax1.set_xticklabels(['']+l_col_list,fontsize=6)
ax1.set_yticklabels(['']+l_col_list,fontsize=6)
pes8fvy9

pes8fvy93#

这个公认的答案对我不起作用。我设法通过下面的代码把所有的标签移过去一个。这使得第一个标签与我的图上的第一个条形相匹配。

tick_labels = ['[0, 20)', '[20, 40)', '[40, 60)', '[60, 80)', '[80, 100)', '=100']
x_max = int(max(plt.xticks()[0]))  
plt.xticks(range(1, x_max), tick_labels)

相关问题