我有一个数据集,以毫秒为单位记录详细信息,最长 20 秒。我需要在具有两个级别(A 和 B)的单因子变量上绘制值“Buffer”。 我正在尝试绘制一个 geom_line() ,其中 x 作为时间,y 作为缓冲区,A 和 B 两条线。 我的问题是,它为每个观察结果绘制一条线,并且不按因素聚合它。 这是我使用的代码:
ggplot(DT, aes(x = Real_Time_Stamp, y = Buffer)) + geom_line(aes(color = FVN))
我正在处理的数据集有 49,999 行和 3 列。这是一个例子:
structure(list(FVN = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"), Real_Time_Stamp = c(0.015233039855957, 0.0325429439544678, 0.0483760833740234, 0.0653512477874756, 0.0819132328033447, 0.0988430976867676, 0.11584997177124, 0.132710218429565, 0.148336172103882, 0.165808200836182, 0.182291269302368, 0.199646949768066, 0.215576171875, 0.233185052871704, 0.248784303665161, 0.266969203948975, 0.282114028930664, 0.299488067626953, 0.315442323684692, 0.332358121871948), Buffer = c(1.984, 1.968, 1.952, 1.936, 1.936, 1.952, 1.936, 1.92, 1.904, 1.888, 1.872, 1.856, 1.856, 1.872, 1.856, 1.856, 1.84, 1.84, 1.824, 1.824)), row.names = c(NA, 20L), class = "data.frame")
我之前使用过上面的代码来根据因子水平生成线图。我做错了什么?
我不完全理解这个问题,但这是我的解决方案。
我首先假设 A 组的平均值为 1.25,B 组的平均值为 1.75。为什么?因为你的缓冲区值为 1.x.
然后我用 50k obs 创建假数据,并聚合以绘制每组一条线,我认为这是你错过的并得到了一个好奇的“艺术”
library(ggplot2)
library(dplyr)
# fake data
n <- 25000
set.seed(42)
DT <- data.frame(
FVN = rep(c("A", "B"), each = n),
Real_Time_Stamp = rep(seq(0, 20, length.out = n), 2),
Buffer = c(rnorm(n, mean = 1.25, sd = 0.05), rnorm(n, mean = 1.75, sd = 0.05))
)
# average buffer per time point per fvn level
DT_summary <- DT %>%
group_by(FVN, Real_Time_Stamp) %>%
summarise(Buffer = mean(Buffer), .groups = 'drop')
ggplot(DT_summary, aes(x = Real_Time_Stamp, y = Buffer, color = FVN)) +
geom_line() +
labs(title = "Buffer Over Time by FVN Level", x = "Real Time Stamp (seconds)", y = "Buffer") +
theme_minimal()
结果: