R语言实现同图双堆叠bar plot:温度与降水数据可视化需求
在同一绘图区域呈现温度与降水的堆叠柱状图(BIRR市案例)
嗨,作为R语言初学者,你想要把温度和降水的堆叠柱状图放在同一绘图区域,每个月份同时展示两组数据,这个需求很清晰。下面我会一步步带你实现这个效果:
第一步:准备数据并加载工具
首先确保你安装了tidyverse包(它包含了ggplot2和数据处理工具dplyr),如果没安装先运行:
install.packages("tidyverse")
然后加载包:
library(tidyverse)
接下来把你提供的数据集转换成R能识别的数据框(直接用你的数据构建):
# 温度数据集 TEMP_BIRR <- data.frame( SOUNAME = rep("BIRR", 16), year_month = rep(c("2004-04", "2004-05", "2004-06", "2004-07"), each=4), temperature_type = rep(c("VERY_COLD", "MEDIUM", "HOT", "COLD"), 4), temperature_value = c(0,0,0,0,28,29,19,25,0,2,11,6,2,0,0,0) ) # 降水数据集 TEMP_PREC_BIRR <- data.frame( SOUNAME = rep("BIRR", 16), year_month = rep(c("2004-04", "2004-05", "2004-06", "2004-07"), each=4), precipitation_type = rep(c("NONE", "HEAVY", "LIGHT", "MEDIUM"), 4), precipitation_value = c(11,20,11,10,2,1,1,1,15,7,16,18,2,3,2,2) )
为了让ggplot能同时处理两组数据,我们需要把它们转换成统一的长格式,并添加一个标记区分温度/降水:
# 整理温度数据:重命名列并添加分组标记 temp_long <- TEMP_BIRR %>% rename(category = temperature_type, days = temperature_value) %>% mutate(data_type = "Temperature") # 整理降水数据:同理操作 prec_long <- TEMP_PREC_BIRR %>% rename(category = precipitation_type, days = precipitation_value) %>% mutate(data_type = "Precipitation") # 合并两个数据集 combined_data <- bind_rows(temp_long, prec_long)
第二步:绘制目标图表
现在我们可以用ggplot创建每个月份同时展示温度和降水堆叠柱的图表了。这里用position_dodge让同一月份下的两组堆叠柱并排,同时保持各自的堆叠结构:
ggplot(combined_data, aes(x = year_month, y = days, fill = category)) + # 绘制堆叠柱状图,设置宽度并按data_type分组 geom_bar( stat = "identity", position = position_stack(), # 组内堆叠 width = 0.4, aes(group = data_type) ) + position_dodge(width = 0.8) + # 让温度和降水的柱并排 # 添加标签和标题 labs( x = "Date", y = "Number of Days", title = "Temperature & Precipitation Trends - BIRR (2004)", fill = "Category" ) + # 自定义颜色,方便区分不同类型(可选但推荐) scale_fill_manual( values = c( "VERY_COLD" = "#003366", "COLD" = "#6699CC", "MEDIUM" = "#FF9933", "HOT" = "#CC3300", "NONE" = "#999999", "LIGHT" = "#99CC99", "MEDIUM" = "#339933", "HEAVY" = "#006600" ) ) + # 使用简洁的主题 theme_minimal()
关键细节说明
- 不要在
aes里写data$column(比如你之前的TEMP_BIRR$year_month),直接用列名就行,ggplot会自动从指定的数据框读取,这样代码更简洁规范。 - 如果想让两组堆叠柱完全重叠(而不是并排),可以把
position_dodge换成position_stack(vjust = 0.5),但重叠后可读性会下降,更推荐并排的方式。 - 自定义颜色可以让不同的温度/降水类型一目了然,你可以根据自己的喜好调整颜色代码。
内容的提问来源于stack exchange,提问作者Elodie P.
相关产品推荐
相关产品推荐

