【问题标题】:Matplotlib 4D data in a 2D array二维数组中的 Matplotlib 4D 数据
【发布时间】:2017-04-28 19:15:36
【问题描述】:

我正在尝试使用颜色作为第 4 维来绘制 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'

【问题讨论】:

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

标签: python matrix matplotlib


【解决方案1】:

这不是 4D 数组。它是一个有 4 列的二维数组(二维可以称为“行”和“列”)。但我明白你想说什么——每一行都可以解释为描述 4 维空间中的一个点,第四个“维度”是颜色。

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

解决办法是:

data = numpy.asarray(data)

将您的数据从matrix 转换为列切片为一维的普通数组。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多