如何用两个类别制作条形图?
Posted
技术标签:
【中文标题】如何用两个类别制作条形图?【英文标题】:How to make bar plot in plotly with two categories? 【发布时间】:2021-09-01 10:16:17 【问题描述】:我有这样的数据
import pandas as pd
df = pd.DataFrame(
dict(
week=[1, 1, 2, 2, 3, 3] * 2,
layout=["classic", "classic", "modern", "modern"] * 3,
response=["conversion", "exit"] * 6,
cnt=[26, 23, 45, 34, 55, 44, 53, 27, 28, 25, 30, 34],))
我需要像在 excel 中那样使用 plotly 获得这样的条形图:
我不能使用两个类别的主要问题。我的代码:
px.bar(
data_frame=df,
x='week',
y='cnt',
template='plotly_dark',
color = 'layout'
)
结果:
但我无法像在 excel 示例中那样显示有关“响应”的信息
【问题讨论】:
我的建议对你有什么效果? 【参考方案1】:在我看来,最灵活的方法是使用 go.Figure()
然后
fig.add_traces(go.Bar(x=dfp['week'], y = dfp['cnt'], name = v))
对于v
中的每个值,['conversion - classic', 'conversion - modern', 'exit - classic', 'exit - modern']
如下所示:
fig = go.Figure()
for v in df['value'].unique():
dfp = df[df['value']==v]
fig.add_traces(go.Bar(x=dfp['week'], y = dfp['cnt'], name = v))
fig.update_layout(barmode='stack', template='plotly_dark')
fig.show()
剧情:
据我所知,这应该非常类似于您的 Excel 输出。
完整代码:
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
df = pd.DataFrame(
dict(
week=[1, 1, 2, 2, 3, 3] * 2,
layout=["classic", "classic", "modern", "modern"] * 3,
response=["conversion", "exit"] * 6,
cnt=[26, 23, 45, 34, 55, 44, 53, 27, 28, 25, 30, 34],))
df['value'] = df['response'] + ' - ' + df['layout']
df = df.sort_values('value')
# df2 = df.groupby(['value', 'week']).sum().reset_index().sort_values('value')
fig = go.Figure()
for v in df['value'].unique():
dfp = df[df['value']==v]
fig.add_traces(go.Bar(x=dfp['week'], y = dfp['cnt'], name = v))
fig.update_layout(barmode='stack', template='plotly_dark')
fig.show()
【讨论】:
以上是关于如何用两个类别制作条形图?的主要内容,如果未能解决你的问题,请参考以下文章
如何用 folium 绘制地图并在 python 中的地图旁边放置条形图?