有没有办法计算plotly Scatter3d的最佳sizeref值

问题描述 投票:0回答:2

我正在使用神奇的绘图库来绘制 3D 散点图,并尝试确定如何计算气泡的大小。

请注意,数据并不那么重要(并且很难在此处显示),除了气泡的大小应随“大小”属性中的数据值缩放之外。不幸的是,该数据的值会随着时间的推移而变化,因此设置固定的“大小”值是不切实际的。 plotly 提供了“sizeref”属性(参见下面的代码)来缩放气泡的大小。我发现了一个适用于 2D 但似乎不适用于 3D 图表的公式(在plotly 网站上)。

我的问题是:有没有一个方便的公式来计算 sizeref 的值?我认为 sizeref 公式将取决于数据的最大/最小值(即“size”属性的数据)和布局大小(按照下面的代码,高度为 800,宽度为 800)。我尝试了一些我自己的公式,但没有一个效果很好。

任何想法将不胜感激(注意:我使用Python,但我怀疑该解决方案适用于 R 中的绘图代码)。

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)
python r plotly
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
  • 此公式不考虑“最小”大小,因为当数据为 0 时,Plotly 始终将最小大小视为 0。您无法将任意范围映射到大小。
    sizemin
    参数是一个“裁剪”参数,意味着任何尺寸“将”小于
    sizemin
    的标记都会在
    sizemin
  • 处渲染
  • Plotly Express 中
    max_size
    的默认值为 20,我发现 15 到 60 之间的值看起来不错,具体取决于数据和子图数量等。

0
投票

创建一个新列“log_yvalues”并使用日志值,因为大小变量在大多数情况下应该足够好,并且还可以处理足够的极端情况。

只要确保你有办法处理 0、负值、空值即可。

© www.soinside.com 2019 - 2024. All rights reserved.