隐藏matplotlib图中的轴文本

550 投票
12 回答
846711 浏览
提问于 2025-04-15 18:44

我想画一个图,但不想在坐标轴上显示刻度和数字(我这里说的坐标轴是传统意义上的,不是matplotlib里的说法!)。我遇到的问题是,matplotlib会调整x(y)轴的标签,先减去一个值N,然后在坐标轴的末尾加上N。

这可能说得不太清楚,但下面这个简单的例子能说明问题,其中'6.18'就是那个让人烦恼的值N:

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

我想知道的三件事是:

  1. 怎么才能关闭这种行为(虽然在大多数情况下这很有用,但并不是总是这样!)我查过matplotlib.axis.XAxis,但找不到合适的设置。

  2. 我怎么才能让N消失(也就是X.set_visible(False)

  3. 有没有更好的方法来做到这一点?我的最终图表会是一个4x4的子图,如果这有关系的话。

12 个回答

225

如果你和我一样,在绘制图形时不总是获取坐标轴 ax,那么一个简单的解决办法就是这样做:

plt.xticks([])
plt.yticks([])
302

如果你想只隐藏坐标轴的文字,同时保留网格线:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

使用 set_visible(False)set_ticks([]) 这两种方法也会把网格线隐藏掉。

668

与其一个一个地隐藏每个元素,不如直接隐藏整个坐标轴:

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

或者,你可以把刻度设置为空列表:

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

在第二种方法中,你仍然可以使用 plt.xlabel()plt.ylabel() 来给坐标轴添加标签。

撰写回答