Hiding axis text in matplotlib plots
我试图在任意一个轴上绘制一个没有记号或数字的图形(我使用传统意义上的轴,而不是matplotlib术语!)我遇到的一个问题是matplotlib通过减去一个值n来调整x(y)标记标签,然后在轴的末尾加上n。
这可能是模糊的,但下面的简化示例强调了这个问题,其中"6.18"是n的违规值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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() |
我想知道的三件事是:
如何首先关闭这种行为(尽管在大多数情况下它是有用的,但并不总是如此!)我查过
如何使n消失(即
有没有更好的方法来完成以上的工作?如果相关的话,我的最后一个图是4x4子图。
您可以隐藏整个轴,而不是隐藏每个元素:
1 2 | frame1.axes.get_xaxis().set_visible(False) frame1.axes.get_yaxis().set_visible(False) |
或者,可以将刻度设置为空列表:
1 2 | frame1.axes.get_xaxis().set_ticks([]) frame1.axes.get_yaxis().set_ticks([]) |
号
在第二个选项中,您仍然可以使用
如果只想隐藏保留网格线的轴文本:
1 2 3 | frame1 = plt.gca() frame1.axes.xaxis.set_ticklabels([]) frame1.axes.yaxis.set_ticklabels([]) |
执行
如果你和我一样,在绘制图形时不总是检索轴,那么一个简单的解决方案是
1 2 | plt.xticks([]) plt.yticks([]) |
。
有点像旧的线程,但使用最新版本的matplotlib,这似乎是一种更快的方法:
设置X轴的主要格式设置工具
1 | ax.xaxis.set_major_formatter(plt.NullFormatter()) |
。
实际上,我无法基于这里的任何代码片段(甚至是在回答时接受的代码片段)呈现没有边框或轴数据的图像。在浏览了一些API文档之后,我找到了这个代码来呈现我的图像。
1 2 3 | 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) |
我使用
我把这个数字用彩色编码来简化这个过程。
1 2 3 | import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) |
。
。
您可以使用这些命令完全控制图形,以完成我添加的对样条曲线的控制的答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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) |
号
当使用面向对象的API时,
假设你用
1 2 | fig, ax = plt.subplots(1) ax.plot(x, y) |
如果只想删除勾号标签,可以使用
1 | ax.set_xticklabels([]) |
。
或者,要完全删除勾号,可以使用
1 | ax.set_xticks([]) |
这些方法对于准确指定标记的位置和标记方式非常有用。传递空列表将分别导致没有刻度或没有标签。
一个技巧是将勾号标签的颜色设置为白色以隐藏它!
1 2 | plt.xticks(color='w') plt.yticks(color='w') |
。