python画图fig.show()一闪而过的解决方法

遇到的问题

python版本3.8.8

在测试scipy.signal.correlate2d函数的时候,跑官网的demo,结果绘图是一闪而过。函数链接:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.correlate2d.html#scipy.signal.correlate2d

测试代码

Use 2D cross-correlation to find the location of a template in a noisy image:
用2D 互相关在噪声图像中找到模板位置

from scipy import signal
from scipy import misc
import numpy as np
import matplotlib.pyplot as plt
from skimage import io

face = misc.face(gray=True) - misc.face(gray=True).mean()
template = np.copy(face[300:365, 670:750])  # right eye
template -= template.mean()
face = face + np.random.randn(*face.shape) * 50  # add noise
corr = signal.correlate2d(face, template, boundary='symm', mode='same')
y, x = np.unravel_index(np.argmax(corr), corr.shape)  # find the match


fig, (ax_orig, ax_template, ax_corr) = plt.subplots(3, 1,
                                                    figsize=(6, 15))
ax_orig.imshow(face, cmap='gray')
ax_orig.set_title('Original')
ax_orig.set_axis_off()
ax_template.imshow(template, cmap='gray')
ax_template.set_title('Template')
ax_template.set_axis_off()
ax_corr.imshow(corr, cmap='gray')
ax_corr.set_title('Cross-correlation')
ax_corr.set_axis_off()
ax_orig.plot(x, y, 'ro')
fig.show()

解决方法

做法

法一:在fig.show()后面加上一句:

input()

这样需要输入回车才会结束。

法二:
弃用最后的fig.show(),改用:

plt.show()

上述两种方法都可以解决画图一闪而过的问题。
得到了官网相同的图:
在这里插入图片描述

解释

在这里插入图片描述

在这里插入图片描述
对上面的老哥表示感谢,详见参考1.

其实fig.show()可以用于IPython。在IPython环境下,调用plt.show()是不能显示出绘制的图像的,但是调用fig.show()就可以显示出图像。

详见参考2

参考

[1]https://github.com/matplotlib/matplotlib/issues/13101
[2]https://eliasyin.com/2020/03/15/fig-show-%E4%B8%8E-plt-show/

### 使用Matplotlib `fig.add_subplot` 方法并保存生成的图表 在 Python 中,使用 Matplotlib 库可以通过调用 `plt.figure()` 创建一个新的图形对象,并通过该对象的方法 `add_subplot` 添加子图。为了去除图像周围的白边以及保存生成的图表为图像文件,可以按照如下方式实现: ```python import matplotlib.pyplot as plt import numpy as np # 数据准备 data = np.random.rand(3, 3) # 创建新的Figure对象 fig = plt.figure() # 调用add_subplot方法创建一个1x1网格中的第一个子图 ax = fig.add_subplot(111) # 显示数据作为图像 im = ax.imshow(data, cmap='viridis') # 关闭坐标轴显示以移除边缘空白 plt.axis('off') # 紧凑布局调整,减少不必要的空白区域 plt.tight_layout() # 设置保存路径和文件名 output_path = 'output_image.png' # 保存图像至指定位置,bbox_inches设置为'tight'可进一步裁剪多余空间 fig.savefig(output_path, bbox_inches='tight', pad_inches=0) # 展示绘制的结果(此步非必需) plt.show() ``` 上述代码展示了如何利用 `add_subplot` 函数来构建单个子图,并且设置了不显示坐标轴以便消除默认情况下存在的外边距[^1]。 对于希望控制更多细节的情况,比如精确设定分辨率(DPI),可以在创建 Figure 对象时传递额外参数: ```python fig = plt.figure(figsize=(8, 6), dpi=300) # figsize单位为英寸;dpi表示每英寸像素数 ``` 此外,在保存图片之前还可以调用 `subplots_adjust()` 来微调各部分之间的间距[^2]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值