在ggplot中拼接方面

时间:2016-12-12 17:45:05

标签: r ggplot2 facet

我有2个数据集我想ggplot并排,所以他们共享y-axis

我考虑过使用ggplot facet_wrap来解决这个问题,但是他们想知道如何stitch将它们放在一起。这就是我到目前为止所做的:

df.1 <- data.frame(x=c(-0.678071905112638,1.32192809488736,-0.678071905112638,1.32192809488736,-0.678071905112638,1.32192809488736),
                   y=c(62.8805462356349,73.027603062927,88.4090942806369,87.6879626013305,55.9895740872068,93.5396099910227),
                   side=1,stringsAsFactors = F)

df.2 <- data.frame(x=c(1.32192809488736,3.32192809488736,1.32192809488736,1.32192809488736),
                   y=c(73.027603062927,7.33717302418609,87.6879626013305,93.5396099910227),
                   side=2,stringsAsFactors = F)

df <- rbind(df.1,df.2)
df$side <- factor(df$side,levels=c(1,2))

require(ggplot2)
ggplot(df,aes(x=x,y=y))+geom_point()+facet_wrap(~side,ncol=2,scales="free")+stat_smooth(method="lm",formula=y~x,colour="black")+theme(strip.text.y=element_text())

enter image description here

如何摆脱右侧刻面的y轴并移除刻面之间的空间,使它们显示为单个图形?此外,它们需要具有相同的y轴坐标。

要清楚,我使用两个facets的原因是因为我分别为每个df拟合了一个lm。

2 个答案:

答案 0 :(得分:1)

使用ylim设置y限制。使用panel.spacing.x调整差距。使用axis.text.y删除不需要的标签,并使用axis.ticks删除刻度线。

ggplot(df,aes(x=x,y=y))+geom_point()+ ylim(0, 120) +
         facet_wrap(~side,ncol=2,scales="free")+
        stat_smooth(method="lm",formula=y~x,colour="black")+
        theme(strip.text.y=element_text(),  axis.text.y = element_blank(),
      axis.ticks = element_blank(), panel.spacing.x=unit(0, "lines"))

enter image description here

答案 1 :(得分:1)

您可以调整构面之间的边距以移除空间。此外,使用scales="free_x"使得只有x轴刻度是自由的,而y轴刻度将是相同的。由于每个方面的y轴刻度相同,因此不会在右刻面重复刻度:

theme_set(cowplot::theme_cowplot()) 

ggplot(df,aes(x=x,y=y))+geom_point() + 
  facet_wrap(~side, ncol=2, scales="free_x") + 
  stat_smooth(method="lm", formula=y~x, colour="black") + 
  theme(panel.spacing = unit(-1.25, "lines")) 

enter image description here

但你也可以避免使用颜色审美来分割和获得单独的线条。这种方法将所有内容放在一个面板上,因此您不必担心在方面之间排列x-scale:

ggplot(df,aes(x=x, y=y)) + 
  geom_point() + 
  stat_smooth(method="lm",formula=y~x, aes(colour=side))

enter image description here