gpt4 book ai didi

python - 如何将分组的条形图拆分为子组?

转载 作者:行者123 更新时间:2023-12-05 05:31:35 25 4
gpt4 key购买 nike

我有这个数据集-

              group             sub_group    value    date
0 Animal Cats 12 today
1 Animal Dogs 32 today
2 Animal Goats 38 today
3 Animal Fish 1 today
4 Plant Tree 48 today
5 Object Car 55 today
6 Object Garage 61 today
7 Object Instrument 57 today
8 Animal Cats 44 yesterday
9 Animal Dogs 12 yesterday
10 Animal Goats 18 yesterday
11 Animal Fish 9 yesterday
12 Plant Tree 8 yesterday
13 Object Car 12 yesterday
14 Object Garage 37 yesterday
15 Object Instrument 77 yesterday

我想在条形图中有两个系列。我想今天有一个系列,昨天我想有另一个系列。在每个系列中,我希望条形图按其子组分开。例如,将有一个名为“动物 - 今天”的栏,总计为 83,并且在该栏内,将有猫、狗等。

我想制作一个与 docs 上“具有长格式数据的条形图”下显示的图表非常相似的图表。 , 除了我有两个系列。

这是我试过的-

fig = make_subplots(rows = 1, cols = 1)

fig.add_trace(go.Bar(
y = df[df['date'] == 'today']['amount'],
x = df[df['date'] == 'today']['group'],
color = df[df['date'] == 'today']['sub_group']
),
row = 1, col = 1
)

fig.add_trace(go.Bar(
y = df[df['date'] == 'yesterday']['amount'],
x = df[df['date'] == 'yesterday']['group'],
color = df[df['date'] == 'yesterday']['sub_group']
),
row = 1, col = 1
)

fig.show()

我添加了赏金,因为我希望能够将图表作为跟踪添加到我的子图中。

最佳答案

我认为除了颜色设置之外,您的代码将绘制预期的图形,但如果您想按颜色分隔每个堆叠图形,则需要做一些技巧。可能还有另一种方法可以做到这一点,但可以按日期创建两个表达图并重用该数据。要创建该 x 轴,请添加一个包含使组列成为类别的代码的列。第二组需要在 x 轴上移动,所以我将 +0.5 添加到 x 轴。设置数组 ([0.25,1.25,2.25]) 和字符串,使 x 轴刻度在创建的图形上居中。最后,重复的图例项是唯一的。

# group id add
df['gr_id'] = df['group'].astype('category').cat.codes

import plotly.express as px
import plotly.graph_objects as go

fig_t = px.bar(df.query('date == "today"'), x="gr_id", y="amount", color='sub_group')
fig_y = px.bar(df.query('date == "yesterday"'), x="gr_id", y="amount", color='sub_group')

fig = go.Figure()

for t in fig_t.data:
fig.add_trace(go.Bar(t))

for i,y in enumerate(fig_y.data):
y['x'] = y['x'] + 0.5
fig.add_trace(go.Bar(y))

fig.update_layout(bargap=0.05, barmode='stack')
fig.update_xaxes(tickvals=[0.25,1.25,2.25], ticktext=['Animal','Plant','Pbject'])

names = set()
fig.for_each_trace(
lambda trace:
trace.update(showlegend=False)
if (trace.name in names) else names.add(trace.name))

fig.update_layout(legend_tracegroupgap=0)
fig.show()

enter image description here

编辑:这是通过使用 express 中内置的预加载子绘图功能实现的。

import plotly.express as px

px.bar(df, x='group', y='amount', color='sub_group', facet_col='date')

enter image description here

关于python - 如何将分组的条形图拆分为子组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74330739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com