首页 文章

在matplotlib图中隐藏轴文本

提问于
浏览
262

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

我想知道的三件事是:

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

  • 如何让N消失(即 X.set_visible(False)

  • 有没有更好的方法来做到这一点?如果相关,我的最终情节将是图中的4x4子图 .

6 回答

  • 77

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

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

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

  • 1

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

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

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

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

  • 43

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

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

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

  • 171

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

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

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

相关问题