示例 1

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

r - 坐标轴的 ggplot  `expand_scale()` - 不一致-LMLPHP

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

示例 2

If I understand the argument correctly , mult = c(X, Y) 允许我将 ggplot 比例扩展到图下方 X% 和图上方 Y%。这就是我用下面的代码得到的。
ggplot(mtcars) +
  geom_bar(aes(x = factor(cyl))) +
  scale_y_continuous(expand = expand_scale(mult = c(1, 0)))

r - 坐标轴的 ggplot  `expand_scale()` - 不一致-LMLPHP

示例 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")

r - 坐标轴的 ggplot  `expand_scale()` - 不一致-LMLPHP

这是我想为示例三和示例四解决的下一个基线。

示例 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")

r - 坐标轴的 ggplot  `expand_scale()` - 不一致-LMLPHP

使用与示例中相同的逻辑,我认为 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)) 反而在图的左侧放置了一些额外的空间,在图的右侧放置了更多的额外空间?

怎么了?为什么?

最佳答案

这:

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

关于r - 坐标轴的 ggplot `expand_scale()` - 不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56222481/

10-12 18:55