在 Plotly 的分面网格上使用条形图和平均线

Use bar chart and average line on facet grid in Plotly

我想用条形图和每个方面的平均线绘制方面网格。一张图的预期结果示例可以在图像上看到 here 但最终的图应该有多个类似的图,每个都在一个方面。

我已经尝试过此 中的解决方案,但我没有找到将其与分面一起使用的方法。我想使用 facet_col 选项,因为它绘制的图与列中的不同值一样多。

理想情况下,我希望将这两个数字显示在一个上(下面的代码在语法上不正确,只是为了理解)。

px.bar(df, x='category', y='user_count',facet_col='domain', facet_col_wrap=4)
px.line(df, x='category', y='user_count_avg',facet_col='domain', facet_col_wrap=4)
  • 您没有提供示例数据,因此生成了
  • 概念:两个图中的面数相同,因为它们是用相同的数据框创建的(具有相同的类别 用于 xaxes 和 facets)。考虑到这一点,相同的轴将由 plotly express 分配给两个数字
  • 现在只需将线条附加到条形图上即可获得所需的综合数字
import pandas as pd
import plotly.express as px
import numpy as np

df = pd.DataFrame(
    {
        "category": np.tile(list("ABCDEF"), 6),
        "domain": np.repeat([".co.uk", ".com", ".sg", ".media", ".fr", ".de"], 6),
        "user_count": np.random.randint(20, 100, 36),
    }
)
df = df.groupby("domain", as_index=False).apply(
    lambda d: d.assign(user_count_avg=d["user_count"].mean())
)

b = px.bar(df, x="category", y="user_count", facet_col="domain", facet_col_wrap=4)
l = px.line(
    df, x="category", y="user_count_avg", facet_col="domain", facet_col_wrap=4
).update_traces(line_color="red")

b.add_traces(l.data)