需要在一个具有两个水平的因子变量上绘制线图

问题描述 投票:0回答:1

我有一个数据集,以毫秒为单位记录详细信息,最长 20 秒。我需要在具有两个级别(A 和 B)的单因子变量上绘制值“Buffer”。 我正在尝试绘制一个 geom_line() ,其中 x 作为时间,y 作为缓冲区,A 和 B 两条线。 我的问题是,它为每个观察结果绘制一条线,并且不按因素聚合它。 这是我使用的代码:

ggplot(DT, aes(x = Real_Time_Stamp, y = Buffer)) + geom_line(aes(color = FVN))

这是它生成的图: enter image description here

我正在处理的数据集有 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")

我之前使用过上面的代码来根据因子水平生成线图。我做错了什么?

r ggplot2 line-plot geom
1个回答
0
投票

我不完全理解这个问题,但这是我的解决方案。

我首先假设 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()

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.