在matplotlib图中隐藏轴文本

时间:2010-02-01 11:56:53

标签: python matplotlib plot

我正在尝试在任一轴上绘制没有刻度线或数字的图形(我使用传统意义上的轴,而不是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()

我想知道的三件事是:

  1. 如何首先关闭此行为(虽然在大多数情况下它很有用,但并非总是如此!)我查看了matplotlib.axis.XAxis并找不到合适的内容

    < / LI>
  2. 如何让N消失(即X.set_visible(False)

  3. 还有更好的办法吗?如果相关,我的最终情节将是图中的4x4子图。

8 个答案:

答案 0 :(得分:379)

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

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

答案 1 :(得分:189)

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

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

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

答案 2 :(得分:95)

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

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

答案 3 :(得分:46)

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

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

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

答案 4 :(得分:26)

我实际上无法根据此处的任何代码片段(甚至是答案中接受的代码片段)渲染没有边框或轴数据的图像。在深入研究了一些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调用基本上关闭了可能呈现的任何额外信息,并且在输出文件中有一个完美的图形。

答案 5 :(得分:9)

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

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)

答案 6 :(得分:3)

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

假设您使用

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

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

ax.set_xticklabels([])

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

ax.set_xticks([])

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

答案 7 :(得分:1)

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

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