在图形中绘制设置跟踪位置

Plotly Set Trace Position in a Figure

我是 Plotly 的新手,我想知道是否有一种方法可以指定新轨迹需要在 Figure 对象中居中的位置。

为了更清楚,这是一个例子:

import plotly.express as px
import plotly.graph_objects as go

df = pd.DataFrame(something)

fig = go.Figure()
for i in [40,45,50]:
    fig.add_shape(
        go.layout.Shape(
            type='line',
            xref='x',
            yref='y',
            x0=line_data[i]["min"],
            y0=i,
            x1=line_data[i]["max"],
            y1=i,
        ),
    )
    
fig.add_trace(
    go.Scatter(
        x=df.ColA.values, 
        y=df.ColB.values,
        mode='markers',
    )
)

这是结果

我的目标是构建每条水平线点的直方图

我不知道有没有更好更快的方法,但我的想法是添加更多的轨迹,每个轨迹都有一个直方图,然后 center 那些轨迹在每行。有办法吗?也许一些 position 跟踪参数,例如 (xcenter=7.5, ycenter=50)?

我理想的结果应该是:

  • 你描述了直方图/频率倍数观察到的项目
  • 已使用 base
  • 将这些映射到 y 轴
import numpy as np
import plotly.graph_objects as go
df = pd.DataFrame({40:np.random.normal(5,2, 200).astype(int),50:np.random.normal(6,2, 200).astype(int),60:np.random.normal(6.5,2, 200).astype(int)})

# change to frequency of observed values
df2 = df[40].value_counts().to_frame().join(df[50].value_counts(), how="outer").join(df[60].value_counts(), how="outer")

# plot bar of frequency,  setting base based on observation
fig = go.Figure([go.Bar(x=df2.index, y=df2[c]/len(df2), base=c, name=c) for c in df2.columns])
fig.update_layout(barmode="overlay")