2016-12-13 48 views
1

我想绘制一个4维数组作为第四维颜色。这里是我的矩阵样本:Matplotlib二维数组中的4D数据

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

我:

[[ 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

所以得到这个错误:

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

使用numpy数组,而不是普通列表 –

回答

2

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

二维性实际上是问题的关键。我怀疑你的data变量是numpy.matrix而不是香草numpy.array。甲matrix是特定类别的2D阵列的具有各种特殊的性质,包括一个事实,即它的一个切片(例如,data[:, 0])是仍然 2维matrix对象,而.scatter()预计每个参数是一个一维阵列。

修复的方法是说:

data = numpy.asarray(data) 

您的数据从matrix转换为普通阵列其列片将是一维的。

顺便说一句:你可能打算说cmap='hot'。对plt.hot()的呼叫设置了默认色彩映射(因此您的数字看起来可能正确,但有副作用),但实际上它返回None