Python 3D散点图颜色图问题
我有四维的数据(x、y、z的位移,还有相应的电压),我想在Python中把这些数据画成一个3D散点图。我已经能画出3D图了,但我希望点的颜色能根据电压的大小来变化,也就是用一种颜色映射的方法。
我尝试了几种方法,但总是无法成功,出现了一个错误:ValueError: Cannot convert argument type <type 'numpy.ndarray'> to rgba array
。我不太确定该如何转换我需要的内容,所以如果有人能帮帮我,我会非常感激。
我的代码在这里:
fig = plt.figure()
from mpl_toolkits.mplot3d import Axes3D
cmhot = plt.cm.get_cmap("hot")
ax = fig.add_subplot(111, projection='3d',)
ax.scatter(x, y, z, v, s=50, c = cmhot)
plt.show()
1 个回答
10
ax.scatter 这个函数可以接收一个颜色参数 c
,这个参数可以是一个序列,比如一个 list
(列表)或者一个 array
(数组),同时还可以接收一个 cmap
参数来指定颜色映射。这样,你就可以根据电压的大小来改变颜色。你可以这样定义:
c = np.abs(v)
这样的话,正电压和负电压会显示成相同的颜色。如果你想让每种颜色(无论是正的还是负的)都有自己独特的颜色,你只需要用 c = v
。
举个例子,
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
x, y, z, v = (np.random.random((4,100))-0.5)*15
c = np.abs(v)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cmhot = plt.get_cmap("hot")
cax = ax.scatter(x, y, z, v, s=50, c=c, cmap=cmhot)
plt.show()