作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过保存一系列图像制作电影,然后使用 ImageJ将它们放在一起,如下所示:
for i in range(n):
fname = 'out_' + str(1000+i)
plt.imsave(fname, A[i], cmap=cmapA)
我想以某种方式“连接”两个图像(例如,它们并排显示)并保存,使用不同的颜色图生成。所以假设:
for i in range(n):
fname = 'out_' + str(1000+i)
plt.hypothetical_imsave(fname, (A[i], B[i]), cmap=(cmapA, cmapB), axis=1)
当然,这是伪代码,但是有没有什么方法可以在不安装全新软件包的情况下使用旧的 numpy 和 matplotlib 来做到这一点?
最佳答案
不是像我上面的回答那样创建两个临时图像,另一种方法是使用 imshow
制作两个数组,如下例所示。
我们将使用 ._rgbacache
从 imshow
对象中获取 numpy 数组,但要生成它,您必须在上显示 imshow
对象一个轴,因此开头是 fig
和 ax
。
import numpy as np
import matplotlib.pyplot as plt
# Need to display the result of imshow on an axis
fig=plt.figure()
ax=fig.add_subplot(111)
# Save fig a with one cmap
a=np.random.rand(20,20)
figa=ax.imshow(a,cmap='jet')
# Save fig b with a different cmap
b=np.random.rand(20,20)
figb=ax.imshow(a,cmap='copper')
# Have to show the figure to generate the rgbacache
fig.show()
# Get the array of data
figa=figa._rgbacache
figb=figb._rgbacache
# Stitch the two arrays together
figc=np.concatenate((figa,figb),axis=1)
# Save without a cmap, to preserve the ones you saved earlier
plt.imsave('figc.png',figc,cmap=None)
编辑:
要使用 imsave
和类似文件的对象执行此操作,您需要 cStringIO
:
import numpy as np
import matplotlib.pyplot as plt
from cStringIO import StringIO
s=StringIO()
t=StringIO()
# Save fig a with one cmap to a StringIO instance. Need to explicitly define format
a=np.random.rand(20,20)
plt.imsave(s,a,cmap='jet',format='png')
# Save fig b with a different cmap
b=np.random.rand(20,20)
plt.imsave(t,b,cmap='copper',format='png')
# Return to beginning of string buffer
s.seek(0)
t.seek(0)
# Get the array of data
figa=plt.imread(s)
figb=plt.imread(t)
# Stitch the two arrays together
figc=np.concatenate((figa,figb),axis=1)
# Save without a cmap, to preserve the ones you saved earlier
plt.imsave('figc.png',figc,cmap=None)
关于python-2.7 - 将来自 plt.imsave 的两个图像与不同的 cmap 连接起来,而无需安装另一个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343533/
我是一名优秀的程序员,十分优秀!