几个ggplots的相同宽度与grid.arrange函数相结合

时间:2016-12-04 13:49:20

标签: r ggplot2 width

有没有办法为ggplot设置宽度?

我正在尝试将三个时间图组合在一列中。 由于y轴值,绘图具有不同的宽度(两个绘图的轴值在范围(-20,50)内,一个(18 000,25 000) - 这使得绘图更精细)。 我想让所有图表的宽度完全相同。

plot1<-ggplot(DATA1, aes(x=Date,y=Load))+
  geom_line()+
  ylab("Load [MWh]") +
  scale_x_date(labels = date_format("%m/%y"),breaks = date_breaks("months"))+
  theme_minimal()+
  theme(panel.background=element_rect(fill = "white") )
plot2<-ggplot(DATA1, aes(x=Date,y=Temperature))+
  geom_line()+
  ylab("Temperature [C]") +
  scale_x_date(labels = date_format("%m/%y"),breaks = date_breaks("months"))+
  theme_minimal()+
  theme(panel.background=element_rect(fill = "white") )
plot3<-ggplot(DATA1, aes(x=Date,y=WindSpeed))+
  geom_line()+
  ylab("Wind Speed [km/h]") +
  scale_x_date(labels = date_format("%m/%y"),breaks = date_breaks("months"))+
  theme_minimal()+
  theme(panel.background=element_rect(fill = "white") )
grid.arrange(plot1, plot2, plot3, nrow=3)

合并情节看起来像这样: enter image description here

1 个答案:

答案 0 :(得分:1)

您可以简单地使用facetting。首先,你必须做一些数据修改:

library(tidyr)

new_data = gather(DATA1, variable, value, Load, Temperature, WindSpeed) 

LoadTemperatureWindspeed中的所有数据收集到一个大列(value)中。此外,还会创建一个额外的列(variable),用于指定向量中的哪个值属于哪个变量。

之后您可以绘制数据:

ggplot(new_data) + geom_line(aes(x = Date, y = value)) + 
   facet_wrap(~ variable, scales = 'free_y', ncol = 1)

现在ggplot2将负责所有繁重的工作。

ps如果你问问题reproducible,我可以让我的答案重现。