使用ggplot2进行多重绘图

时间:2015-09-30 13:14:40

标签: r ggplot2

我正在使用ggplot2进行多重绘图。经过大量的调整后,我仍然面对 问题如下:

  1. 在每个图的每一侧(左/右)绘制一些自由空间。我在每个情节的右侧都标明了这一点。
  2. 图不是左侧对齐的。在底部情节
  3. 中清楚地观察到了这个问题
  4. Y轴标签距离图很远。我可以减少这种分离吗?
  5. Multiplot是:

    enter image description here

    我使用了以下R代码:

    p1 <- ggplot(data = dplots[[1]],aes(timestamp,power/1000))+ geom_line()+
          ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+labs(title="room1")
    p2 <- ggplot(data = dplots[[2]],aes(timestamp,power/1000))+ geom_line()+
      ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room2")
    p3 <- ggplot(data = dplots[[6]],aes(timestamp,power/1000))+ geom_line()+
      ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room3")                      
    p4 <- ggplot(data = dplots[[4]],aes(timestamp,power/1000))+ geom_line()+
      ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room4")
    p5 <- ggplot(data = dplots[[5]],aes(timestamp,power/1000))+ geom_line()+
      ylab("")+theme(axis.text.x=element_blank(),axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="room5")
    p6 <- ggplot(data = dplots[[3]],aes(timestamp,power/1000))+ geom_line()+
            ylab("")+theme(axis.title.x=element_blank(),axis.ticks.x=element_blank(),plot.margin = unit(c(-0.3,1,-0.3,1), "cm"))+ labs(title="Chiller") +
           scale_x_datetime(labels= date_format("%d-%m-%y",tz ="UTC"),breaks = pretty_breaks(8)) 
    grid.arrange(p1,p2,p3,p4,p5,p6,nrow=6,ncol=1,heights=c(0.15,0.15,0.15,0.15,0.15,0.15),left="Power (KW)")  
    

    数据集(dplots)存储在link

2 个答案:

答案 0 :(得分:10)

最简单的解决方案可能是将列表中的数据帧合并到一个数据集中。使用rbindlist包中的data.table,您还可以为每个数据框添加ID:

library(data.table)
# bind the dataframes together into one datatable (which is an enhanced dataframe)
DT <- rbindlist(dplots, idcol = "id")
# give names to the id's
DT$id <- factor(DT$id, labels = c("room 1","room 2","room 3", "room 4","room 5","Chiller"))

library(ggplot2)
ggplot(DT, aes(x = timestamp, y = power)) + 
  geom_line() + 
  scale_x_datetime(expand = c(0,0)) +
  facet_grid(id ~ ., scales="free_y") +
  theme_bw()

这导致以下情节:

enter image description here

答案 1 :(得分:5)

使用现有代码,使用cowplot包:

library(cowplot)
plot_grid(p1,p2,p3,p4,p5,p6,ncol=1,align = "v")

enter image description here