Matplotlib 2D数组中的4D数据

时间:2016-12-13 16:30:10

标签: python matrix matplotlib

我正在尝试使用第四维颜色绘制4D数组。这是我的矩阵样本:

[[ 4.216  0.     1.     0.   ]
 [ 5.36   0.     1.     0.   ]
 [ 5.374  0.     2.     0.   ]
 ..., 
 [ 0.294  0.     1.     0.   ]
 [ 0.314  0.     2.     0.   ]
 [ 0.304  0.     1.     0.   ]]

第4列仅包含值0,1和2.

所以当我尝试使用这个脚本绘制它时:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data[:,0],data[:,1],data[:,2], c=data[:,3], cmap=plt.hot())
plt.show()

我收到此错误:

TypeError: can't multiply sequence by non-int of type 'float'

1 个答案:

答案 0 :(得分:2)

这不是4D阵列。它是一个有4列的2D数组(2个维度可以称为“行”和“列”)。但我看到你想说的是 - 每一行都可以被解释为描述四维空间中的一个点,第四个“维度”是颜色。

二维性实际上是问题的关键。我怀疑您的data变量是numpy.matrix而不是香草numpy.arraymatrix是特定类的2D数组,具有各种特殊属性,包括它的一部分(例如,data[:, 0] 仍然 < / strong>一个二维matrix对象,而.scatter()期望每个参数都是一维数组。

解决方法是:

data = numpy.asarray(data)

将数据从matrix转换为正常数组,其列切片将为1维。

顺便说一句:你可能想说cmap='hot'。对plt.hot()的调用会设置默认色彩图(因此您的图形可能看起来正确,但有副作用)但它实际上会返回None