示例 1
library(tidyverse)
ggplot(mtcars) +
geom_bar(aes(x = factor(cyl))) +
scale_y_continuous(expand = expand_scale(mult = c(0, 0)))
我的问题似乎是 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)))
示例 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")
这是我想为示例三和示例四解决的下一个基线。
示例 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")
使用与示例中相同的逻辑,我认为
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)
其中
mult
和 add
都可以具有长度 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/