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

基于欧洲男性身高数据创建带排名的有序直方图(ggplot实现)

解决欧洲国家男性身高柱状图的需求

原始数据集

国家身高(cm)
UK176
Ireland175
Cyprus174
Belgium179
Netherlands180
Sweden178
Norway181
Spain173
Italy171
France177

你当前用geom_line()绘制的是折线图,不符合直方图(分类数据对应数值应使用柱状图)的需求,同时缺少国家排序和排名计算的步骤。以下是完整解决方案:

步骤1:数据预处理

先对数据按国家字母排序,再计算身高排名(身高越高排名越靠前),使用dplyr包处理:

library(dplyr)
library(ggplot2)

# 假设你的数据框名为data,先排序再计算排名
data_processed <- data %>%
  arrange(Country) %>%  # 按国家名称字母顺序排序
  mutate(Rank = dense_rank(desc(Height)))  # 按身高降序算排名,dense_rank处理并列情况

步骤2:绘制符合要求的柱状图

用ggplot2生成柱状图,在柱子上方添加排名标签:

ggplot(data_processed, aes(x = Country, y = Height)) +
  geom_col(fill = "#2c3e50") +  # 绘制柱状图,设置柱子填充色
  geom_text(aes(label = paste("排名:", Rank)),
            vjust = -0.5,  # 把文本定位到柱子顶端上方
            size = 3.5) +
  labs(title = "欧洲10国男性身高分布(按国家字母排序)",
       x = "国家",
       y = "男性身高(cm)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转x轴标签避免重叠

关键说明

  • arrange(Country):确保x轴国家按字母顺序排列
  • dense_rank(desc(Height)):按身高从高到低计算排名,若需要跳过并列排名的位置,可替换为rank(desc(Height))
  • geom_col():替代geom_line(),适合展示分类数据对应的数值
  • geom_text():在每个柱子上方添加排名标签,vjust参数调整文本垂直位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18