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

如何减少蜱虫的数量?

例如,我有蜱:

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

我只想:

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

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


当前回答

如果你想要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。您可以随心所欲地更改刻度数。

其他回答

以防有人还需要,既然什么都没有 这对我很有用,我想出了一个非常 保持外观的简单方法 生成的情节“是”,而固定的数字 精确到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,并将它们均匀地分布在轴上。

还有一个关于这个的很好的教程

如果你想要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。您可以随心所欲地更改刻度数。

@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)

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

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)