在 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)
我想用条形图和每个方面的平均线绘制方面网格。一张图的预期结果示例可以在图像上看到 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)