减少绘图滴答数

时间:2011-07-13 17:08:17

标签: python matplotlib

我的图表上有太多的刻度线,它们相互碰撞。

如何减少蜱的数量?

例如,我有嘀嗒声:

1E-6, 1E-5, 1E-4, ... 1E6, 1E7

我只想要:

1E-5, 1E-3, ... 1E5, 1E7

我尝试过使用LogLocator,但我无法弄清楚这一点。

9 个答案:

答案 0 :(得分:228)

或者,如果您只想设置刻度数,同时允许matplotlib定位它们(​​目前只有MaxNLocator),则有pyplot.locator_params

pyplot.locator_params(nbins=4)

您可以在此方法中指定特定轴,如下所述,默认为:

# To specify the number of ticks on both or any single axes
pyplot.locator_params(axis='y', nbins=6)
pyplot.locator_params(axis='x', nbins=10)

答案 1 :(得分:21)

如果有人仍然在搜索结果中显示此页面:

fig, ax = plt.subplots()

plt.plot(...)

every_nth = 4
for n, label in enumerate(ax.xaxis.get_ticklabels()):
    if n % every_nth != 0:
        label.set_visible(False)

答案 2 :(得分:19)

轴对象有set_ticks()函数。

答案 3 :(得分:3)

如果有人仍然需要它,而且从来没有 这里真的对我有用,我想出了一个非常好的 保持外观的简单方法 在修复数字时“按原样”生成情节 正好是N的蜱:

IPM.Configuration.ClientExtension.00000000000000000000000000000000

答案 4 :(得分:2)

要解决刻度的自定义和外观问题,请参阅matplotlib网站上的Tick Locators指南

ax.xaxis.set_major_locator(plt.MaxNLocator(3))

将x轴上的刻度总数设置为3,并在整个轴上均匀分布。

还有一个nice tutorial about this

答案 5 :(得分:1)

使用对数刻度时,可以使用以下命令修复主刻度数

import matplotlib.pyplot as plt

....

plt.locator_params(numticks=12)
plt.show()

设置为numticks的值决定了要显示的轴刻度数。

对@ bgamari发布locator_params()函数的帖子的信用,但nticks参数在使用日志比例时会引发错误。

答案 6 :(得分:1)

@raphael提供的解决方案简单明了,非常有用。

不过,显示的刻度标签将不是从原始分布采样的值,而是从np.linspace(ymin, ymax, N)返回的数组的索引采样的值。

要显示与原始刻度标签均匀隔开的N个值,请使用set_yticklabels()方法。这是y轴的代码段,带有整数标签:

import numpy as np
import matplotlib.pyplot as plt

ax = plt.gca()

ymin, ymax = ax.get_ylim()
custom_ticks = np.linspace(ymin, ymax, N, dtype=int)
ax.set_yticks(custom_ticks)
ax.set_yticklabels(custom_ticks)

答案 7 :(得分:0)

如果每N = 3个滴答需要一个滴答声:

N = 3  # 1 tick every 3
xticks_pos, xticks_labels = plt.xticks()  # get all axis ticks
myticks = [i for i,j in enumerate(xticks_pos) if not i%N]  # index of selected ticks

(显然,您可以使用(i+offset)%N来调整偏移量。)

请注意,如果您愿意,可能会出现不均匀的滴答声,例如myticks = [1, 3, 8]

然后您就可以使用

plt.gca().set_xticks(myticks)  # set new X axis ticks

或者如果您也想替换标签

plt.xticks(myticks, newlabels)  # set new X axis ticks and labels

请注意,必须在轴刻度线之后设置

最后,您可能只希望绘制一组给定的刻度线:

mylabels = ['03/2018', '09/2019', '10/2020']
plt.draw()  # needed to populate xticks with actual labels
xticks_pos, xticks_labels = plt.xticks()  # get all axis ticks
myticks = [i for i,j in enumerate(b) if j.get_text() in mylabels]
plt.xticks(myticks, mylabels)

(假设mylabels是有序的;如果没有排序,请对myticks进行排序并重新排序)。

答案 8 :(得分:0)

xticks 函数自动迭代范围函数

起始编号 = 0

end_number = len(你拥有的数据)

step_number = 从开始到结束要跳过多少次

rotation = 90 度倾斜将有助于长刻度

plt.xticks(range(start_number,end_number,step_number),rotation=90)