迭代imshow并使用matplotlib绘制具有常见颜色条的多个2D地图

时间:2018-01-03 12:03:48

标签: python matplotlib contour imshow

我有4个输入数据文件。我试图通过使用常用颜色条从这些输入文件中读取数据来绘制2D轮廓图。我从以下答案中获得灵感:

1)How can I create a standard colorbar for a series of plots in python

2)Matplotlib 2 Subplots, 1 Colorbar

代码:

import numpy as np
import matplotlib.pyplot as plt

#Reading data from input files 
dat1 = np.genfromtxt('curmapdown.dat', delimiter='  ')
dat2 = np.genfromtxt('curmapup.dat', delimiter='  ')
dat3 = np.genfromtxt('../../../zika/zika1/CalculateCurvature/curmapdown.dat', delimiter='  ')
dat4 = np.genfromtxt('../../../zika/zika1/CalculateCurvature/curmapup.dat', delimiter='  ')

data=[]
for i in range(1,5):
    data.append('dat%d'%i)

fig, axes = plt.subplots(nrows=2, ncols=2)
# Error comes from this part
for ax,dat in zip(axes.flat,data):
     im = ax.imshow(dat, vmin=0, vmax=1)

fig.colorbar(im, ax=axes.ravel().tolist())
plt.show()

错误:

 Traceback (most recent call last):
 File "2dmap.py", line 15, in <module>
 im = ax.imshow(dat, vmin=0, vmax=1)
 File "/usr/lib/python2.7/dist-packages/matplotlib/__init__.py", line 1814, in inner
 return func(ax, *args, **kwargs)
 File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_axes.py", line 4947, in imshow
 im.set_data(X)
 File "/usr/lib/python2.7/dist-packages/matplotlib/image.py", line 449, in set_data
raise TypeError("Image data can not convert to float")

TypeError:图像数据无法转换为float

1 个答案:

答案 0 :(得分:1)

您正在将字符串 "dat1"附加到名为data的列表中。在绘制这个时,你试图将这个字符串转换为float,这显然是失败的

plt.imshow("hello")

将重新创建您看到的错误。

您希望将已加载的数据本身添加到名为dat1等的变量中。因此,您需要删除第一个for循环并执行类似

的操作
data = [dat1, dat2, dat3, dat4]