我正在尝试使用第四维颜色绘制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'
答案 0 :(得分:2)
这不是4D阵列。它是一个有4列的2D数组(2个维度可以称为“行”和“列”)。但我看到你想说的是 - 每一行都可以被解释为描述四维空间中的一个点,第四个“维度”是颜色。
二维性实际上是问题的关键。我怀疑您的data
变量是numpy.matrix
而不是香草numpy.array
。 matrix
是特定类的2D数组,具有各种特殊属性,包括它的一部分(例如,data[:, 0]
) 仍然 < / strong>一个二维matrix
对象,而.scatter()
期望每个参数都是一维数组。
解决方法是:
data = numpy.asarray(data)
将数据从matrix
转换为正常数组,其列切片将为1维。
cmap='hot'
。对plt.hot()
的调用会设置默认色彩图(因此您的图形可能看起来正确,但有副作用)但它实际上会返回None
。