我有这样的数据格式:
data = {'name': ['Bob', 'Chuck', 'Daren', 'Elisa'],
'100m': [19, 14, 12, 11],
'200m': [36, 25, 24, 24],
'400m': [67, 64, 58, 57],
'800m': [117, 120, 123, 121]}
df = pd.DataFrame(data)
name 100m 200m 400m 800m
1 Bob 19 36 67 117
2 Chuck 14 25 64 120
3 Daren 12 24 58 123
4 Elisa 11 24 57 121我的任务很简单:绘制时间(沿y轴),并在x轴上标出事件的名称(100米、200米等)。每个条形的色调应该由'name‘列来决定,并且看起来如下所示。

此外,我想覆盖结果(而不是堆栈)。但是,seaborn和matplotlib中没有这样做的功能。
发布于 2022-11-17 17:40:26
与其使用seaborn,后者是matplotlib的API,不如直接用pandas.DataFrame.plot绘制df。matplotlib是pandas的默认绘图后端。
在python 3.11**,** pandas 1.5.1**,** matplotlib 3.6.2**,** seaborn 0.12.1中测试的
ax = df.set_index('name').T.plot.bar(alpha=.7, rot=0, stacked=True)

seaborn.barplot没有堆叠条的选项,但是可以用seaborn.histplot实现,如Stacked Bar Chart with Centered Labels所示。
df必须用df.melt从宽格式转换为长格式
# melt the dataframe
dfm = df.melt(id_vars='name')
# plot
ax = sns.histplot(data=dfm, x='variable', weights='value', hue='name', discrete=True, multiple='stack')

https://stackoverflow.com/questions/74479784
复制相似问题