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

Posted

技术标签:

【中文标题】xticks by pandas plot,用字符串重命名【英文标题】:Xticks by pandas plot, rename with the string 【发布时间】:2014-12-09 02:13:48 【问题描述】:

我有这个df

df = pd.DataFrame('A': [1, 2, 3], 'B': [2, 3, 5], 'C': ['name 1', 'name 2', 'name 3'])

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

绘制列A 并将列C 用作xticks 的正确方法是什么?

这些不起作用:

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

这会改变 xticks 但不会改变标签:

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

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

ValueError: could not convert string to float: name 3

我有一列字符串,想在我的情节中将其用作 xticks。

附言

它不直接与 pandas 绘图功能一起使用。我找到了解决方案here

【问题讨论】:

【参考方案1】:

您提供的链接是一个很好的资源,但显示了在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)

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

在这个例子中,旋转 xtick 标签的额外步骤可能是多余的,但在我正在寻找这个答案的时候派上用场。

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

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

【讨论】:

虽然当您问几乎相同的问题here时,您可能已经得到了这个答案。 看来 Pandas 仍然不提供重新标记刻度,并且您访问 matplotlib Axes 的解决方案在 2021 年仍然有效。这对我来说有点奇怪,因为为刻度指定文本标签似乎是一个非常普遍的需求。 【参考方案2】:

从 matplotlib 3.5.0 开始

使用ax.set_xticks 和新的labels 参数同时设置刻度和标签:

ax = df.plot(y='A')
ax.set_xticks(ticks=df.index, labels=df.C)
#                             ^^^^^^

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

df.plot(y='A').set_xticks(df.index, df.C)

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

【讨论】:

以上是关于xticks by pandas plot,用字符串重命名的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何为所有子图设置 xticks?

Plotly:如何设置自定义 xticks

在 Plotly 中更改/更新 xtick 标签和 ytick 标签的不一致

如何旋转 xtick 标签条形图 plotly express?

有xticks在Pandas的Seaborn regplot中显示月份

Plotly:如何更改情节表达图例的背景颜色?