You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2中按男性吸烟率对分填充条形图排序

按男性吸烟率降序排列Y轴国家的调整方案

核心操作逻辑

要实现Y轴国家按男性吸烟率从高到低排序,核心是先对数据集按男性吸烟率列做降序排序,再基于排序后的数据集绘制图表,替换掉原来按男女吸烟率总和排序的逻辑。

代码调整示例(Pandas+Matplotlib)

假设你的数据存储在名为df的DataFrame中,包含国家、男性吸烟率、女性吸烟率三列:

# 1. 按男性吸烟率降序排序数据集
df_sorted = df.sort_values(by='男性吸烟率', ascending=False)

# 2. 基于排序后的数据绘制条形图
import matplotlib.pyplot as plt

bar_width = 0.35
x_index = range(len(df_sorted))

# 绘制男女吸烟率的分组条形
plt.bar(x_index, df_sorted['男性吸烟率'], width=bar_width, label='男性')
plt.bar([i + bar_width for i in x_index], df_sorted['女性吸烟率'], width=bar_width, label='女性')

# 设置Y轴标签为排序后的国家列表
plt.yticks([i + bar_width/2 for i in x_index], df_sorted['国家'])

plt.xlabel('吸烟率')
plt.ylabel('国家')
plt.title('各国男女吸烟率(按男性吸烟率降序)')
plt.legend()
plt.show()

Seaborn横向条形图简化写法

如果用Seaborn绘制横向叠加条形图,直接指定排序后的国家顺序即可:

import seaborn as sns

# 先完成数据排序
df_sorted = df.sort_values(by='男性吸烟率', ascending=False)

# 绘制叠加的横向条形
sns.barplot(data=df_sorted, x='男性吸烟率', y='国家', orient='h', color='#1f77b4', label='男性')
sns.barplot(data=df_sorted, x='女性吸烟率', y='国家', orient='h', color='#ff7f0e', label='女性', left=df_sorted['男性吸烟率'])

plt.legend()
plt.show()

关键注意点

  • 确认排序时指定的列名是男性吸烟率(和你的数据集列名保持一致),不要选错列;
  • 删掉或替换原代码中按男女吸烟率总和排序的逻辑(比如df.sort_values(by='总和', ...)这类代码)。

内容的提问来源于stack exchange,提问作者Gideon Parry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:45:33