matplotlib之pyplot模块——图形的显示、关闭、重绘(show()、close()、draw())

当前有效matplotlib版本为:3.4.1

显示图形:show()

show()的功能为显示所有打开的图形。

函数的签名为:matplotlib.pyplot.show(*, block=None)

函数只有一个参数block,简单来讲,当取值为Truematplotlib采用非交互绘图模式,取值为Falsematplotlib采用交互绘图模式。

注意!show()函数的具体行为与当前后端(backend)息息相关,在交互式后端中图形将会嵌入到后端的GUI中显示。

def show(*args, **kwargs):
    _warn_if_gui_out_of_main_thread()
    return _backend_mod.show(*args, **kwargs)

调用pyplot.show()之后对pyplot.savefig()函数影响

在使用交互式后端时,如果想显示图形同时将图形保存为图像文件,需要注意pyplot.savefig()函数一定要在pyplot.show()函数前,因为在非交互绘图模式下,调用pyplot.show()函数后,Figure对象会关闭并解除在pyplot模块中的引用,此时再使用pyplot.savefig()函数将保存一个新的空图形。注意:交互绘图模式和调用面向对象式绘图方法Figure.savefig()保存图形不受影响。

jupyter notebooks会自动显示图形

在使用jupyter notebook时,jupyter后端(通过%matplotlib inline%matplotlib notebook%matplotlib widget等魔术命令激活)默认会在每个单元格最后调用pyplot.show()函数,因此,通常无需再显式调用pyplot.show()函数。

关闭图形:close()

close()函数的功能为销毁图形(figure)对象,在交互式后端中相当于关闭窗口。

close()函数的签名为:matplotlib.pyplot.close(fig=None)

函数的参数为fig,即需要关闭的图形。其取值有以下情况:

  • None:当前图形对象,相当于pyplot.gcf()
  • Figure对象:指定的Figure 实例。
  • 整数:图形的编号。
  • 字符串:图形的名称。
  • 'all':所有图形。

pyplot.close()函数源码:

def close(fig=None):

    if fig is None:
        manager = _pylab_helpers.Gcf.get_active()
        if manager is None:
            return
        else:
            _pylab_helpers.Gcf.destroy(manager)
    elif fig == 'all':
        _pylab_helpers.Gcf.destroy_all()
    elif isinstance(fig, int):
        _pylab_helpers.Gcf.destroy(fig)
    elif hasattr(fig, 'int'):
        # if we are dealing with a type UUID, we
        # can use its integer representation
        _pylab_helpers.Gcf.destroy(fig.int)
    elif isinstance(fig, str):
        all_labels = get_figlabels()
        if fig in all_labels:
            num = get_fignums()[all_labels.index(fig)]
            _pylab_helpers.Gcf.destroy(num)
    elif isinstance(fig, Figure):
        _pylab_helpers.Gcf.destroy_fig(fig)
    else:
        raise TypeError("close() argument must be a Figure, an int, a string, "
                        "or None, not %s" % type(fig))

简易案例

import matplotlib.pyplot as plt

f1,_=plt.subplots()
f2,_=plt.subplots()
f3,_=plt.subplots()
f4,_=plt.subplots()
# 关闭当前图形,即编号为4的图形
plt.close()
# 关闭编号为2的图形
plt.close(2)
# 关闭图形对象f3(编号为3的图形)
plt.close(f3)
# 显示当前活动的图形编号
print(plt.get_fignums())
# 关闭剩余的图形
plt.close('all')
# 显示当前活动的图形编号
print(plt.get_fignums())

输出为:

[1]
[]

重绘图形:draw()

draw()函数的签名为matplotlib.pyplot.draw()

draw()函数的功能为重绘图形,相当于调用了gcf().canvas.draw_idle()

在非交互绘图模式下,图形显示会被阻塞,当图形被修改时,不会立即重绘,需要使用draw()函数重绘图形(常见的使用场景为事件处理)。

  • 33
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值