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

如何减少蜱虫的数量?

例如,我有蜱:

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

我只想:

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

我尝试过使用LogLocator,但我还没有弄清楚这一点。


当前回答

如果你需要每N=3打一个勾:

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

或者用fig,ax = plt.subplots() :

N = 3  # 1 tick every 3
xticks_pos = ax.get_xticks()
xticks_labels = ax.get_xticklabels()
myticks = [j for i,j in enumerate(xticks_pos) if not i%N]  # index of selected ticks
newlabels = [label for i,label in enumerate(xticks_labels) if not i%N]

(显然你可以用(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并重新排序)。

其他回答

对于轴对象,有一个set_ticks()函数。

或者,如果你想简单地设置tick的数量,同时允许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)

当使用日志尺度时,可以使用以下命令确定主要刻度的数量

import matplotlib.pyplot as plt

....

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

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

感谢@bgamari介绍locator_params()函数的帖子,但是当使用日志尺度时,nticks参数抛出错误。

如果有人仍然在搜索结果中看到这一页:

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)

Xticks函数与range函数自动迭代

Start_number = 0

End_number = len(你拥有的数据)

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

旋转= 90度倾斜有助于长滴答

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