如何在matplotlib中去除坐标轴刻度后的小数位?

10

我有

tick_location = np.linspace(0.01, 10, num=10, endpoint=True)
ax2.set_xticks(tick_location)
tick_labels = np.around(1/new_tick_loc*1e4,decimals=-2)
ax2.set_xticklabels(tick_labels)

这段代码(以及其他一些代码)生成了下面的图表,但我想从顶部x轴的刻度标签中移除小数点和其后的数字。使用matplotlib.ticker.FormatStrFormatter(fmt)并没有帮助。

top x axis with decimal

4个回答

11

将数字转换为整数:

ax2.set_xticklabels(tick_labels.astype(int))

我一直在尝试进行类型转换,但是我得到了以下错误,即使使用您的建议也是如此:AttributeError: 'list' object has no attribute 'astype'。我找到了一个绕路的答案,但它确实有效,如下所示。 - max29
抱歉,打错字了。括号的位置改变了。 - Mike Müller
太好了 - 谢谢!也可以省略 'np.' 直接使用 'int'。这比我下面的解决方案更简单。 - max29
谢谢提示。已改进。 - Mike Müller
please update if any!!! - shyam_gupta
显示剩余3条评论

1

将yticks中的标签设置为.astype(int)对于y轴(x轴使用xticks)对我很有效:

plt.yticks(ticks=plt.yticks()[0], labels=plt.yticks()[0].astype(int))

0
我似乎在发布自己的问题后很快就找到了答案。虽然不是非常直接,但它确实有效。只需插入四行将刻度数转换为字符串,并手动删除小数点及其后面的所有内容即可:
tick_location = np.linspace(0.01, 10, num=10, endpoint=True)
ax2.set_xticks(tick_location)
tick_labels = np.around(1/new_tick_loc*1e4,decimals=-2)
tick_labels_str = tick_labels.astype(str)
tick_labels_free=[]
for i in range(0,10):
    tick_labels_free.append(tick_labels_str[i].split('.')[0])
ax2.set_xticklabels(tick_labels_free)

在 'range(0,10)' 中的 '10' 给出了最后一个刻度为1000,即使它在下面的图像中没有反映出来。 '[0]' 取出了已经被分割的字符串的第一部分 - 对我来说是没有小数点的部分。所需的刻度标签:

correct top x axis


0
也许不完全符合您的要求,但如果您的数据已经存储在一个数据框中,那么这个方法适用:
df.columns = pd.to_numeric(df.columns, downcast='integer')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接