2015-09-30 2 views
3

Я использую ggplot2 для множителя. Althoug после много тонкой настройки, я до сих пор сталкиваются проблемы, как:Мультипликатор с использованием ggplot2

  1. свободное пространство получает нанесены на каждой стороне (слева/справа) каждого участка. Я отметил это на правой стороне каждого сюжета.
  2. Участки не выровнены по левую сторону. Эта проблема четко проявляется в нижнем графике
  3. Знак оси Y находится очень далеко от графиков. Могу ли я уменьшить это разделение?

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

Попробуйте посмотреть [это (выравнивание графиков)] (http://stackoverflow.com/q/24331107/2572423) или [это (сохранение пропорций)] (http://stackoverflow.com/q/16367835/2572423) , – JasonAizkalns

+3

Я пропустил какую-то причину не просто использовать фасет? –

ответ

10

Возможно, самым простым решением является объединение данных в списке в одном наборе данных. С rbindlist из data.table пакета можно также включать в себя идентификаторы для каждого dataframe:

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

5

С вашего существующего кода, используйте cowplot пакет:

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

enter image description here