我的图表上有太多的刻度,它们相互碰撞。
如何减少蜱虫的数量?
例如,我有蜱:
1E-6, 1E-5, 1E-4, ... 1E6, 1E7
我只想:
1E-5, 1E-3, ... 1E5, 1E7
我尝试过使用LogLocator,但我还没有弄清楚这一点。
我的图表上有太多的刻度,它们相互碰撞。
如何减少蜱虫的数量?
例如,我有蜱:
1E-6, 1E-5, 1E-4, ... 1E6, 1E7
我只想:
1E-5, 1E-3, ... 1E5, 1E7
我尝试过使用LogLocator,但我还没有弄清楚这一点。
或者,如果你想简单地设置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)
以防有人还需要,既然什么都没有 这对我很有用,我想出了一个非常 保持外观的简单方法 生成的情节“是”,而固定的数字 精确到N:
import numpy as np
import matplotlib.pyplot as plt
f, ax = plt.subplots()
ax.plot(range(100))
ymin, ymax = ax.get_ylim()
ax.set_yticks(np.round(np.linspace(ymin, ymax, N), 2))
要解决刻度的自定义和外观问题,请参阅matplotlib网站上的刻度定位器指南
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
将x轴上的tick总数设置为3,并将它们均匀地分布在轴上。
还有一个关于这个的很好的教程
@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)
如果你需要每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并重新排序)。
Xticks函数与range函数自动迭代
Start_number = 0
End_number = len(你拥有的数据)
Step_number =从开始到结束要跳过多少次
旋转= 90度倾斜有助于长滴答
plt.xticks(range(start_number,end_number,step_number),rotation=90)
如果你想要10个嘀嗒:
y轴:ax.set_yticks (ax.get_yticks () [:: len (ax.get_yticks ()) / / 10])
x轴:ax.set_xticks (ax.get_xticks () [:: len (ax.get_xticks ()) / / 10])
这只是获取你的tick,并选择列表中的每10个,并将其设置回你的tick。您可以随心所欲地更改刻度数。