首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从matplotlib中删除帧(pyplot.figure与matplotlib.figure )(matplotlib中的frameon=False问题)

如何从matplotlib中删除帧(pyplot.figure与matplotlib.figure )(matplotlib中的frameon=False问题)
EN

Stack Overflow用户
提问于 2013-02-16 16:49:38
回答 11查看 317.8K关注 0票数 200

为了去掉图中的框架,我写道

代码语言:javascript
复制
frameon=False

pyplot.figure完美配合,但在matplotlib.Figure中,它只会移除灰色背景,框架会保留下来。另外,我只想显示线条,而图的其余部分都是透明的。

使用pyplot我可以做任何我想做的事情,我想使用matplotlib来做这件事,因为有一些很长的原因,我不想提及扩展我的问题。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-02-17 02:03:21

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

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

例如。

代码语言:javascript
复制
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')关闭轴

代码语言:javascript
复制
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,但对于单个轴的情况更简单)。

代码语言:javascript
复制
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)

票数 207
EN

Stack Overflow用户

发布于 2015-02-25 21:22:30

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

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

代码语言:javascript
复制
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标记:

代码语言:javascript
复制
 ax.get_xaxis().set_ticks([])
 ax.get_yaxis().set_ticks([])
票数 312
EN

Stack Overflow用户

发布于 2018-09-24 12:28:50

在更新版本的matplotlib中摆脱丑陋框架的最简单方法是:

代码语言:javascript
复制
import matplotlib.pyplot as plt
plt.box(False)

如果您真的必须始终使用面向对象的方法,那么就这样做:ax.set_frame_on(False)

票数 96
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14908576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档