R ggplot时间序列,无网格排列

时间:2019-01-08 10:34:26

标签: r ggplot2 time-series

例如,我有一个不同的时间序列4。在这种情况下,我模拟了4个白噪声时间序列。

timeSeries <- matrix(nrow=500,ncol=4)

for(i in 1:4){
  timeSeries[,i] <- rnorm(n = 500,mean = 0,sd = i)
}
timeSeries <- as.data.frame(timeSeries)
timeSeries <- cbind(timeSeries,time = 1:500)

每个时间序列都有不同的标准差。我想使用线图可视化所有时间序列。

plot1 <- ggplot(timeSeries,aes(x = time,y= V1)) + geom_line()
plot2 <- ggplot(timeSeries,aes(x = time,y= V2)) + geom_line()
plot3 <- ggplot(timeSeries,aes(x = time,y= V3)) + geom_line()
plot4 <- ggplot(timeSeries,aes(x = time,y= V4)) + geom_line()

library(gridExtra)
grid.arrange(plot1, plot2, 
             plot3,plot4,
             nrow = 2, ncol=2)

这是当前结果: enter image description here

如果按照现在的方式进行操作,则各图之间的范围会有所不同。我可以使用诸如facet_wrap之类的图形进行绘制,并且在图形之间具有相同的取值范围吗?

3 个答案:

答案 0 :(得分:2)

这种方法呢?

ggplot(timeSeries %>% gather(key,value,-time)) +
geom_line(aes(x=time,y=value))+
facet_wrap(~key)

答案 1 :(得分:2)

自从您提到facet_wrap以来,也许是这样的事情?

library(tidyverse)
timeSeries %>%
    gather(key, val, -time) %>%
    ggplot(aes(time, val)) +
    geom_line() +
    facet_wrap(~ key)

enter image description here

您可以通过scales中的facet_wrap参数指定缩放行为。对于所有方面,两个轴的默认比例都是固定的(即相同)。

答案 2 :(得分:0)

据我所知,您希望y轴在四个图中具有相同的范围。最简单但不是最有效的方法是添加:

ylim(10,-10) #Add this to each plot like following example:
plot1 <- ggplot(timeSeries,aes(x = time,y= V1)) + geom_line() + ylim(10, -10)