轴的ggplot`expand_scale()`-不一致

时间:2019-05-20 13:58:15

标签: r ggplot2


示例1

library(tidyverse)
ggplot(mtcars) +
  geom_bar(aes(x = factor(cyl))) +
  scale_y_continuous(expand = expand_scale(mult = c(0, 0)))

1

我的问题似乎是ggplot expand_scale()的行为不一致。但是那句话可能是不正确的。让我们从上面的图作为基线开始,并深入研究它。


示例2

If I understand the argument correctlymult = c(X, Y)使我能够将ggplot比例缩放到绘图下方X%,并将Y%上方绘图。这就是我在下面的代码中得到的。

ggplot(mtcars) +
  geom_bar(aes(x = factor(cyl))) +
  scale_y_continuous(expand = expand_scale(mult = c(1, 0)))

2


示例3

ggplot(mpg %>% filter(displ > 6, displ < 8), aes(displ, cty)) + 
  geom_point() + 
  facet_grid(vars(drv), vars(cyl)) + 
  geom_text(aes(label = trans)) +
  scale_x_continuous(expand = c(0, 0)) +
  coord_cartesian(clip = "off")

3

这是我要为示例三和示例四制定的下一个基准。


示例4

ggplot(mpg %>% filter(displ > 6, displ < 8), aes(displ, cty)) + 
  geom_point() + 
  facet_grid(vars(drv), vars(cyl)) + 
  geom_text(aes(label = trans)) +
  scale_x_continuous(expand = c(1, 0)) +
  coord_cartesian(clip = "off")

4

使用与示例中相同的逻辑,我认为mult = c(X, Y)使我能够将ggplot标度扩展到图的左侧X%,将Y%扩展到图右侧。但是,我的scale_x_continuous(expand = c(1, 0))似乎并没有扩大标度左侧的1 = 100%和标度右侧的0 = 0%

这个scale_x_continuous(expand = c(1, 0))会在图的左边放一些额外的空间,而在图的右边放更多的空间吗?

发生了什么事?为什么?


1 个答案:

答案 0 :(得分:1)

此:

expand = c(<some number>, <some number>)

不是与此相同:

expand = expand_scale(mult = c(<some number>, <some number>))

?expand_scale中,我们可以看到该函数的完整默认参数集是:

expand_scale(mult = 0, add = 0)

multadd都可以具有长度1(对下/上限值应用相同的值)或长度2(对下限值适用第一个值,对第二/上限值适用)的长度。

另一方面,格式expand = c(...)可以接受长度2或4的向量。如果它是长度2的向量,则第一个值映射到mult,第二个值映射到add,因此expand = c(1, 0)等效于expand = expand_scale(mult = 1, add = 0),这会在 的上限和下限上增加100%的扩展。如果它是长度为4的向量,则前两个值将映射到mult的下限,然后是add,后两个值将映射到各自的上限。

让我们使用相同的图解进行说明:

p <- ggplot(mpg %>% filter(displ > 6, displ < 8), aes(displ, cty)) + 
  geom_point() + 
  facet_grid(vars(drv), vars(cyl)) + 
  geom_text(aes(label = trans)) +
  coord_cartesian(clip = "off")

以下三个变体将产生相同的情节:

p + scale_x_continuous(expand = expand_scale(mult = 1, add = 0))
p + scale_x_continuous(expand = expand_scale(mult = 1)) # add = 0 is the default anyway
p + scale_x_continuous(expand = c(1, 0))

以下两个变体也会产生相同的图。 (我在这里使用不同的扩展值进行说明,不过一般而言,如果要指定4个不同的扩展值,则expand_scale()格式的模棱两可比在向量中列出所有四个值要容易得多)。

p + scale_x_continuous(expand = expand_scale(mult = c(1, 2), add = c(3, 4)))
p + scale_x_continuous(expand = c(1, 3, 2, 4)) # note the difference in order of values