有没有一种方法可以计算Plotly Scatter3d的最佳sizeref值?

6
我正在使用神奇的plotly库绘制三维散点图,并尝试确定如何计算气泡的大小。
请注意,数据并不重要(在此处显示会很困难),除了气泡的大小应该与“size”属性中的数据值成比例。不幸的是,这些数据的值有时会发生变化,因此设置固定的“size”值并不实用。plotly提供了“sizeref”属性(见下面的代码),用于缩放气泡的大小。我在plotly网站上找到了一个公式可以用于二维图表,但似乎不能适用于三维图表。
我的问题是:是否有方便的公式来计算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)
2个回答

5
我在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

一些注意事项:
- 这个公式假设 `sizemode` 是 `area` 而不是 `diameter`,这是根据人类对大小的感知来确定的最佳选择。如果你想使用 `diameter` 模式,可以使用 `sizeref = df["size_column"].max() / max_size`。 - 这个公式没有考虑到“最小”尺寸,因为 Plotly 在数据为 0 时总是将最小尺寸视为 0。你不能将任意范围映射到尺寸上。`sizemin` 参数是一个“裁剪”参数,意味着任何尺寸“本应该”小于 `sizemin` 的标记都会被渲染为 `sizemin`。 - Plotly Express 中 `max_size` 的默认值是 20,我发现在数据和子图数量等方面,取值在 15 到 60 之间看起来效果不错。

0
创建一个名为"log_yvalues"的新列,并将对数值用作大小变量,在大多数情况下应该足够好,并且能处理足够多的极端情况。
只需确保您有一种处理0、负数和空值的方法即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接