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

如何为散点图还原已分箱的长度数据(反分箱操作)

已分箱长度数据的反分箱与散点/抖动图绘制

你的核心需求是将分箱计数的长度数据展开(反分箱),保留对应日期后绘制以日期为X轴、长度为Y轴的散点/抖动图,以下是具体解决方案:

示例数据与长格式转换

先回顾你的初始数据处理步骤:

# 示例分箱数据
df <- as.data.frame(cbind(c(20:30), c(0,0,2,3,5,2,0,0,0,0,0), c(0,0,0,2,5,3,2,0,0,0,0), c(0,0,0,0,1,4,4,3,0,0,0)))
colnames(df) <- c('Length','01-01-2023','01-02-2023','01-03-2023')

# 转换为长格式
library(reshape2)
df2 <- melt(df, id.var="Length")
colnames(df2)[2:3] <- c("Date", "Number")
df2$Date <- as.Date(df2$Date, "%m-%d-%Y")

反分箱(展开计数)的两种实用方法

方法1:Base R原生rep()函数

先过滤掉计数为0的无效行,再按Number列的数值重复对应行的日期和长度:

# 过滤0计数行
df_filtered <- df2[df2$Number > 0, ]
# 按计数展开行
df_unbinned <- df_filtered[rep(seq(nrow(df_filtered)), df_filtered$Number), c("Date", "Length")]
# 重置行名(可选)
rownames(df_unbinned) <- NULL

方法2:tidyr包uncount()函数

uncount()是专门用于按计数展开行的工具,代码更简洁:

library(tidyr)
# 直接按Number列的计数展开,自动跳过0计数行
df_unbinned <- df2 %>% 
  uncount(Number) %>% 
  select(Date, Length)

绘制散点/抖动图

用ggplot2绘制抖动图(避免同日期同长度的点完全重叠):

library(ggplot2)
ggplot(df_unbinned, aes(x = Date, y = Length)) +
  geom_jitter(width = 0.2, alpha = 0.6) + # width控制横向抖动幅度,alpha调整点透明度
  labs(x = "日期", y = "长度", title = "长度随日期分布抖动图") +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:31:03