在随机位置巧妙地使标记尺寸变大

plotly making marker size bigger at random locations

我正在为数据框绘制图表 - link 代码看起来像 -

client = ['av']
x_axis = 'recall_at_k'
y_axis = 'precision_at_k'
color_group='facilityname'
graph_width = 1200
graph_height = 600
marker_size = 7
cutoff_marker_size = 18
symbol_group='rank_cutoff'
text = 'info'

title="test figure"

fig = px.scatter(
    plot_df, 
    x=x_axis, 
    y=y_axis,
    color=color_group,
    title=title,
    width=graph_width, 
    height=graph_height,
    text=text
)
fig.update_traces(marker={'size': np.where(plot_df['is_cutoff']==1, cutoff_marker_size, marker_size), 'line':{'width':2, 'color':'DarkSlateGrey'}},textfont_size=1)

fig.show()

此处,'is_cutoff' 列是一个布尔列,当 is_cutoff 的值为“1”时,我想使标记大小更大。

我面临的问题是,在 'is_cutoff' 值为 '0'.

的地方,plotly 使标记尺寸变大

测试图表 - 只需查看 'cala' 和 'each' 的图表。图片 link

每个颜色组,即您示例中的设施名称,都是一条轨迹。 使用 update_traces(),您可以用相同的方式更改每条迹线的标记大小。 例如,fig.update_traces(marker={'size': [18, 10, 10]}) 将为每个颜色组将第一个标记的大小设置为 18。这不是您想要的,因为您想以不同的方式修改每个轨迹。这可以通过 for_each_trace().

来实现

所以用

替换fig.update_traces()
fig.for_each_trace(
    lambda trace: trace.update(
        marker={
            'size': np.where(plot_df[plot_df.facilityname==trace.name]['is_cutoff']==1, cutoff_marker_size, marker_size),
            'line':{'width':2, 'color':'DarkSlateGrey'}
        },
        textfont_size=1
   )
)

基本上,这段代码循环遍历每条轨迹,对于每条轨迹,数据帧都减少到 plot_df[plot_df.facilityname==trace.name] 对应的行。其他一切都与您的解决方案相同。