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

Nat*_*ata 2 facet plotly plotly-python

我想用条形图和每个面的平均线绘制面网格。此处的图像上可以看到一个图的所需结果的示例,但最终的图应该有多个这样的图,每个图都在一个方面。

我已经尝试过这个问题的解决方案,但我没有找到一种将它与构面一起使用的方法。我想使用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)
Run Code Online (Sandbox Code Playgroud)

Rob*_*ond 5

  • 您尚未提供样本数据,因此已生成
  • 概念:两个图中的面数相同,因为它们是使用相同的数据框创建的(xaxes 和面具有相同的类别)。考虑到这一点,相同的轴将被plotlyexpress分配给两个图形
  • 现在只需将线条附加到条形图上即可获得所需的集成图形
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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述