Ggplot2 facet_grid在小范围内重复y轴折断

时间:2019-08-09 19:54:18

标签: r ggplot2

我有一个ggplot2 facet_grid,当样本量较小时,它会在y轴上重复标签。在第一个绘图中,我希望比例尺在底部和顶部仅显示一次0和1。理想情况下,解决方案将根据某些论点以动态方式解决此问题。如果我需要对中断进行硬编码,我可以这样做,但是我还没有找到针对各个图进行硬编码中断的方法。感谢您的帮助!

g6 <- ggplot(g6_data, aes(x=HOURS, fill=VARIABLE))
g6 <- g6 + facet_grid(VARIABLE ~ ., scales="free_y")
g6 <- g6 + geom_histogram(binwidth=1, color="black", boundary=1)
g6 <- g6 + scale_x_continuous(limits=c(-48, 72), label=comma, breaks=seq(-48, 72, by=12))
g6 <- g6 + scale_y_continuous(label=comma)
g6 <- g6 + theme(legend.title=element_blank(), legend.position="none")
g6 <- g6 + geom_vline(xintercept=0, size=1)

通过添加scale_y_continuous breaks尝试硬编码会导致在大样本量上出现拖尾现象:

g6 <- ggplot(g6_data, aes(x=HOURS, fill=VARIABLE))
g6 <- g6 + facet_grid(VARIABLE ~ ., scales="free_y")
g6 <- g6 + geom_histogram(binwidth=1, color="black", boundary=1)
g6 <- g6 + scale_x_continuous(limits=c(-48, 72), label=comma, breaks=seq(-48, 72, by=12))
g6 <- g6 + scale_y_continuous(label=comma, breaks=seq(0, 400, by=1)
g6 <- g6 + theme(legend.title=element_blank(), legend.position="none")
g6 <- g6 + geom_vline(xintercept=0, size=1)

1 个答案:

答案 0 :(得分:0)

让我建议,您要绘制的东西不是要绘制的实际东西,而不是试图解决问题。

在我看来,您似乎正在尝试比较样本/变量之间的分布。为此,您可以让y轴在变量之间自由移动。如您所示,这将导致一堆混乱的y轴标签,这些标签既不吸引人,也不容易正确解释。

我的建议是,您可能希望比较特定容器中变量内的观测分数,而不是绝对计数。为此,您可以将直方图的y值设置为stat(density),这是重新缩放后的直方图,使得积分为1(即,每个bin代表一个分数)。这样做时,我们可以完全不用担心y轴。

请参见以下示例,了解不同数量观察值的直方图。

df <- data.frame(x = rnorm(200),
                 panel = rep(c(1, 2), c(180, 20)))

ggplot(df, aes(x)) +
  geom_histogram(aes(y = stat(density))) +
  facet_grid(panel ~ .)

enter image description here