Предотвратите grid.arrange от сжатия гробов с автоплотом
Я использую grid.arrange() для построения 4 линейных диаграмм с одним столбцом. Гробы выглядят нормально при сохранении файла в формате.png или.pdf, если размеры большие. Однако, когда я уменьшаю высоту сюжета, верхняя щель сжимается.
Как я могу предотвратить grid.arrange от сжатия гробов?
Какой-то уродливый код:
(a<-autoplot(mars.prcp1yrs) + labs(y="", x="") +theme_light()+ylim(60,210)+
theme(text=element_text(size=8),
axis.text.y=element_text(size=8),axis.text.x=element_blank(),
axis.title.y=element_blank(),
axis.ticks.x=element_blank(),
plot.margin=unit(c(0.1,0.1,0.1,0.1),"in")))
(b<-autoplot(jupiter.prcp1yrs) + labs(y="",x="")+ theme_light()+ylim(60,210)+
theme(text=element_text(size=8),axis.text.y=element_text(size=8),
axis.text.x=element_blank(),axis.title.y=element_blank(),
axis.ticks.x=element_blank(),plot.margin=unit(c(-0.3,0.1,0.1,0.1),"in")))
(c<-autoplot(saturn.prcp1yrs) +labs(y="",x="") + theme_light()+ylim(60,210)+
theme(text=element_text(size=8),
axis.text=element_text(size=8),
axis.text.x=element_blank(),axis.title.y=element_blank(),
axis.ticks.x=element_blank(),plot.margin=unit(c(-0.3,0.1,0.1,0.1),"in")))
(d<-autoplot(earth.prcp1yrs) +labs(y="",x="") +theme_light()+ylim(60,210)+
theme(text=element_text(size=8),axis.text=element_text(size=8),
axis.ticks.x=element_blank(),axis.title.y=element_blank(),
plot.margin=unit(c(-0.3,0.1,0.1,0.1),"in")))
prcp.grid<-grid.arrange(a,b,c,d, ncol=1)
png("plot.png",width=3740,height=1000,res=500)
old.par <- par(mfrow=c(2, 2))
grid.arrange(prcp.grid, ncol=2)
par(old.par)
dev.off()
Вот результат (я использовал это соотношение сторон только для того, чтобы драматизировать сжатие верхнего слоя):
1 ответ
Я обнаружил, что лучше всего преобразовать объект зоопарка в кадр данных, используя fortify()
,
Итак, следуя приведенному выше примеру, я сначала преобразовал каждый объект зоопарка в кадр данных:
mars.prcp.1yr<-fortify(mars.prcp1yrs)
jupiter.prcp.1yr<-fortify(jupiter.prcp1yrs)
saturn.prcp.1yr<-fortify(saturn.prcp1yrs)
earth.prcp.1yr<-fortify(earth.prcp1yrs)
Затем я добавил общую переменную (планету) к каждому фрейму данных:
#add planet as variable
mars.prcp.1yr$planet <- "Mars"
jupiter.prcp.1yr$planet <- "Jupiter"
saturn.prcp.1yr$planet <- "Saturn"
earth.prcp.1yr$planet <- "Earth"
Измените имя объекта зоопарка, чтобы лучше представлять переменную:
#change to common colnames
mars.prcp.1yr <- rename(mars.prcp.1yr, Precipitation = mars.prcp1yrs)
jupiter.prcp.1yr <- rename(jupiter.prcp.1yr, Precipitation = jupiter.prcp1yrs)
saturn.prcp.1yr <- rename(saturn.prcp.1yr, Precipitation = saturn.prcp1yrs)
earth.prcp.1yr <- rename(earth.prcp.1yr, Precipitation = earth.prcp1yrs)
Затем строка связывает все фреймы данных в один фрейм данных:
prcp.1yr <- bind_rows(mars.prcp.1yr,jupiter.prcp.1yr,saturn.prcp.1yr,earth.prcp.1yr)
Затем используйте facet_grid(planet~.)
аргумент в стандартном ggplot()
вызов.