Python 3D散点图颜色图问题

5 投票
1 回答
23646 浏览
提问于 2025-04-17 16:56

我有四维的数据(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()

enter image description here

撰写回答