当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何为从pandasDataFrame创建的条形图设置x轴刻度位置?》经验,为你挑选了1个好方法。

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

在此输入图像描述

该图是在pandas.DataFrame没有指定xtick间隔的情况下创建的:

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

现在我希望x-interval的增量为1而不是0.25,因此标签会显示为1,2,3,4,5等.

我确信这很容易,但我不能为我的生活弄清楚.

我发现plt.xticks()这似乎是正确的电话,但也许是set_xticks吗?

在此之前我没有按照我想要的方式更改了x刻度.任何帮助将不胜感激.



1> ali_m..:

如果您的x标签具有数值,那么pandas处理条形图的x-ticks的方式可能会非常混乱.我们来看这个例子:

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-ticks的位置和标签:

# 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来设置刻度位置.如果不引入另一个参数来指定它们的位置,最合乎逻辑的选择是使用它们的索引.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有