Python 在matplotlib打印中隐藏轴文本
我试图在任意一个轴上绘制一个没有记号或数字的图形(我使用传统意义上的轴,而不是matplotlib术语!)。我遇到的一个问题是matplotlib通过减去值N,然后在轴的末端添加N来调整x(y)标签 这可能是含糊不清的,但以下简化示例突出了这一问题,其中“6.18”是N的违规值: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
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
,但找不到任何合适的方法X.set\u可见(假)
)您可以隐藏整个轴,而不是隐藏每个元素:
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 literalNone
。后者抛出一个异常杠杆+1,就像一个符咒