首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将x轴设置为桶图上的列名

将x轴设置为桶图上的列名
EN

Stack Overflow用户
提问于 2022-11-17 17:34:39
回答 1查看 63关注 0票数 -1

我有这样的数据格式:

代码语言:javascript
复制
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中没有这样做的功能。

EN

回答 1

Stack Overflow用户

发布于 2022-11-17 17:40:26

与其使用seaborn,后者是matplotlib的API,不如直接用pandas.DataFrame.plot绘制dfmatplotlibpandas的默认绘图后端。

python 3.11**,** pandas 1.5.1**,** matplotlib 3.6.2**,** seaborn 0.12.1中测试的

代码语言:javascript
复制
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从宽格式转换为长格式

代码语言:javascript
复制
# 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')

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74479784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档