Plotly:如何显示边缘直方图计数以外的其他值?

yoa*_*mal 6 python pandas plotly plotly-python plotly.graph-objects

我试图在原始图上方创建一个链接的边际图,具有相同的 x 轴但具有不同的 y 轴。

我已经看到,在plotly.express包中有 4 个选项,您可以在散点图上创建 margin_x 图,但它们都基于与 x 和 y 相同的列。

就我而言,我的 x 轴上有一个日期,y 轴上有某物的比率,我试图生成该比率所基于的样本的直方图边际分布图(位于样本列中) df)。

我正在简化我所尝试的内容,但不会减少任何重要细节:

import pandas as pd
import plotly.express as px

df = pd.DataFrame(
    {
        "date": [pd.Timestamp("20200102"), pd.Timestamp("20200103")],
        "rate": [0.88, 0.96],
        "samples": [130, 1200])
    }
)

fig = px.scatter(df, x='date', y='rate', marginal_x='histogram')
fig.show()
Run Code Online (Sandbox Code Playgroud)

我基于的文档: https: //plotly.com/python/marginal-plots/

我想要的结果: 示例:

在此输入图像描述

不同之处在于我使用聚合 df,因此我的计数只是 1,而不是样本数量。

有任何想法吗?

谢谢!

ves*_*and 4

我理解你的说法

[...] 以及 y 轴上某物的速率

...意味着您想在直方图上显示一个不计数的值。

marginal_x='histogram'inpx.scatter()似乎默认显示计数,这意味着没有直接的方法来显示单个观察值。但如果您愿意与和fig = make_subplots()结合使用,那么您可以轻松构建:go.Scatter()go.Bar()

阴谋

在此输入图像描述

完整代码:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(rows=2, cols=1,
                    row_heights=[0.2, 0.8],
                    vertical_spacing = 0.02,
                    shared_yaxes=False,
                    shared_xaxes=True)

df = pd.DataFrame(
    {
        "date": [pd.Timestamp("20200102"), pd.Timestamp("20200103")],
        "rate": [0.88, 0.96],
        "samples": [130, 1200]
    }
)

fig.add_trace(go.Bar(x=df['date'], y=df['rate'], name = 'rate'), row = 1, col = 1)

fig.update_layout(bargap=0,
                  bargroupgap = 0,
                 )

fig.add_trace(go.Scatter(x=df['date'], y=df['samples'], name = 'samples'), row = 2, col = 1)
fig.update_traces(marker_color = 'rgba(0,0,250, 0.3)',
                  marker_line_width = 0,
                  selector=dict(type="bar"))

fig.show()
Run Code Online (Sandbox Code Playgroud)