如何使用不同的主网格间距进行 xticklabel

Sco*_*d C 3 python matplotlib gridlines xticks

如何绘制次要网格为 1、主要网格为 10、xticklabels 增量为20 个单位的图表?

这是我的示例代码和输出,xticklabels 每 10 个单位递增:

plt.figure(figsize=(10, 10))
ax = plt.gca()
major_ticks = np.arange(0, 60, 10)    
minor_ticks = np.arange(0, 60, 1)
ax.set_xticks(major_ticks)
ax.set_xticks(minor_ticks, minor=True)
ax.set_yticks(major_ticks)
ax.set_yticks(minor_ticks, minor=True)
ax.grid(which='major')
ax.grid(which='minor', alpha=0.5)
ax.set_aspect('equal')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但后来我想以 20 而不是 10 的增量显示 xticklabels 和 yticklabels,如下所示:

在此输入图像描述

知道如何实现这一点吗?谢谢

She*_*ore 5

只需将以下 4 行添加到代码末尾:您只需隐藏每个第二个主要刻度标签。差不多这样就可以得到你想要的东西了。[1::2]索引意味着从第二个索引开始并从那里获取每个第二个元素。我必须从第二个索引开始,因为第一个索引处的刻度标签是 0,您不想删除它。

编辑:如果您只想在有刻度标签的位置显示主要刻度,则可以进行以下修改(用箭头标记<---)。您可能会发现官方文档很有帮助。

没有主要刻度但有次要刻度的绘图

# Hiding for x-axis
for t in ax.xaxis.get_major_ticks()[1::2]:
    t.label.set_visible(False)
    t.tick1On = False # <----

# Hiding for y-axis
for t in ax.yaxis.get_major_ticks()[1::2]:
    t.label.set_visible(False)    
    t.tick1On = False # <----
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

没有小刻度和大刻度的绘图

如果你还想隐藏小刻度,除了上面的代码之外,你还可以执行以下操作

for t in ax.xaxis.get_minor_ticks():
    t.tick1On = False
    # t._apply_params(width=0) # suggested by Jayjayyy

for t in ax.yaxis.get_minor_ticks():
    t.tick1On = False     
    # t._apply_params(width=0) # suggested by Jayjayyy
Run Code Online (Sandbox Code Playgroud)

Jayjayyy建议避免所有 for 循环的直接方法

ax.tick_params(axis='both', which='minor', width=0)   
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述