ggplot2释放边距约束其余部分

Tyl*_*ker 5 r ggplot2

我喜欢facet_grid相当多,经常发现自己使用它geom_histogram.我也喜欢这个margins=foo论点,因为你可以看到与聚合组相比的所有发行版.问题是,当您包含一个边距参数时,它会延伸所有组以满足边距通常更宽的y范围,因为您现在拥有所有数据.这意味着所有聚合组y的规模要宽得多,并且很难发现组间的差异.所以我对自己说:自我你可以通过scale参数解决这个问题并允许y变化".这个解决方案的问题是现在很难比较聚合组,因为它们都有不同的比例.我想要的是让边距是自由的,但其他一切都受到约束,好像虽然尺度不是自由的.这可能吗?

我在这里展示代码和图片来证明我的意思.如果不清楚请询问.

#create some data
set.seed(10)
dat <- data.frame(var1=rpois(1000, 20), 
   var2=as.factor(sample(LETTERS[1:4], 1000, replace=T)),
   var3=as.factor(sample(month.abb[1:5], 1000, replace=T)))

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3)
Run Code Online (Sandbox Code Playgroud)

这是那个情节.我喜欢它,因为我可以很容易地比较所有聚合分数,因为它们的y比例是相同的.但是将边距或反汇总直方图用于比较也不是很好.

在此输入图像描述

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3, margins='var2')
Run Code Online (Sandbox Code Playgroud)

好吧所以我们把margins论证放进去,现在我们可以比较,但所有聚合的组直方图都被拉伸到20,这使得比较它们很困难(见下图).好的,那就让我们scales自由了. 这个例子并不可怕,因为数据在我使用的采样方法中分布非常均匀,但在现实生活中,一些细胞只有少量细胞,而其他细胞则有很多,比较甚至更糟

在此输入图像描述

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3, margins='var2', scales="free_y")
Run Code Online (Sandbox Code Playgroud)

所以这里是自由尺度的情节.问题是它们对于聚合分数确实是免费的,并且比较它们是有问题的(一个是14ish,一个是8ish,一个是7ish).

在此输入图像描述

那么有没有办法允许margins自由?基本上我想要的是创建第一个数字并从第二个数字拼接边距.

Tom*_*Tom 1

此解决方法同时有效吗?您有重复的标题,但可以删除 x 刻度和标签。

require(ggplot2)
require(gridExtra)
set.seed(10)
dat <- data.frame(var1=rpois(1000, 20), 
                  var2=as.factor(sample(LETTERS[1:4], 1000, replace=T)),
                  var3=as.factor(sample(month.abb[1:5], 1000, replace=T)))
dat$var4 <- "All"

windows(width=8, height=8)

p1 <- ggplot(dat, aes(var1)) + 
  geom_histogram() + 
  facet_grid(var2~var3) +


p2 <- ggplot(dat, aes(var1)) + 
  geom_histogram() + 
  facet_grid(~var3)


grid.arrange(p1, p2, nrow=2, heights=c(4,1.5))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可能已经知道如何使用 . 从第一个图中删除 x 尺度和标签scale_x_continuous('', breaks = NA)