根据存储在 DataFrame 列中的 R、G、B 在 plotly 3D 散点图中设置标记颜色
Setting markers colour in plotly 3D scatterplot according to R, G, B stored in DataFrame columns
我有以下 pandas DataFrame:
>>> print(df.head())
X Y Z R G B
0 -846.160 -1983.148 243.229 22 24 19
1 -846.161 -1983.148 243.229 31 37 28
2 -846.157 -1983.148 243.231 20 21 18
3 -846.160 -1983.148 243.230 21 25 18
4 -846.159 -1983.147 243.233 38 48 34
然后我将其中的数据绘制成 3D 散点图,如下所示:
import plotly.express as px
fig = px.scatter_3d(df, x='X', y='Y', z='Z')
fig.update_traces(marker=dict(size=4), selector=dict(mode='markers'))
fig.show()
情节如下所示。
如您所见,图中的每个标记都是蓝色的。是否有任何选项,如何使用 df
DataFrame 中的 R
、G
、B
列更改绘图中每个标记的颜色?
您可以使用 graph_objs.Scatter3d
:
import pandas as pd
import plotly.graph_objs as go
df = pd.DataFrame({'X': [1,2,3,4,5,],
'Y': [1,3,2,4,1],
'Z': [4,1,3,4,1],
'R': [252, 11, 250, 21, 8],
'G': [1, 127, 251, 25, 244],
'B': [1, 28, 8, 128, 4]})
trace = go.Scatter3d(x=df.X,
y=df.Y,
z=df.Z,
mode='markers',
marker=dict(size=5,
color=['rgb({},{},{})'.format(r,g,b) for r,g,b in zip(df.R.values, df.G.values, df.B.values)],
opacity=0.9,))
data = [trace]
layout = go.Layout(margin=dict(l=0,
r=0,
b=0,
t=0))
fig = go.Figure(data=data, layout=layout)
fig.show()
你得到:
我有以下 pandas DataFrame:
>>> print(df.head())
X Y Z R G B
0 -846.160 -1983.148 243.229 22 24 19
1 -846.161 -1983.148 243.229 31 37 28
2 -846.157 -1983.148 243.231 20 21 18
3 -846.160 -1983.148 243.230 21 25 18
4 -846.159 -1983.147 243.233 38 48 34
然后我将其中的数据绘制成 3D 散点图,如下所示:
import plotly.express as px
fig = px.scatter_3d(df, x='X', y='Y', z='Z')
fig.update_traces(marker=dict(size=4), selector=dict(mode='markers'))
fig.show()
情节如下所示。
如您所见,图中的每个标记都是蓝色的。是否有任何选项,如何使用 df
DataFrame 中的 R
、G
、B
列更改绘图中每个标记的颜色?
您可以使用 graph_objs.Scatter3d
:
import pandas as pd
import plotly.graph_objs as go
df = pd.DataFrame({'X': [1,2,3,4,5,],
'Y': [1,3,2,4,1],
'Z': [4,1,3,4,1],
'R': [252, 11, 250, 21, 8],
'G': [1, 127, 251, 25, 244],
'B': [1, 28, 8, 128, 4]})
trace = go.Scatter3d(x=df.X,
y=df.Y,
z=df.Z,
mode='markers',
marker=dict(size=5,
color=['rgb({},{},{})'.format(r,g,b) for r,g,b in zip(df.R.values, df.G.values, df.B.values)],
opacity=0.9,))
data = [trace]
layout = go.Layout(margin=dict(l=0,
r=0,
b=0,
t=0))
fig = go.Figure(data=data, layout=layout)
fig.show()
你得到: