Python 在matplotlib打印中隐藏轴文本

Python 在matplotlib打印中隐藏轴文本,python,matplotlib,plot,Python,Matplotlib,Plot,我试图在任意一个轴上绘制一个没有记号或数字的图形(我使用传统意义上的轴,而不是matplotlib术语!)。我遇到的一个问题是matplotlib通过减去值N,然后在轴的末端添加N来调整x(y)标签 这可能是含糊不清的,但以下简化示例突出了这一问题,其中“6.18”是N的违规值: import matplotlib.pyplot as plt import random prefix = 6.18 rx = [prefix+(0.001*random.random()) for i in ar

我试图在任意一个轴上绘制一个没有记号或数字的图形(我使用传统意义上的轴,而不是matplotlib术语!)。我遇到的一个问题是matplotlib通过减去值N,然后在轴的末端添加N来调整x(y)标签

这可能是含糊不清的,但以下简化示例突出了这一问题,其中“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\u可见(假)

  • 有没有更好的方法来实现上述目标?如果相关的话,我的最终绘图将是图形中的4x4子地块


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

    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\u visible(False)
    set\u ticks([])
    也会隐藏网格线。

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

    设置x轴的主格式化程序

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

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

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

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

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

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

    或者更一般地说(@Armin Okić),您可以将其设置为
    “None”

    当使用面向对象的API时,
    Axes
    对象有两种删除轴文本的有用方法,以及

    假设您使用

    fig, ax = plt.subplots(1)
    ax.plot(x, y)
    
    如果只想删除勾号标签,可以使用

    ax.set_xticklabels([])
    
    ax.set_xticks([])
    
    或者,要完全清除蜱虫,您可以使用

    ax.set_xticklabels([])
    
    ax.set_xticks([])
    

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

    我对这个数字进行了颜色编码,以简化过程

    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)
    

    嘿,Ofri-那太好了,谢谢,但是现在(只是让人尴尬)如果我想添加一个xlabel(),会发生什么?除了手动放置文本小部件,您如何将此示例扩展到3d?ax=plt.gca(projection='3d')、ax.axes.get_zaxis().set_visible(False)给出
    “axes3dsublot”对象没有属性“get_zaxis”
    此答案不允许显示网格线。@saullo castro的答案是这样的……问题是,当x_轴被设置为不可见时,网格就会出现:(编辑:刚刚看到@saullo castro的答案,解决了这个问题。@user989762在您的例子中,这个方法不起作用,甚至
    get_xaxis()。set_visible(False)
    。我认为matplotlib在这种情况下会初始化一些参数,就像绘图是2D一样。
    ax.set\u zticks([])
    会做你想做的事情如果你只想做一个勾号怎么办?是的,这对只隐藏标签很有用,因为.set\u xticks([])也会删除记号标记本身。这会删除共享该轴的所有子地块的标签:/共享轴时,基于设置记号标记的解决方案会在共享轴上传播。只有基于记号标记的解决方案对我来说运行良好。
    plt.tick记号参数
    需要一个
    bool
    而不是字符串。因此
    'off'
    实际lly的计算结果为
    True
    ,因此该命令实际上反直觉地显示了记号和标签。我从这是什么时候开始就没有发现任何信息。我有点怀疑这里的任何答案是否真的回答了这个问题。对我来说,它看起来像是问如何回答。但所有的答案都显示了各种方法如何摆脱所有的t他勾选标签。如果问题已被答案取代,也许应该编辑问题,询问答案提供了什么解决方案?
    ax.set\xticklabels([])
    ax.set\xticks([])
    对我不起作用,但
    ax.axes.get\xaxis().set\u visible(False)
    没有。我发现这个解决方案比其他解决方案更简单,但我想补充的是,为了不依赖于背景色,颜色可以设置为“None”。我要指出,这应该是字符串“None”,而不是python literal
    None
    。后者抛出一个异常杠杆+1,就像一个符咒