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

Guf*_*oru 21 plot pandas

我有下一个DF:

A B  C
1 2 'name 1'
2 3 'name 2'
3 5 'name 3'
Run Code Online (Sandbox Code Playgroud)

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

df['A'].plot(xticks = 'C')
df['A'].plot(xticks = df['C'])
Run Code Online (Sandbox Code Playgroud)

两个都没有工作......例如,无论如何它都有效

df['A'].plot(xticks=[1,2,3])
Run Code Online (Sandbox Code Playgroud)

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

ValueError: could not convert string to float: name 3
Run Code Online (Sandbox Code Playgroud)

我有一个字符串列,并希望我的情节使用它作为xticks.

PS

它不会与熊猫情节函数直接相关.我在这里找到了解决方案

Aln*_*lam 64

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

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

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

df = pd.read_clipboard(quotechar="'")
Run Code Online (Sandbox Code Playgroud)

它看起来有点像:

   A B  C
0  1 2 'name 1'
1  2 3 'name 2'
2  3 5 'name 3'
Run Code Online (Sandbox Code Playgroud)

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

然后,我所要做的就是:

ax = df.A.plot(xticks=df.index, rot=90)
ax.set_xticklabels(df.C)
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

您可以使用ax变量完成所有操作:

 ax = df.A.plot()
 ax.set_xticks(df.index)
 ax.set_xticklabels(df.C, rotation=90)
Run Code Online (Sandbox Code Playgroud)

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

在这个例子中,旋转xtick标签的额外步骤可能是无关紧要的,但在我正在寻找这个答案的工作中派上用场.

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

 ax = df.plot()
 ax.set_xticks(df.index)
 ax.set_xticklabels(df.C, rotation=90)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


tdy*_*tdy 5

从 matplotlib 3.5.0 开始

ax.set_xticks与新参数一起使用labels以同时设置刻度和标签:

ax = df.plot(y='A')
ax.set_xticks(ticks=df.index, labels=df.C)
#                             ^^^^^^
Run Code Online (Sandbox Code Playgroud)

或者,由于df.plot返回一个Axes对象,我们可以链接它:

df.plot(y='A').set_xticks(df.index, df.C)
Run Code Online (Sandbox Code Playgroud)

请注意,plt.xticks始终有一个labels参数,因此此更改只是统一了AxespyplotAPI。