plotly px.scatter_3d修改marker_size参数无效果问题咨询
问题原因
- Plotly Express(px)的
size参数是数据映射参数,不是直接设置marker的像素尺寸:px会自动将传入的列/数组的数值做归一化处理,映射到预设的尺寸区间内。你给出的示例df中marker_size列所有行取值均为100,修改为全0.1、全1等统一值后,所有样本的size取值仍然完全相同,归一化后所有点对应的映射尺寸完全一致,所以散点大小不会有任何变化;传入[1]*len(df)也是同理,所有值相等,映射结果和使用marker_size列完全一致。 - 传入
size=1报错是因为px的size参数仅支持两种输入:要么是dataframe中的列名,要么是和数据长度一致的序列,不支持直接传入单个常量值。
解决办法
方案1:所有散点设为相同大小(最适配你的场景)
不需要在px.scatter_3d中传入size参数,绘图完成后直接通过update_traces设置全局marker尺寸即可:
fig = px.scatter_3d(df, x='x', y='y', z = 'z', color='labels', hover_name = df.index, opacity = 0.5) # 直接设置marker像素大小,数值根据需求调整即可 fig.update_traces(marker=dict(size=3)) fig.write_html(file_name)
方案2:需要根据列值区分不同点的大小
如果你确实需要用marker_size列控制不同点的尺寸,需要额外增加size_max参数控制映射的最大尺寸,同时保证marker_size列的数值存在差异:
fig = px.scatter_3d(df, x='x', y='y', z = 'z', color='labels', hover_name = df.index, opacity = 0.5, size = 'marker_size', size_max=8) # 调整这个值控制最大点的尺寸 fig.write_html(file_name)
如果需要精确控制列数值和实际尺寸的对应关系,还可以在update_traces中设置size_ref参数:比如设置marker=dict(size_ref=10)就代表marker_size列中取值为10的点,实际渲染尺寸为1像素。
内容的提问来源于stack exchange,提问作者Tim Kirkwood
相关产品推荐
相关产品推荐

