有没有一种方法来计算plotly Scatter3d的最佳sizeref值

pgccezyw  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(149)

我正在使用奇妙的plotly库绘制3D散点图,并试图确定如何计算气泡的大小。
请注意,数据并不那么重要(在这里很难显示),气泡的大小应该与“size”属性中的数据值成比例。不幸的是,该数据的值随时间而变化,因此设置固定的“大小”值是不实际的。plotly提供了“sizeref”属性(见下面的代码),它可以缩放气泡的大小。我发现了一个公式(在plotly网站上),适用于2D,但似乎不适用于3D图表。
我的问题是:是否有一个方便的公式来计算sizeref的值?我认为sizeref公式将取决于数据的最大/最小值(即。“size”属性的数据)和布局大小(800高度和800宽度,按照下面的代码)。我尝试了一些我自己的公式,但没有一个工作得很好。
任何想法将不胜感激(注:我正在使用Python,但我怀疑解决方案也适用于R中的plotly代码)。

import plotly
import plotly.graph_objs as go

#
# The dataframe, df, is calculated elsewhere
#

x = list(df["comp-0"])
y = list(df["comp-1"])
z = list(df["comp-2"])

text = list(df["label"])
color = list(df["cluster"])
size = list(df["degree"])
sizeref = 50
sizemin = 1

trace1 = go.Scatter3d(
    x=x, y=y, z=z,
    text=text,
    mode="markers",
    marker=dict(
        sizemode="diameter",
        sizeref=sizeref,
        sizemin=sizemin,
        size=size,
        color=color,
        colorscale="Viridis",
        line=dict(color="rgb(150, 150, 150)")
    )
)

data = [trace1]
title = "Clusters"
layout = go.Layout(height=800, width=800, title=title)

fig = go.Figure(data=data, layout=layout)
plotly.offline.plot(fig)
watbbzwu

watbbzwu1#

我在Plotly Express中使用的公式如下:https://github.com/plotly/plotly.py/blob/8445f916fa84fe17cfc15e95354c0a870113ad8c/packages/python/plotly/plotly/express/_core.py#L1721

sizeref = df["size_column"].max() / max_size ** 2

一些注意事项:

  • 这个公式假设sizemodearea,而不是diameter,这是考虑到人类如何感知大小的感知最佳方法。如果你想使用diameter模式,你可以使用sizeref = df["size_column"].max() / max_size
  • 这个公式不考虑“最小”大小,因为Plotly总是认为当数据为0时,最小大小为0。你不能将任意范围Map到大小。sizemin参数是一个“裁剪”参数,这意味着任何大小“可能”小于sizemin的标记都以sizemin呈现
  • Plotly Express中max_size的默认值是20,我发现15到60之间的值看起来不错,这取决于数据和子图的数量等。
ckx4rj1h

ckx4rj1h2#

创建一个新列“log_yvalues”,并使用log值作为大小变量,在大多数情况下应该足够好,也可以处理足够极端的情况。
只要确保你有一种方法来处理0,负,空值。

相关问题