作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个数据集-
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()
编辑:这是通过使用 express 中内置的预加载子绘图功能实现的。
import plotly.express as px
px.bar(df, x='group', y='amount', color='sub_group', facet_col='date')
关于python - 如何将分组的条形图拆分为子组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74330739/
我是一名优秀的程序员,十分优秀!