如何在R语言中为年度行程时间统计数据创建分组条形图?
制作Excel风格分组条形图
首先加载数据集并生成按年份汇总的统计数据表:
# 加载数据集 full_trains <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-02-26/full_trains.csv") # 按年份分组计算行程时间的统计量 Summary_statistics <- full_trains %>% group_by(year) %>% summarise(min_ave_time = min(journey_time_avg), max_ave_time = max(journey_time_avg), mean_ave_time = mean(journey_time_avg)) %>% ungroup()
要制作Excel风格的分组条形图,需先将宽格式统计数据转换为长格式,再用ggplot2包绘图并调整样式贴近Excel风格:
# 加载所需工具包 library(ggplot2) library(tidyr) # 将宽格式数据转换为长格式 summary_long <- Summary_statistics %>% pivot_longer(cols = -year, names_to = "statistic", values_to = "time_value") %>% # 重命名统计量标签,提升图表可读性 mutate(statistic = factor(statistic, levels = c("min_ave_time", "mean_ave_time", "max_ave_time"), labels = c("平均行程时间最小值", "平均行程时间均值", "平均行程时间最大值"))) # 绘制Excel风格分组条形图 ggplot(summary_long, aes(x = factor(year), y = time_value, fill = statistic)) + # 设置分组条形的间距和宽度 geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 使用Excel常用的柔和配色 scale_fill_manual(values = c("#4F81BD", "#C0504D", "#9BBB59")) + # 添加数据标签,保留1位小数 geom_text(aes(label = round(time_value, 1)), position = position_dodge(width = 0.8), vjust = -0.3, size = 3.5) + # 设置坐标轴和图表标题 labs(x = "年份", y = "平均行程时间(分钟)", title = "各年份列车平均行程时间统计", fill = "统计类型") + # 应用贴近Excel的主题样式 theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title = element_text(size = 12), axis.text = element_text(size = 10), legend.title = element_text(size = 11), legend.position = "bottom", panel.grid.major.x = element_blank(), panel.grid.minor = element_blank() )
关键说明:
- 使用
pivot_longer转换数据格式,这是ggplot绘制分组条形图的必要步骤,确保数据结构适配分组展示需求 position_dodge参数控制同组条形的间距,避免重叠,和Excel分组条形图的布局逻辑一致- 自定义填充色为Excel默认图表常用的色系,还原目标风格
- 通过
theme调整标题居中、网格线隐藏等细节,模拟Excel图表的简洁视觉效果 - 添加数据标签让数值直观呈现,符合Excel图表的常规展示习惯
内容的提问来源于stack exchange,提问作者Preksha Rathore
相关产品推荐
相关产品推荐

