使用Matplotlib绘制带共用色条的多幅2D图时遇类型错误求助
解决Matplotlib绘图中的
TypeError: Image data can not convert to float错误 你的问题出在把变量名的字符串当成了实际的数据数组传递给imshow,导致Matplotlib无法处理文本类型的数据,抛出了类型错误。
错误原因分析
你这段代码里:
data=[] for i in range(1,5): data.append('dat%d'%i)
生成的data列表里存的是字符串(比如'dat1'、'dat2'),而不是你之前用np.genfromtxt读取到的numpy数组。当你在循环里把这些字符串传给ax.imshow()时,Matplotlib尝试把文本转换成绘图需要的浮点数数组,自然就失败了。
修正方案
直接把实际的numpy数组存入data列表,而不是变量名的字符串:
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 = [dat1, dat2, dat3, dat4] fig, axes = plt.subplots(nrows=2, ncols=2) # 现在dat是实际的数值数组,imshow可以正常解析 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()
额外说明
如果你确实需要通过字符串动态获取变量(不推荐,代码可读性差且容易出问题),可以使用globals()函数来获取全局变量,但还是更建议直接存储数组:
# 仅作演示,不推荐在实际代码中使用 data = [] for i in range(1,5): data.append(globals()[f'dat{i}'])
内容的提问来源于stack exchange,提问作者Grayrigel
相关产品推荐
相关产品推荐

