我正在使用 Plotly 的 go.Cone 函数来可视化 3D 数据。在我的图中,我用位置 (x, y, z) 和方向 (u, v, w) 表示圆锥体,其中分量 u、v 和 w 对应于每个方向上的力。目前,图中的颜色条默认基于力矢量的总大小 (sqrt(u^2 + v^2 + w^2))。
但是,由于我对力进行归一化以保持如果锥体大小相同,则此默认色阶不合适,因为所有值最终都小于或等于 1。我希望颜色条仅反映我使用的 DataFrame 中特定列的值,而不是综合大小。换句话说,我希望每个锥体根据 DataFrame 中在其位置处预先计算的值进行着色,而不考虑默认大小。
我对力进行了标准化,因为以前存在大小问题,导致一些大的锥体和许多太小,如图 1 所示:
fig1 在此处输入图像描述
使用归一化数据生成的图像如下所示: Fig2 在此处输入图像描述
这是我正在使用的代码:
fig = go.Figure(data=go.Cone(
x=df[“x”], y=df[“y”], z=df[“z”],
u=df[“Force_x”]/df[“Force_Mag”], v=df[“Force_y”]/df[“Force_Mag”], w=df[“Force_z”]/df[“Force_Mag”],
colorscale=‘Viridis’, colorbar=dict(title=‘Force Mag’),
hovertext=df[“Aminoacido”], # text for info
hoverinfo=“x+y+z+text+norm”,
sizemode=“absolute”, sizeref=10, # cone size
fig.show()
))
DataFrame 已经在 df["Force_Mag"] 中具有大小,这是我想用于着色和设置的列颜色条。我尝试了几种方法但没有成功。有没有办法用 go.Cone 来实现这种类型的可视化?
提前感谢您的帮助!
尝试使用类似的东西:
color=df['force_mag']|| |但它不兼容,我希望添加一个颜色图,而不是 go.cone 中默认使用的颜色图
but it is not compatible, I was hoping to add a colormap other than the default one plotly uses in go.cone
当然可以,可以通过将
cone.colorscale
属性设置为的
'Force_Mag'
列来根据 DataFrame 中的单个列在
go.Cone
中分配颜色。以下是如何执行此操作的方法:
import plotly.graph_objects as go
# 假设的 DataFrame 名为 'df',其中包含 'x'、'y'、'z'、'Force_x'、'Force_y'、'Force_z' 和 'Force_Mag' 列
# 创建锥体图
fig = go.Figure(data=go.Cone(
x=df['x'], y=df['y'], z=df['z'],
u=df['Force_x'], v=df['Force_y'], w=df['Force_z'],
colorscale='Viridis', # 选择喜欢的 colorscale
color=df['Force_Mag'], # 将颜色设置为 'Force_Mag' 列
colorbar=dict(title='Force Mag'),
hovertext=df['Aminoacido'],
hoverinfo='x+y+z+text+norm',
sizemode='absolute',
sizeref=10
))
fig.show()
说明:
-
color=df['Force_Mag']
: 此行是关键。它告诉go.Cone
使用'Force_Mag'
列中的值作为每个锥体的颜色。 -
colorscale='Viridis'
: 这将为的颜色分配'Viridis'
colorscale。可以将其替换为任何其他 Plotly colorscale 。
通过进行此更改,的颜色条和锥体现在将根据
'Force_Mag'
列中的值进行着色,而不是计算出的矢量大小。