Imshow和pcolor在创建测试样式条时抛出错误
我正在尝试创建一张图片,用作我正在制作的新颜色映射的测试图案。这个颜色映射应该有九种独特的颜色,颜色的分界点在0到8的整数上。颜色映射本身没问题,但我就是无法生成这张图片。
我使用pandas来制作测试数组,代码如下:
mask=pan.DataFrame(index=np.arange(0,100),columns=np.arange(1,91))
mask.ix[:,1:10]=0.0
mask.ix[:,11:20]=1.0
mask.ix[:,21:30]=2.0
mask.ix[:,31:40]=3.0
mask.ix[:,41:50]=4.0
mask.ix[:,51:60]=5.0
mask.ix[:,61:70]=6.0
mask.ix[:,71:80]=7.0
mask.ix[:,81:90]=8.0
这可能不是最优雅的方法,但它能生成我想要的数组。
然而,当我尝试用imshow或pcolor来绘制这个数组时,我遇到了错误。所以:
fig=plt.figure()
ax=fig.add_subplot(111)
image=ax.imshow(mask)
fig.canvas.draw()
出现了错误:“TypeError: 图像数据无法转换为浮点数”
而用pcolor替代imshow时,出现的错误是:“AttributeError: 'float'对象没有'view'属性”
不过,当我把mask中的值换成其他任何东西,比如随机数时,它就能正常绘制:
mask=pan.DataFrame(values=rand(100,90),index=np.arange(0,100),columns=np.arange(1,91))
fig=plt.figure()
ax=fig.add_subplot(111)
image=ax.imshow(mask)
fig.canvas.draw()
这会产生标准的彩色斑点图,没出现错误。
1 个回答
1
这里的问题是你的数据框里全是对象,而不是数字。你可以通过运行 mask.dtypes
来查看这一点。如果你想使用 pandas
数据框,创建 mask
时需要指定数据类型:
mask=pan.DataFrame(index=np.arange(0,100),columns=np.arange(1,91), dtype='float')
否则 pandas
就不知道你想要哪种数据类型。修改后你的代码应该就能正常工作了。
不过,如果你只是想用整数来测试颜色映射,使用简单的 numpy
数组可能会更好:
mask = np.empty((100,90), dtype='int')
mask[:, :10] = 0
mask[:, 10:20] = 1
...
当然,还有更简洁的方法来填充这些数据。例如:
mask[:] = np.arange(90)[None,:] / 10