我有一组数据,我提取的坐标形成了我的点的x,y和z分量。在同一个数据框中,我有一个强度(让我们称之为j
),我想用它来将颜色贴图映射到该点。我的脚本在我的Pandas数据帧中通过迭代添加点:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for row, index in df.iterrows():
x = df[row]['x']
y = df[row]['y']
z = df[row]['z']
ax.scatter(x, y, z, cmap='bwr', c=df[row]['j'])
plt.show()
但是,所有点都是单一颜色,并且不响应每个点具有不同的颜色阴影,由df[row]['j']
定义(返回对应于我的点强度的整数)。我是否遗漏了明显的东西,或者是for循环使得颜色映射不可能(即每次迭代都设置颜色的基线,因此无法区分最小值/最大值,因为每个新点创建一个新的最小值/最大值)?
谢谢!
答案 0 :(得分:1)
这应该有效:
ax.scatter(df['x'], df['y'], df['z'], cmap='bwr', c=df['j'])
(没有任何for循环)
答案 1 :(得分:1)
我的代码直接使用您要绘制的df.column
:
import pandas as pd
import matplotlib.pyplot as plt
import io
from mpl_toolkits.mplot3d import Axes3D
t="""
0 , 1 , 0 , b
2 , 1 , 2 , b
3 , 2 , 1 , r
2 , 3 , 5 , r
3 , 2 , 5 , b
7 , 3 , 6 , g
8 , 3 , 6 , g
2 , 3 , 6 , g
7 , 3 , 6 , g
8 , 3 , 6 , g
2 , 3 , 6 , g
2 , 3 , 6 , g
3 , 4 , 6 , g
5 , 2 , 6 , r
6 , 2 , 6 , r
7 , 3 , 6 , r
2 , 1 , 6 , g
7 , 13 , 6 , r
8 , 23 , 6 , r
2 , 33 , 6 , r
"""
df=pd.read_csv(io.StringIO(t),names=['x','y','z','j'],sep=',')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(df.x, df.y, df.z,c=df.y)
plt.show()
希望能帮到你。