我有下一个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
答案 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
,那么这两个都需要在同一个单元格中。我最初忘记了这一点,花了很多时间试图弄清楚出了什么问题。
您可以使用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)