在matplotlib图中隐藏轴文本

Dav*_*ave 330 python plot matplotlib

我试图在任一轴上绘制一个没有刻度线或数字的图形(我使用传统意义上的轴,而不是matplotlib命名法!).我遇到的一个问题是matplotlib通过减去值N来调整x(y)ticklabels,然后在轴的末尾添加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()
Run Code Online (Sandbox Code Playgroud)

我想知道的三件事是:

  1. 如何首先关闭这种行为(虽然在大多数情况下它是有用的,但并不总是!)我已经查看了matplotlib.axis.XAxis,找不到任何合适的东西

  2. 怎么能让N消失(即X.set_visible(False))

  3. 还有更好的方法来完成上述任务吗?我的最终情节将是图中的4x4子图,如果这是相关的.

Ofr*_*viv 418

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

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)
Run Code Online (Sandbox Code Playgroud)

或者,您可以将刻度设置为空列表:

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])
Run Code Online (Sandbox Code Playgroud)

在第二个选项中,您仍然可以使用plt.xlabel()plt.ylabel()向轴添加标签.

  • 这个答案不允许显示网格线.@saullo castro的回答确实...... (11认同)
  • 你怎么能把这个例子扩展到3d?AX = plt.gca(投影= '3D'),ax.axes.get_zaxis().set_visible(假)给出` 'Axes3DSubplot' 对象没有属性"get_zaxis'` (5认同)
  • 嘿Ofri - 这很好,谢谢,但现在(只是为了尴尬)如果我想添加一个xlabel()会发生什么?除了手动放置文本小部件. (2认同)

Sau*_*tro 203

如果您只想隐藏保留网格线的轴文本:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])
Run Code Online (Sandbox Code Playgroud)

执行set_visible(False)set_ticks([])将隐藏网格线.

  • 这会删除共享该轴的*all*子图的标签:/ (4认同)

Ébe*_*aac 116

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

plt.xticks([])
plt.yticks([])
Run Code Online (Sandbox Code Playgroud)

  • 我只是为一站式商店做`plt.axis('off')`。 (5认同)
  • 这也会删除网格线(如果有)。 (3认同)

小智 51

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

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

ax.xaxis.set_major_formatter(plt.NullFormatter())
Run Code Online (Sandbox Code Playgroud)

  • 是的,这对于仅隐藏标签很有用,因为.set_xticks([])也会删除刻度标记本身. (5认同)

Gin*_*oaf 40

我实际上无法根据此处的任何代码片段(甚至是答案中接受的代码片段)渲染没有边框或轴数据的图像.在深入了解一些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)
Run Code Online (Sandbox Code Playgroud)

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

  • `plt.tick_params` 需要一个 `bool` 而不是字符串。因此,“off”实际上计算为“True”,因此与直觉相反,该命令实际上显示了刻度线和标签。我没有找到任何信息,因为这是这种行为。 (2认同)

G M*_*G M 23

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

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

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)
Run Code Online (Sandbox Code Playgroud)


Ven*_*lam 14

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

plt.xticks(color='w')
plt.yticks(color='w')
Run Code Online (Sandbox Code Playgroud)

或者更概括地说(@Armin Oki?),您可以将其设置为"None".

  • 我发现这个解决方案比其他解决方案更简单,同时我会添加颜色可以设置为“无”,以便不依赖于背景颜色。 (2认同)
  • 我注意到这应该是字符串“None”,而不是 Python 文字“None”。后者抛出异常 (2认同)

Ste*_*ell 6

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

假设您使用

fig, ax = plt.subplots(1)
ax.plot(x, y)
Run Code Online (Sandbox Code Playgroud)

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

ax.set_xticklabels([])
Run Code Online (Sandbox Code Playgroud)

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

ax.set_xticks([])
Run Code Online (Sandbox Code Playgroud)

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