Xticks by pandas plot,用字符串重命名

时间:2014-10-14 10:11:59

标签: pandas plot

我有下一个DF:

A B  C
1 2 'name 1'
2 3 'name 2'
3 5 'name 3'

绘制列A并使用列C作为xticks的正确顺序是什么?

df['A'].plot(xticks = 'C')
df['A'].plot(xticks = df['C'])

两者都不起作用......无论如何它的工作,例如

df['A'].plot(xticks=[1,2,3])

我真的应该转换为序列吗? 我也对问题进行了修改。我收到了下一条错误消息:

ValueError: could not convert string to float: name 3

我有一个字符串列,并希望在我的情节中将其用作xticks。

PS

直接使用pandas plot功能。我找到了解决方案here

1 个答案:

答案 0 :(得分:55)

您提供的链接是一个很好的资源,但会在matplotlib.pyplot中显示整个内容,并使用.subplots()来获取轴。虽然我之前已经这样做了,但我一直在寻找尽可能多地使用内置大熊猫.plot()函数的方法。对我来说,它可以简化代码并更容易利用DataFrame的优点。

但是,df.plot()的参数本身似乎有很多不容易完成的事情。幸运的是它返回matplotlib.AxesSubplot,这开辟了更大范围的可能性。

我将您的数据复制到DataFrame中:

df = pd.read_clipboard(quotechar="'")

看起来有点像:

   A B  C
0  1 2 'name 1'
1  2 3 'name 2'
2  3 5 'name 3'

但是,当然,非表格残缺的html要好得多。 (也许SO会在有一天解决这个问题。)

然后我所要做的就是:

ax = df.A.plot(xticks=df.index, rot=90)
ax.set_xticklabels(df.C)

如果你使用的是IPython / Jupyter和%matplotlib inline,那么这两个都需要在同一个单元格中。我最初忘记了这一点,花了很多时间试图弄清楚出了什么问题。

enter image description here

您可以使用ax变量:

完成所有操作
 ax = df.A.plot()
 ax.set_xticks(df.index)
 ax.set_xticklabels(df.C, rotation=90)

但是,正如我所提到的,我还没有找到xticklabels函数参数中df.plot()的方法,这样就可以在一行中完成所有操作。

在这个例子中,旋转xtick标签的额外步骤可能是无关紧要的,但在我正在寻找这个答案的时候,它就派上用场了。

当然,您可以更轻松地将A列和B列一起绘制:

 ax = df.plot()
 ax.set_xticks(df.index)
 ax.set_xticklabels(df.C, rotation=90)

enter image description here