如何从 matplotlib 中删除框架(pyplot.figure vs matplotlib.figure)(matplotlib 中的 frameon=False 有问题)

新手上路,请多包涵

要删除图中的框架,我写

frameon=False

pyplot.figure 完美配合,但与 matplotlib.Figure 配合使用,它只会删除灰色背景,框架会保留。另外,我只想显示线条,其余所有图形都是透明的。

使用 pyplot 我可以做我想做的事,我想用 matplotlib 做这件事有很长的原因我宁愿不提扩展我的问题。

原文由 Emmet B 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 427
2 个回答

首先,如果您使用的是 savefig ,请注意它会在保存时覆盖图形的背景颜色,除非您另有指定(例如 fig.savefig('blah.png', transparent=True) )。

但是,要在屏幕上删除轴和图形的背景,您需要将 ax.patchfig.patch 设置为不可见。

例如

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))

for item in [fig, ax]:
    item.patch.set_visible(False)

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

在此处输入图像描述

(当然,你在SO的白底上是看不出来的,但是一切都是透明的。。。)

如果您不想显示直线以外的任何内容,请使用 ax.axis('off') 关闭轴:

 import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))

fig.patch.set_visible(False)
ax.axis('off')

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

在此处输入图像描述

不过,在那种情况下,您可能想让坐标轴占据整个图形。如果您手动指定轴的位置,您可以让它占据整个图形(或者,您可以使用 subplots_adjust ,但这对于单个轴的情况更简单)。

 import matplotlib.pyplot as plt

fig = plt.figure(frameon=False)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.plot(range(10))

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

在此处输入图像描述

原文由 Joe Kington 发布,翻译遵循 CC BY-SA 3.0 许可协议

ax.axis('off') ,正如 Joe Kington 指出的那样,将删除除绘制线之外的所有内容。

对于那些只想删除框架(边框)并保留标签、代码等的人,可以通过访问轴上的 spines 对象来实现。给定一个轴对象 ax ,以下应删除所有四个边的边框:

 ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

并且,如果从图中删除 xy 滴答声:

  ax.get_xaxis().set_ticks([])
 ax.get_yaxis().set_ticks([])

原文由 peeol 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题