【发布时间】:2020-06-16 07:08:26
【问题描述】:
我正在尝试可视化时间序列数据。我有一组 5 个记录器,它们指示雪运动距离和一个可能对雪运动有影响的 环境变量。这就是为什么将它们绘制在一起以查看雪运动(由记录仪检测到)是否受到这些环境因素的影响是有意义的。我有一个文件,其中包含气象站数据和每个记录器的 5 个文件。 每 5 分钟测量一次天气数据,而记录器只要有运动就测量一次!到目前为止,我已经设法将它们一起可视化,但是,我的教授希望我通过呈现灰色区域(而不是 5 行)来将记录器可视化为一个组,该区域始终显示最小值和最大值记录器在某个时间点。我正在使用 ggplot2。我试图通过使用功能区 geom_ribbon 来制作这样的区域,但我的数据集并不是那么直接。这条线正在交叉,通常是具有最小值和最大值切换的记录器。我不知道将它们加入单个数据集中是否会有所帮助,但这也是不可能的,因为它们的长度不同。此外,它不像所有 5 个记录器都同时进行测量。他们仅在有运动时记录。这是我的代码和它创建的图表。不幸的是,我不确定如何重现数据。我很高兴能以某种方式与您分享。
#install.packages("patchwork")
library(ggplot2)
library(scales)
library(patchwork)
Sys.setlocale(category = "LC_ALL", locale = "english")
startTime <- as.Date("2017-10-01")
endTime <- as.Date("2018-06-30")
start_end <- c(startTime,endTime)
################################################## FALL LINE 1 #########################################################
logger1 <- read.csv("F1_17_18_167.csv",header=TRUE, sep=";")
logger1$date <- as.Date(logger1$Date, "%d.%m.%Y")
logger2 <- read.csv("F1_17_18_186.csv",header=TRUE, sep=";")
logger2$date <- as.Date(logger2$Date, "%d.%m.%Y")
logger3 <- read.csv("F1_17_18_031.csv",header=TRUE, sep=";")
logger3$date <- as.Date(logger3$Date, "%d.%m.%Y")
logger4 <- read.csv("F1_17_18_091.csv",header=TRUE, sep=";")
logger4$date <- as.Date(logger4$Date, "%d.%m.%Y")
logger5 <- read.csv("F1_17_18_294.csv",header=TRUE, sep=";")
logger5$date <- as.Date(logger5$Date, "%d.%m.%Y")
station <- read.csv("aggregates.csv",header=TRUE, sep=",")
station$date <- as.Date(station$Group.1, "%Y-%m-%d")
ggplot()+
geom_line(data = station, aes(x = date, y = Mean_snowheight ,color = "Mean Snowheight"),na.rm = TRUE, size = 1)+
scale_x_date(limits=start_end,breaks=date_breaks("1 month"),labels=date_format("%b %y"))+
scale_y_continuous(limits= c (0,115))
ggplot()+
geom_line(data = logger1, aes(x = date, y = AccuDist, color = "167 (mid-bottom)"),na.rm= TRUE, size = 1)+
geom_line(data = logger2, aes(x = date, y = AccuDist, color = "186 (top-middle)"),na.rm= TRUE, size = 1)+
geom_line(data = logger3, aes(x = date, y = AccuDist, color = "31 (top)"),na.rm= TRUE, size = 1)+
geom_line(data = logger4, aes(x = date, y = AccuDist, color = "91 (bottom)"),na.rm= TRUE, size = 1)+
geom_line(data = logger5, aes(x = date, y = AccuDist, color = "294 (middle)"),na.rm= TRUE, size = 1)+
geom_line(data = station, aes(x = date, y = Mean_snowheight*11.49 ,color = "Mean snowheight"),na.rm = TRUE, size = 1) +
ggtitle("Fall line 1") +
labs(color = "")+
xlab("Season 17/18")+
ylab("Accumulated Distance [mm]")+
scale_x_date(limits=start_end,breaks=date_breaks("1 month"),labels=date_format("%b %y"))+
scale_y_continuous(sec.axis = sec_axis(~./11.49,name = "Mean snowheight [cm]"),limits = c(0,1500))+
scale_color_manual("", guide = "legend",
values = c("167 (mid-bottom)"= "darkorange2",
"186 (top-middle)" = "darkgreen",
"31 (top)" = "red",
"91 (bottom)" = "blue",
"294 (middle)" = "purple",
"Mean snowheight" = "black"))+
theme(legend.position="bottom",
#legend.title = element_blank(),
axis.text.x = element_text(angle = 50, size = 10 , vjust = 0.5),
axis.text.y = element_text(size = 10, vjust = 0.5),
panel.background = element_rect(fill = "gray100"),
plot.background = element_rect(fill = "gray100"),
panel.grid.major = element_line(colour = "lightblue"),
plot.margin = unit(c(1, 1, 1, 1), "cm"),
plot.title = element_text(hjust = 0.5, size = 22))
您可以看到这段代码生成的图表:
如果您第二次忽略环境因素(黑线),则剩下的是每个伐木工在冬季期间的累积雪运动距离(彩色线)。我的目标是填充始终位于最低线和最高线之间的区域。
如果我需要在某处上传数据,请告诉我。这是记录器数据的样子:data table。
提前致谢。
问候,
佐林
【问题讨论】:
-
我想我可以在这里为您提供帮助,但是您可以上传您的数据集吗?为了共享一些数据,请不要共享文件(文件可能已损坏,此处的链接很危险),但请作为数据集加载并共享
dput(dataset)的输出。您能以这种方式至少共享 2 或 3 个记录器数据集吗?dput()的文本输出可能很长(取决于您的数据集),因此您始终可以使用 pastebin 共享输出。然后我们复制并粘贴它以重新创建 df,因为它是为您准备的。 -
@chemdork123 另外我需要澄清一下,上面代码中的这一行可以忽略。我只是用来辅助辅助轴缩放的近似。
ggplot()+ geom_line(data = station, aes(x = date, y = Mean_snowheight ,color = "Mean Snowheight"),na.rm = TRUE, size = 1)+ scale_x_date(limits=start_end,breaks=date_breaks("1 month"),labels=date_format("%b %y"))+ scale_y_continuous(limits= c (0,115)) -
我认为应该可以。甚至数据子集也能很好地工作。我将尝试整理一个可行的例子来说明我将如何应对这里的挑战。我想我只需要“记录器”数据集,但让我看看。