Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试创建测试图案样式栏时,Imshow和pcolor会抛出错误_Python_Matplotlib - Fatal编程技术网

Python 尝试创建测试图案样式栏时,Imshow和pcolor会抛出错误

Python 尝试创建测试图案样式栏时,Imshow和pcolor会抛出错误,python,matplotlib,Python,Matplotlib,我正在尝试创建一个图像,用作我正在创建的新颜色贴图的测试模式。地图应该有九种独特的颜色,在0-8之间的整数处有中断。颜色贴图本身很好,但我似乎无法生成图像本身 我使用熊猫制作测试阵列,如下所示: 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 m

我正在尝试创建一个图像,用作我正在创建的新颜色贴图的测试模式。地图应该有九种独特的颜色,在0-8之间的整数处有中断。颜色贴图本身很好,但我似乎无法生成图像本身

我使用熊猫制作测试阵列,如下所示:

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中的he值时,它的绘图效果很好:

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()

产生预期的标准彩色斑点(无误差)

这里的问题是,数据帧中充满了对象,而不是数字。如果执行
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