在Matplotlib图中隐藏轴文本


369

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


我有点怀疑这里的答案是否真的回答了这个问题。在我看来,这个问题问如何摆脱偏移量。然而,所有答案都显示了各种方法来摆脱所有刻度线标签。如果问题已被答案取代,也许应该编辑该问题,以寻求答案为您提供解决方案?
ImportanceOfBeingErnest

Answers:


469

除了隐藏每个元素,您还可以隐藏整个轴:

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


2
嗨Ofri-太好了,谢谢,但是现在(很尴尬)如果我想添加xlabel()会发生什么?除了手动放置文本小部件。
戴夫

5
您如何将此示例扩展到3d?ax = plt.gca(projection ='3d'),ax.axes.get_zaxis()。set_visible(False)给出'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762 2014年

13
此答案不允许显示网格线。@saullo castro的答案确实有……
evan54

问题是,当x_axis设置为不可见时,网格dsappears :(编辑:刚刚看到@Saullo Castro的答案已解决了该问题。–
Shailen

1
@ user989762在您的情况下,此方法将不起作用,甚至无法使用get_xaxis().set_visible(False)。我认为在这种情况下,matplotlib会初始化一些参数,就像绘图是2D一样。ax.set_zticks([])会做您想要的事
kon psych 2015年

222

如果要仅隐藏保留网格线的轴文本:

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

set_visible(False)set_ticks([])也将隐藏网格线。


4
这会删除所有共享该轴的子图的标签:/
endolith



49

我实际上无法根据此处的任何代码段(甚至答案中接受的代码段)绘制没有边界或轴数据的图像。在浏览了一些API文档之后,我使用了这段代码来渲染图像

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

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


1
共享轴时,基于set_ticklabels的解决方案将在共享轴上传播。只有基于tick_params的解决方案对我来说效果很好。
Christian O'Reilly

39

我已经对该图进行了颜色编码以简化此过程。

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

在此处输入图片说明

您可以使用以下命令完全控制图形,以完成答案,我还添加了对样条线的控制:

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)

ax.set_xticklabels([])ax.set_xticks([])没有为我工作,但ax.axes.get_xaxis().set_visible(False)做到了。
Homero Esmeraldo

2
这应该是公认的答案
Jason S

6

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

假设您使用

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

如果您只想删除刻度线标签,则可以使用

ax.set_xticklabels([])

或完全删除刻度线,您可以使用

ax.set_xticks([])

这些方法对于准确指定刻度线的位置以及如何标记刻度线很有用。传递空列表将分别导致没有滴答声或标签。


2

一种技巧可能是将刻度标签的颜色设置为白色以隐藏它!

plt.xticks(color='w')
plt.yticks(color='w')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.