首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用plyr合并数据帧以绘制多个时间序列

使用plyr合并数据帧以绘制多个时间序列
EN

Stack Overflow用户
提问于 2021-01-21 02:03:02
回答 4查看 52关注 0票数 2

我想在一张图上绘制多个时间序列。目前,我可以单独绘制它们,但不能一起绘制。我如何连接数据,因为年份是按小数拆分的。

我基本上想要的是这个图(参见第一个答案中的Plotting multiple time-series in ggplot )

代码语言:javascript
复制
library(tidyverse)
library(plyr)
theme_set(theme_bw(10))

Sydney1<-read.csv("Sydney1.csv",header=TRUE)
Sydney2<-read.csv("Sydney2.csv",header=TRUE)
Eden<-read.csv("Eden.csv",header=TRUE)
StonyBay<-read.csv("Stonybay.csv",header=TRUE)
LowHead<-read.csv("Lowhead.csv",header=TRUE)
Hobart<-read.csv("Hobart.csv",header=TRUE)
Devonport<-read.csv("Devonport.csv",header=TRUE)
Freemantle<-read.csv("Freemantle.csv",header=TRUE)


ggplot(Sydney1,aes(x=Year,y=SLR))+geom_line(aes(color="Sydney1"))
ggplot(Sydney2,aes(x=Year,y=SLR))+geom_line(aes(color="Sydney2"))
ggplot(Eden,aes(x=Year,y=SLR))+geom_line(aes(color="Eden"))
ggplot(StonyBay,aes(x=Year,y=SLR))+geom_line(aes(color="StonyBay"))
ggplot(LowHead,aes(x=Year,y=SLR))+geom_line(aes(color="Lowhead"))
ggplot(Hobart,aes(x=Year,y=SLR))+geom_line(aes(color="Hobart"))
ggplot(Devonport,aes(x=Year,y=SLR))+geom_line(aes(color="Devonport"))
ggplot(Freemantle,aes(x=Year,y=SLR))+geom_line(aes(color="Freemantle"))


#Sydney 1

structure(list(Year = c(1886.0417, 1886.125, 1886.2083, 1886.2917, 
1886.375, 1886.4583), SLR = c(6819L, 6942L, 6980L, 6958L, 7015L, 
6892L)), row.names = c(NA, 6L), class = "data.frame")

#Sydney 2

structure(list(Year = c(1914.4583, 1914.5417, 1914.625, 1914.7083, 
1914.7917, 1914.875), SLR = c(7022L, 6963L, 6915L, 6924L, 6866L, 
6956L)), row.names = c(NA, 6L), class = "data.frame")

#Eden
structure(list(Year = c(1986.7917, 1986.875, 1986.9583, 1987.0417, 
1987.125, 1987.2083), SLR = c(7003L, 6942L, 6969L, 7067L, NA, 
7015L)), row.names = c(NA, 6L), class = "data.frame")

#Stony Bay

structure(list(Year = c(1993.0417, 1993.125, 1993.2083, 1993.2917, 
1993.375, 1993.4583), SLR = c(6826L, 6868L, 6796L, 6862L, 6893L, 
6951L)), row.names = c(NA, 6L), class = "data.frame")

#Low head

structure(list(Year = c(2010.125, 2010.2083, 2010.2917, 2010.375, 
2010.4583, 2010.5417), SLR = c(6971L, 6968L, 7030L, 7088L, 7063L, 
7035L)), row.names = c(NA, 6L), class = "data.frame")

#Hobart

structure(list(Year = c(1987.875, 1987.9583, 1988.0417, 1988.125, 
1988.2083, 1988.2917), SLR = c(6916L, 6870L, 6930L, 6870L, 6820L, 
6817L)), row.names = c(NA, 6L), class = "data.frame")

#Devonport

structure(list(Year = c(1989.875, 1989.9583, 1990.0417, 1990.125, 
1990.2083, 1990.2917), SLR = c(6976L, 7025L, 7030L, 7046L, 6999L, 
7055L)), row.names = c(NA, 6L), class = "data.frame")

#Freemantle 
structure(list(Year = c(1897.0417, 1897.125, 1897.2083, 1897.2917, 
1897.375, 1897.4583), SLR = c(6542L, 6524L, 6557L, 6655L, 6648L, 
6729L)), row.names = c(NA, 6L), class = "data.frame")
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-01-21 02:22:06

在结尾处使用注释中的数据首先将序列累加到列表L中--我们假设要添加任何具有列名YearSLR的数据框--然后将其转换为单个zoo对象,并使用使用ggplot2的autoplot.zoo对其进行绘图。如果希望在不同的方面绘制它们,请删除facet = NULL参数。

代码语言:javascript
复制
library(ggplot2)
library(zoo)

is_city_df <- function(x) is.data.frame(x) && identical(names(x), c("Year", "SLR"))
L <- Filter(is_city_df, mget(ls()))
z <- do.call("merge", lapply(L, read.zoo))
autoplot(z, facet = NULL)

注意

我们假设以下输入:

代码语言:javascript
复制
Sydney1 <- 
structure(list(Year = c(1886.0417, 1886.125, 1886.2083, 1886.2917, 
1886.375, 1886.4583), SLR = c(6819L, 6942L, 6980L, 6958L, 7015L, 
6892L)), row.names = c(NA, 6L), class = "data.frame")

Sydney2 <-
structure(list(Year = c(1914.4583, 1914.5417, 1914.625, 1914.7083, 
1914.7917, 1914.875), SLR = c(7022L, 6963L, 6915L, 6924L, 6866L, 
6956L)), row.names = c(NA, 6L), class = "data.frame")

Eden <-
structure(list(Year = c(1986.7917, 1986.875, 1986.9583, 1987.0417, 
1987.125, 1987.2083), SLR = c(7003L, 6942L, 6969L, 7067L, NA, 
7015L)), row.names = c(NA, 6L), class = "data.frame")

Freemantle <-
structure(list(Year = c(1897.0417, 1897.125, 1897.2083, 1897.2917, 
1897.375, 1897.4583), SLR = c(6542L, 6524L, 6557L, 6655L, 6648L, 
6729L)), row.names = c(NA, 6L), class = "data.frame")
票数 3
EN

Stack Overflow用户

发布于 2021-01-21 02:19:36

假设您的全局环境只包含要绘制的数据帧:

代码语言:javascript
复制
bind_rows(mget(ls()), .id = "City") %>% 
ggplot(aes(x = Year, y = SLR, color = City)) +
  geom_line()

票数 3
EN

Stack Overflow用户

发布于 2021-01-21 02:22:23

而不是在全局环境中创建多个对象,它可以在循环中一次读取所有对象

代码语言:javascript
复制
library(dplyr)
library(purrr)
library(ggplot2)
library(readr)
files <- c("Sydney1.csv", "Sydney2.csv", "Eden.csv", "Stonybay.csv", 
   "Lowhead.csv", "Hobart.csv", "Devonport.csv", "Freemantle.csv")
map_dfr(files, ~ read_csv(.x) %>% 
               mutate(City = .x)) %>%
   ggplot(aes(x = Year, y = SLR, color = City)) +
     geom_line())
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65815103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档