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

技术求助:使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:13:06