未正确应用matplotlib中的3D散点图的颜色映射

时间:2017-10-11 03:45:25

标签: python pandas matplotlib plot scatter

我有一组数据,我提取的坐标形成了我的点的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循环使得颜色映射不可能(即每次迭代都设置颜色的基线,因此无法区分最小值/最大值,因为每个新点创建一个新的最小值/最大值)?

谢谢!

2 个答案:

答案 0 :(得分:1)

这应该有效:

ax.scatter(df['x'], df['y'], df['z'], cmap='bwr', c=df['j'])

(没有任何for循环)

答案 1 :(得分:1)

我想你想得到这样的地图: enter image description here

我的代码直接使用您要绘制的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()
希望能帮到你。