使用 facet_wrap 时如何避免自动调整绘图大小?
Posted
技术标签:
【中文标题】使用 facet_wrap 时如何避免自动调整绘图大小?【英文标题】:How to avoid automatic adjustment of the size of the plot when using facet_wrap? 【发布时间】:2022-01-12 15:31:00 【问题描述】:这是一个例子来说明我想要做什么:
simul<-data.frame(ID=rep(1:20,5),
TIME=rep(1:5,each=20),
VAR1=runif(100,0,10))
fig1<-ggplot(data=simul[which(simul$ID <=15),],
aes(x=TIME,y=VAR1))+
geom_point(color="blue",size=0.8)+
facet_wrap(~ ID,nrow=3)
fig2<-ggplot(data=simul[which(simul$ID >15),],
aes(x=TIME,y=VAR1))+
geom_point(color="blue",size=0.8)+
facet_wrap(~ ID,nrow=3)
我希望最后一个图 fig2 中的各个图的大小与图 1 相同。
【问题讨论】:
绘图填满你的绘图窗口。交互式地,您可以随意调整绘图窗口的大小。如果要将图形保存到文件中,则需要尝试宽度以使它们具有相同的大小。 【参考方案1】:您可以通过在两者中指定相同的行数和列数来做到这一点,在fig2
中使用as.table = FALSE
,但是会留下很多空白:
fig2<-ggplot(data=simul[which(simul$ID >15),],
aes(x=TIME,y=VAR1))+
geom_point(color="blue",size=0.8)+
facet_wrap(~ ID,nrow=3, ncol=5, as.table=FALSE)
产生
这与fig1
中的各个面板尺寸相匹配,但左侧的标签很难看,所有空白区域也是如此。我怀疑您是否可以对空白区域做任何事情(您通过要求绘图小于它们必须的尺寸来要求它!),但是可能需要对标签等进行一些调整来修复 y 轴标签的位置,或者只需使用+ylab(NULL)
删除它即可。
【讨论】:
真的很接近我想做的,谢谢【参考方案2】:这是另一种可能性,它使用 ggdraw() 给出的结果与我想要的非常接近:
library("ggplot2")
library("cowplot")
nr<-3
nc<-5
a<-15
simul<-data.frame(ID=rep(1:20,5),
TIME=rep(1:5,each=20),
VAR1=runif(100,0,10))
fig1<-ggplot(data=simul[which(simul$ID <=a),],
aes(x=TIME,y=VAR1))+
geom_point(color="blue",size=0.8)+
facet_wrap(~ ID,nrow=nr,ncol=nc)
fig2<-ggplot(data=simul[which(simul$ID >a),],
aes(x=TIME,y=VAR1))+
geom_point(color="blue",size=0.8)+
facet_wrap(~ ID,nrow=nr,ncol=nc)
NB_ID<-length(unique(simul[which(simul$ID >a),"ID"]))
HEIGHT<-ceiling(NB_ID/nc)/nr+0.05
WIDTH<-ifelse(NB_ID>=nc,1,NB_ID/nc+0.05)
fig2_ok<- ggdraw() +
draw_plot(fig2, x = 0, y = 1-HEIGHT, width = WIDTH, height = HEIGHT)
【讨论】:
以上是关于使用 facet_wrap 时如何避免自动调整绘图大小?的主要内容,如果未能解决你的问题,请参考以下文章
避免使用 facet_wrap 从 ggplot 进行情节转换中的图例重复