【发布时间】:2020-07-20 21:07:53
【问题描述】:
我在 R 中有一个具有多个时间序列的数据框。数据框由 3 列数据组成:test、timeHr 和 range。
测试列指定所执行测试的实际名称,范围给出特定于特定小时的数值(用 timeHr 表示)。
我想做的是,如果特定时间序列在任何时间点 timeHr 超过上限和/或下限,那么它将从最终的 ggplot 中省略。
这是一些示例代码,仅显示 2 个时间序列:
library(ggplot2)
test <- c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B")
timeHr <- 1:5
range <- c(0.1, 0.3, 0.4, 0.5, 1, 0.2, 0.8, 0.9, 1.1, 0.5)
mdata <- data.frame(test, timeHr, range)
mdata
str(mdata)
g <- ggplot(mdata, aes(x = timeHr, y = range, color = test))
g + geom_line() + ylim(0, 1.5)
这显示了 2 个时间序列 A 和 B。
如果我希望只包含范围
我尝试了以下方法:
g <- ggplot(mdata[mdata$range <= 1, ], aes(x = timeHr, y = range, color = test))
g + geom_line() + ylim(0, 1.5)
但它所做的只是删除了 (timeHr = 4, range = 1.1) 处的单个 B 时间点。 B 测试时间序列仍然显示,但以一种扭曲的方式显示。
ggplot 能否处理时间序列的过滤,以便如果我只想显示在整个 timeHr 宇宙中保持在特定范围内的那些时间序列,则测试 B 将从图中删除? p>
谢谢!
【问题讨论】:
-
mdata %>% dplyr::filter(range % ggplot(aes(x = timeHr, y = range, color = test)) + geom_line() + ylim(0, 1.5)
-
您好 Dr Flow,您建议的代码似乎不起作用。我仍然看到一个扭曲的 B 时间序列,而不仅仅是 A 本身。我假设我只需要加载 dplyr 和 ggplot2 包?
-
我不想在代码中指定 test=="A",因为我会有很多时间序列,我希望代码能够检查哪些时间序列的繁重工作实际满足范围值条件。
-
不确定你的意思,这可能有效:mdata[which(mdata$range
标签: r ggplot2 filter time-series