r - ggplot2:使用“limits =”缩放x轴时制作一个仅显示可见数据系列的图例
问题描述
我有时间序列数据,其中并非每个日期的所有系列都完全填充。当我缩放 x 轴以使某些系列不显示可见数据时,我仍然会获得这些系列的图例条目。有没有一种简单的方法可以删除这些图例条目,还是我必须为每个图表手动删除它们?
我可以通过选择只包含数值的数据系列来创建一个新的数据框,然后调用 ggplot,但我想在调用 ggplot 中完成这一切。
样本数据:
dat <- structure(list(Date = structure(c(1493856000, 1493942400, 1494028800, 1494115200, 1494201600, 1494288000),
class = c("POSIXct", "POSIXt"),
tzone = "UTC"),
T1 = c(17.7, 23.5, 31.2, NA, NA, NA),
T2 = c(11.4, 15.9, 20.9, 24.3, 15.5, 16.9),
T3 = c(11.2, 16.1, 21.4, 24.7, 15.2, 16.5)),
class = "data.frame", row.names = c(NA, -6L))
使用所有数据创建初始图:
dat <- dat %>%
gather(Sensor, Temp, 2:4)
myplot <- ggplot(dat, aes(Date, Temp)) +
geom_line(aes(color = factor(Sensor))) +
geom_point(aes(color = factor(Sensor))) +
labs(x = "",
y = "Temp, C",
color = "Sensor")
myplot
接下来,我将 x 轴缩放到 T1 数据全部为 NA 的范围内。图例仍然显示 T1 条目,我想神奇地删除它。
myplot <- myplot +
scale_x_datetime(limits = c(as.POSIXct("2017-05-06"), as.POSIXct("2017-05-09")))
myplot
解决方案
使用 2017-05-06 作为开始日期,有一个非 NA T1:
library(tidyverse)
df %>%
gather(Sensor, Temp, 2:4) %>%
filter(Date >= as.Date("2017-05-06") & Date <= as.Date("2017-05-09")) %>%
filter(!is.na(Temp))
Date Sensor Temp
1 2017-05-06 T1 31.2
2 2017-05-06 T2 20.9
3 2017-05-07 T2 24.3
4 2017-05-08 T2 15.5
5 2017-05-09 T2 16.9
6 2017-05-06 T3 21.4
7 2017-05-07 T3 24.7
8 2017-05-08 T3 15.2
9 2017-05-09 T3 16.5
因此产生:
df %>%
gather(Sensor, Temp, 2:4) %>%
filter(Date >= as.Date("2017-05-06") & Date <= as.Date("2017-05-09")) %>%
filter(!is.na(Temp)) %>%
ggplot(aes(Date, Temp)) +
geom_line(aes(color = factor(Sensor))) +
geom_point(aes(color = factor(Sensor))) +
labs(x = "",
y = "Temp, C",
color = "Sensor")
将开始日期更改为 2017-05-07,其中所有 T1 值为 NA 会产生以下结果:
df %>%
gather(Sensor, Temp, 2:4) %>%
filter(Date >= as.Date("2017-05-07") & Date <= as.Date("2017-05-09")) %>%
filter(!is.na(Temp)) %>%
ggplot(aes(Date, Temp)) +
geom_line(aes(color = factor(Sensor))) +
geom_point(aes(color = factor(Sensor))) +
labs(x = "",
y = "Temp, C",
color = "Sensor")
推荐阅读
- java - Micronaut 中的反应式 mongoDB
- python-3.x - 将多个夹具传递到测试用例中
- jquery - 如何仅此单选按钮更改此 div 选项卡已更改
- c - 操作指向 2 个数组的指针的动态数组
- arrays - 将具有分隔空间的字符串存储到一个索引bash中
- azure - 如何在 Azure 数据工厂中将 csv 转换为镶木地板
- javascript - 从 Typescript/Javascript 中的平面数组构建树数组(3 维)
- amazon-web-services - 配置文件 xyz 不存在 aws serverless
- excel - 从工作簿复制并将其粘贴到任何工作表
- javascript - 如何通过一个数字数组进行循环读取并找到最大的?