python - 如何将多个 imshow() 结果放在一个图中?
问题描述
我想在一个图中绘制矩阵的所有迭代syn0
,但是下面的代码只显示最后一次迭代,如果我更改代码,它将打开绘图 60000 次,我怎样才能在一个图中绘制所有迭代阴谋?
syn0 = 2 * np.random.random((3, 4)) - 1
arr_syn0[0][0].append(syn0[0][0])
arr_syn0[0][1].append(syn0[0][1])
arr_syn0[0][2].append(syn0[0][2])
arr_syn0[0][3].append(syn0[0][3])
arr_syn0[1][0].append(syn0[1][0])
arr_syn0[1][1].append(syn0[1][1])
arr_syn0[1][2].append(syn0[1][2])
arr_syn0[1][3].append(syn0[1][3])
arr_syn0[2][0].append(syn0[2][0])
arr_syn0[2][1].append(syn0[2][1])
arr_syn0[2][2].append(syn0[2][2])
arr_syn0[2][3].append(syn0[2][3])
plt.figure()
x=plt.imshow(syn0,aspect='auto', interpolation="nearest", cmap='YlOrRd_r', origin="upper")
plt.colorbar(x)
plt.title('syn1')
plt.show()
解决方案
您说您想在一个图中绘制所有迭代,但由于您要迭代超过 60000 张图像,我猜您想要的是在同一个图上绘制新数据而不打开新数据。
为此,您应该imshow
仅在第一张图像上使用该draw
方法,并在其他图像上使用该方法,然后是pause
调用 GUI 事件循环并更新图像的方法。
试图将您的代码减少到最小、完整和可验证的示例,我会做这样的事情:
import numpy as np
import matplotlib.pyplot as plt
firstImage = True
for j in range(5):
syn0 = 2 * np.random.random((3, 4)) - 1
if firstImage:
img=plt.imshow(syn0,aspect='auto', interpolation="nearest", cmap='YlOrRd_r', origin="upper")
firstImage = False
else:
img.set_data(syn0)
plt.pause(0.1)
plt.draw()
plt.title('syn1')
此代码一个接一个地显示同一图形上的不同图像。希望这可以帮助。
推荐阅读
- javascript - 如何在javascript中将二维数组转换为二维字符串
- ios - 单击单元格中的按钮时访问所有单元格
- laravel-5 - 如何从 Laravel 视图中的链接调用控制器方法?
- javascript - Chrome 扩展通知:页面加载时的 API 调用
- jms - 带有 TLS 的 Websphere MQ 的 Nifi JMS 输入
- sql - 为每个参数选择第一个结果
- python - Python只打印一个文件
- javascript - parseFloat 与数字后的字符
- html - 我的图像损坏,没有出现在 HTML 代码中
- javascript - “无法访问未初始化的变量。” 在类构造函数中