如何为从pandas DataFrame创建的条形图设置x轴刻度位置?

我有一个简单的情节,带有x标签为1、1.25、1.5、1.75、2等,最多15个:

在此处输入图片说明

该图是从创建的,pandas.DataFrame未指定xtick间隔:

speed.plot(kind='bar',figsize=(15, 7))

现在,我希望x间隔以1而不是0.25为增量,因此标签将读取1,2,3,4,5等。

我敢肯定这很容易,但我无法终生解决。

我发现plt.xticks()这似乎是正确的选择,但也许是set_xticks

到目前为止,我没有做我想做的事情就改变了x刻度的数量。任何帮助将不胜感激。

回答:

如果您的x标签具有数字值,则熊猫处理条形图的x标记的方式可能会令人困惑。让我们举个例子:

import pandas as pd

import numpy as np

x = np.linspace(0, 1, 21)

y = np.random.rand(21)

s = pd.Series(y, index=x)

ax = s.plot(kind='bar', figsize=(10, 3))

ax.figure.tight_layout()

在此处输入图片说明

您可能希望刻度位置直接对应于中的值x,即0、0.05、0.1,…,1.0。但是,事实并非如此:

print(ax.get_xticks())

# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]

代替大熊猫套蜱 位置 根据 索引 中的每个元素的x,但然后将刻度 标记 根据 x

print(' '.join(label.get_text() for label in ax.get_xticklabels()))

# 0.0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1.0


因此,直接设置刻度位置(使用ax.set_xticks)或将xticks=参数传递给pd.Series.plot()都不会给您带来预期的效果:

new_ticks = np.linspace(0, 1, 11)       # 0.0, 0.1, 0.2, ..., 1.0

ax.set_xticks(new_ticks)

在此处输入图片说明


相反,您需要分别更新x标记的位置和标签:

# positions of each tick, relative to the indices of the x-values

ax.set_xticks(np.interp(new_ticks, s.index, np.arange(s.size)))

# labels

ax.set_xticklabels(new_ticks)

在此处输入图片说明

在大多数情况下,这种行为实际上很有意义。对于条形图,x标签通常是非数字的(例如,与类别对应的字符串),在这种情况下,将无法使用中的值x来设置刻度位置。在不引入其他参数指定其位置的情况下,最合乎逻辑的选择是改为使用其索引。

以上是 如何为从pandas DataFrame创建的条形图设置x轴刻度位置? 的全部内容, 来源链接: utcz.com/qa/405510.html

回到顶部