使用 R 中的中值数据绘制多个时间序列图
Plotting multiple time series plots using median data in R
我刚刚开始学习 R,所以这可能是多余的,所以我深表歉意。我想在 R 中附加 excel 图表。我的数据包括 1951 年至 2016 年水库的每日水位读数。我需要将数据分为三个系列(1951 年至 2013 年、2014 年至 2015 年和 2016 年) ).我想绘制每个日历日这些系列的中值。我想从中值中删除 2 月 29 日。这是我的数据的 link:https://docs.google.com/spreadsheets/d/1u1Whfp6VHXkZgrC0sVn_mT9XiVxszMhqlAszjZXzM1E/edit?usp=sharing
这是我目前的情况:
LL <- read.csv("BSLL.csv")
str(LL)
LLpre <- filter(LL, year > "1952" & year <"2014")
headtail(LLpre, n=3)
medianLLpre = ddply(LLpre, .(month, day), summarise, level = median(level), na.rm = FALSE)
LLpost <- filter(LL, year > "2013" & year < "2016")
headtail(LLpost, n=3)
medianLLpost = ddply(LLpost, .(month, day), summarise, level = median(level), na.rm = FALSE)
LL2016 <- filter(LL, year == "2016")
headtail(LL2016, n=3)
medianLL2016 = ddply(LL2016, .(month, day), summarise, level = median(level), na.rm = FALSE)
Excel Plot
library(data.table)
Data <- fread("BSLL - BSLL.csv")
创建临时时间间隔类别 1=1951 到 2013,2=2014 到 2015,和 3=2016
Data[,Categories:=ifelse(as.numeric(year)<2014,1,
ifelse(as.numeric(year)<2016,2,3))]
创建没有 2 月 29 日的临时数据
Temp.Data <- Data[!month==2][!day==29]
按类别计算中位数并作图。
Medians <- Temp.Data[,median(as.numeric(level)),by=.(month,Categories)]
plot(x=Medians[,month], y=Medians[,V1],type="n", xlab="", ylab="",
xaxt="n", yaxt="n", bty="l")
axis(2, tick=TRUE, labels=FALSE)
axis(2, tick=FALSE, labels=TRUE, line=-0.5)
axis(1, tick=TRUE, labels=FALSE)
axis(1, tick=FALSE, labels=TRUE, line=-0.5)
lines(x=Medians[Categories==1][,month],
y=Medians[Categories==1][,V1],type="l",lwd=1,col="red")
lines(x=Medians[Categories==2][,month],
y=Medians[Categories==2][,V1],type="l",lwd=1,col="green")
lines(x=Medians[Categories==3][,month],
y=Medians[Categories==3][,V1],type="l",lwd=1,col="blue")
legend('topright','groups',
legend=c("1951 to 2013","2014 to 2015","2016"), bty="n",lty=c(1,1),
col=c("red","green","blue"))
这个怎么样?您可以自己修改绘图的细节(大小、位置、颜色、标签等)
P.S 将来公开发布您的完整数据集不是一个好主意。这里的贡献者只需要一个数据示例来处理和测试
我刚刚开始学习 R,所以这可能是多余的,所以我深表歉意。我想在 R 中附加 excel 图表。我的数据包括 1951 年至 2016 年水库的每日水位读数。我需要将数据分为三个系列(1951 年至 2013 年、2014 年至 2015 年和 2016 年) ).我想绘制每个日历日这些系列的中值。我想从中值中删除 2 月 29 日。这是我的数据的 link:https://docs.google.com/spreadsheets/d/1u1Whfp6VHXkZgrC0sVn_mT9XiVxszMhqlAszjZXzM1E/edit?usp=sharing
这是我目前的情况:
LL <- read.csv("BSLL.csv")
str(LL)
LLpre <- filter(LL, year > "1952" & year <"2014")
headtail(LLpre, n=3)
medianLLpre = ddply(LLpre, .(month, day), summarise, level = median(level), na.rm = FALSE)
LLpost <- filter(LL, year > "2013" & year < "2016")
headtail(LLpost, n=3)
medianLLpost = ddply(LLpost, .(month, day), summarise, level = median(level), na.rm = FALSE)
LL2016 <- filter(LL, year == "2016")
headtail(LL2016, n=3)
medianLL2016 = ddply(LL2016, .(month, day), summarise, level = median(level), na.rm = FALSE)
Excel Plot
library(data.table)
Data <- fread("BSLL - BSLL.csv")
创建临时时间间隔类别 1=1951 到 2013,2=2014 到 2015,和 3=2016
Data[,Categories:=ifelse(as.numeric(year)<2014,1,
ifelse(as.numeric(year)<2016,2,3))]
创建没有 2 月 29 日的临时数据
Temp.Data <- Data[!month==2][!day==29]
按类别计算中位数并作图。
Medians <- Temp.Data[,median(as.numeric(level)),by=.(month,Categories)]
plot(x=Medians[,month], y=Medians[,V1],type="n", xlab="", ylab="",
xaxt="n", yaxt="n", bty="l")
axis(2, tick=TRUE, labels=FALSE)
axis(2, tick=FALSE, labels=TRUE, line=-0.5)
axis(1, tick=TRUE, labels=FALSE)
axis(1, tick=FALSE, labels=TRUE, line=-0.5)
lines(x=Medians[Categories==1][,month],
y=Medians[Categories==1][,V1],type="l",lwd=1,col="red")
lines(x=Medians[Categories==2][,month],
y=Medians[Categories==2][,V1],type="l",lwd=1,col="green")
lines(x=Medians[Categories==3][,month],
y=Medians[Categories==3][,V1],type="l",lwd=1,col="blue")
legend('topright','groups',
legend=c("1951 to 2013","2014 to 2015","2016"), bty="n",lty=c(1,1),
col=c("red","green","blue"))
这个怎么样?您可以自己修改绘图的细节(大小、位置、颜色、标签等)
P.S 将来公开发布您的完整数据集不是一个好主意。这里的贡献者只需要一个数据示例来处理和测试