技术求助:使用R绘制按日期分组的定居点类型计数堆叠条形图
嘿,我来帮你搞定这个堆叠条形图的需求!从你的描述来看,你需要展示不同定居点类型在三个日期维度(Start/End/Mid)下的计数分布,用堆叠条形图呈现。下面是一步步的实现方案:
第一步:整理数据为长格式
ggplot对长格式数据更友好,所以首先要把你原始数据里的Start/End/Mid三个宽列转成两列(日期类型+日期值):
# 加载tidyverse包(包含dplyr和ggplot2) library(tidyverse) # 将宽数据转换为长格式 ratData_long <- ratData %>% pivot_longer( cols = c(Start, End, Mid), # 要转换的日期列 names_to = "Date_Type", # 新列名:日期类型(Start/End/Mid) values_to = "Date_Value" # 新列名:对应的日期数值 )
第二步:统计各组合的计数
接下来统计每个日期类型下,不同定居点的出现次数:
# 按日期类型+定居点分组,统计频数 ratData_count <- ratData_long %>% count(Date_Type, Settlement, name = "freq") # (可选)如果想保留所有定居点类别(包括计数为0的),可以补0 ratData_count <- ratData_count %>% complete(Date_Type, Settlement, fill = list(freq = 0))
第三步:绘制堆叠条形图
用ggplot2绘制堆叠条形图,fill参数用来区分不同定居点类型:
ggplot(ratData_count, aes(x = Date_Type, y = freq, fill = Settlement)) + geom_bar(stat = "identity") + # 因为我们已经有了计数,用identity模式 # 添加标题和标签 labs( title = "不同定居点类型按日期维度的计数", x = "日期类型", y = "计数", fill = "定居点类型" ) + theme_minimal() # 用简洁的主题风格
进阶:按日期区间统计(如果需要)
如果你不是按Start/End/Mid类型,而是想按日期数值的区间来统计,可以先对日期值分箱,再绘图:
# 对日期值分箱(比如分成5个等宽区间) ratData_binned <- ratData_long %>% mutate(Date_Bin = cut(Date_Value, breaks = 5)) %>% count(Date_Bin, Settlement, name = "freq") %>% complete(Date_Bin, Settlement, fill = list(freq = 0)) # 绘制按日期区间的堆叠条形图 ggplot(ratData_binned, aes(x = Date_Bin, y = freq, fill = Settlement)) + geom_bar(stat = "identity") + labs( title = "不同定居点类型按日期区间的计数", x = "日期区间", y = "计数", fill = "定居点类型" ) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠
这样就能得到你想要的堆叠条形图啦,根据你的实际需求选择对应的方案就行~
内容的提问来源于stack exchange,提问作者Mathew James
相关产品推荐
相关产品推荐

