通过 imshow matplotlib 使用网格时删除刻度线

问题描述 投票:0回答:3

this问题中,他们回答了如何在matplotlib中正确使用网格和

imshow
。我正在尝试做与他们相同的事情,但我想删除所有刻度(x 和 y)。当我尝试这样做时,它也消除了网格,我只显示没有网格和刻度的图像。我的代码是:

fig, ax = plt.subplots()
data = np.random.rand(20,20)
ax.imshow(data)
ax.set_xticks(np.arange(20))
ax.set_xticklabels(np.arange(20))
ax.set_xticks(np.arange(20)+0.5, minor=True)
ax.grid(which='minor',color='w',axis='x',linewidth=6)
ax.axes.xaxis.set_visible(False)
ax.axes.yaxis.set_visible(False)
plt.show()

有谁如何在保留网格的同时去除蜱虫(在我的例子中沿着x轴)?

python matplotlib imshow xticks
3个回答
2
投票

删除轴(通过 set_visible(False))也会删除网格。

但是,有一种解决方法可以将书脊和刻度线/标签分别设置为不可见:

fig, ax = plt.subplots()
data = np.random.rand(20,20)
ax.imshow(data)
ax.set_xticks(np.arange(20))
ax.set_xticklabels(np.arange(20))
ax.set_xticks(np.arange(20)+0.5, minor=True)
ax.grid(which='minor',color='w',axis='x',linewidth=6)
# set axis spines (the box around the plot) to be invisible
plt.setp(ax.spines.values(), alpha = 0)
# set both tick marks and tick labels to size 0
ax.tick_params(which = 'both', size = 0, labelsize = 0)
plt.show()

为您提供输出:

注意,您可能需要调整 xlim/ylim 和网格参数以满足您的需求。


1
投票

这并不完美,但您可以将刻度标签设置为空列表。

ax.axes.get_xaxis().set_ticks([])
ax.axes.get_yaxis().set_ticks([])

仅保留网格中使用的次要 xticks。


0
投票

请注意,

ax
是一个
AxesImage
实例。各个
Axis
对象可通过
ax.axes.xaxis
ax.axes.yaxis
访问。

使用

Axis.set_ticks()

# Turn off ticks
ax.axes.xaxis.set_ticks([])
ax.axes.yaxis.set_ticks([])
© www.soinside.com 2019 - 2024. All rights reserved.