在matplotlib图中隐藏轴文本

我试图在坐标轴上绘制一个没有标记或数字的图形(我使用传统意义上的坐标轴,而不是matplotlib命名法!)我遇到的一个问题是matplotlib通过减去一个值N来调整x(y)tick标签,然后在轴的末尾添加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个子图。

712027 次浏览

你可以隐藏整个轴,而不是隐藏每个元素:

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()向坐标轴添加标签。

如果你想隐藏轴文本保持网格线:

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

执行set_visible(False)set_ticks([])也会隐藏网格线。

有点老线程,但这似乎是一个更快的方法,使用最新版本的matplotlib:

为x轴设置主要格式化程序

ax.xaxis.set_major_formatter(plt.NullFormatter())

我实际上无法根据这里的任何代码片段(甚至是回答中接受的那个)渲染一个没有边界或轴数据的图像。在深入研究了一些API文档之后,我找到了这段代码来渲染我的图像

plt.axis('off')
plt.tick_params(axis='both', left=False, top=False, right=False, bottom=False, labelleft=False, labeltop=False, labelright=False, labelbottom=False)
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

我使用tick_params调用基本上关闭了任何可能呈现的额外信息,我的输出文件中有一个完美的图形。

如果你像我一样,不总是检索轴,ax,在绘制图形时,那么一个简单的解决方案将是这样做

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

一个技巧是将蜱虫标签的颜色设置为白色来隐藏它!

plt.xticks(color='w')
plt.yticks(color='w')

或者更一般化地说(@Armin okich),你可以将它设置为"None"

当使用面向对象的API时,Axes对象有两个有用的方法用于删除轴文本,set_xticklabels()set_xticks()

假设你用

fig, ax = plt.subplots(1)
ax.plot(x, y)

如果您只想删除标记标签,您可以使用

ax.set_xticklabels([])

或者完全去除蜱虫,你可以使用

ax.set_xticks([])

这些方法对于指定标记的确切位置以及标记的标记方式非常有用。传递空列表将分别导致没有标记或没有标签。

我用颜色标记了这个图形以简化处理过程。

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

enter image description here

你可以使用这些命令完全控制图形,为了完成答案,我还添加了对样条的控制:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)


# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)


# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)

你可以简单地设置xlabelNone,在你的轴上。下面是一个使用海运的工作示例

from matplotlib import pyplot as plt
import seaborn as sns


tips = sns.load_dataset("tips")


ax = sns.boxplot(x="day", y="total_bill", data=tips)
ax.set(xlabel=None)


plt.show()

这样做以防你有次要情节

fig, axs = plt.subplots(1, 2, figsize=(16, 8))


ax[0].set_yticklabels([]) # x-axis
ax[0].set_xticklabels([]) # y-axis