我正在使用奇妙的绘图库绘制3D散点图,并试图确定如何计算气泡的大小。
请注意,除了气泡的大小应与“ size”属性中的数据值成比例外,数据并不是那么重要(在这里很难显示)。不幸的是,该数据的值不时变化,因此设置固定的“大小”值是不实际的。 plotly提供了“ sizeref”属性(请参见下面的代码),该属性可缩放气泡的大小。我已经找到了一个公式(在绘图站点上)适用于2D,但似乎不适用于3D图表。
我的问题是:是否有一个方便的公式来计算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)
答案 0 :(得分:1)
我在Plotly Express中使用的公式是:https://github.com/plotly/plotly.py/blob/master/packages/python/plotly/plotly/express/_core.py#L760
sizeref = df["size_column"].max() / max_size ** 2
一些注意事项:
sizemode
是area
而不是diameter
,这是人类在感知尺寸时会做的在感知上最佳的事情。如果要使用diameter
模式,可以使用sizeref = df["size_column"].max() / max_size
sizemin
参数是一个“剪切”参数,意味着任何大小“将”小于sizemin
的标记都将在sizemin
处呈现max_size
的默认值为20,我发现15到60之间的值看起来不错,这取决于数据和子图的数量等。