cowplot:如何通过修改轴限制来自定义主面板和边缘图之间的间隙?
cowplot: How to customize the gaps between main panel & marginal plots by modifying axis limits?
这是@ClausWilke () 提供的解决方案之一的后续问题,用于在主面板和边际图之间插入间隙。
如何决定 (scale_x_continuous) 的限制?
另外,如果我们使用“NA”作为上限会怎样?
# Example with limits set to: (-2,4.5)
require(ggplot2)
require(cowplot)
pmain <- ggplot(data = mpg, aes(x = cty, y = hwy)) +
geom_point() +
xlab("City driving (miles/gallon)") +
ylab("Highway driving (miles/gallon)") +
theme_grey()
xbox2 <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) +
geom_boxplot(data = mpg, aes(y = cty, x = 1)) +
scale_x_continuous(limits = c(-2, 4.5)) + coord_flip()
ybox2 <- axis_canvas(pmain, axis = "y") +
geom_boxplot(data = mpg, aes(y = hwy, x = 1)) +
scale_x_continuous(limits = c(-2, 4.5))
p1 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.8, "in"), position = "top")
p2 <- insert_yaxis_grob(p1, ybox2, grid::unit(0.8, "in"), position = "right")
ggdraw(p2)
有了连续的x轴刻度,您可以使用expand_limits
在主图和边缘图之间添加一些空白space。
例如,您的 ybox2
是一个具有连续 x 轴刻度的单箱线图。默认情况下,此图的 x 范围大约为 0.6 到 1.4(您可以通过 运行 ggplot(mpg, aes(y=hwy, x=1)) + geom_boxplot()
看到这一点)。以下代码将 x 轴下限设置为 0.2,这意味着大约 0.4/(0.8+0.4) = 33% 的 x 轴范围将是主图和边际图之间的边距。我们对 xbox2
.
做同样的事情
ybox2 <- axis_canvas(pmain, axis = "y") +
geom_boxplot(data = mpg, aes(y = hwy, x = 1)) +
expand_limits(x = 0.2)
xbox2 <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) +
geom_boxplot(data = mpg, aes(y = cty, x = 1)) +
coord_flip() +
expand_limits(x = 0.2)
p1 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.4, "in"), position = "top")
p2 <- insert_yaxis_grob(p1, ybox2, grid::unit(0.4, "in"), position = "right")
ggdraw(p2)
接受的答案是正确的。提供一些额外信息:
首先,您可以使用 layer_scales()
函数来准确计算绘图的比例限制。例如:
ybox2 <- axis_canvas(pmain, axis = "y") +
geom_boxplot(data = mpg, aes(y = hwy, x = 1))
layer_scales(ybox2)
#$x
#<ScaleContinuousPosition>
# Range: 0.625 -- 1.38
# Limits: 0.625 -- 1.38
#
#$y
#<ScaleContinuousPosition>
# Range: 12 -- 44
# Limits: 10.4 -- 45.6
其次,查看显示轴的主题中的边缘图可能会有所帮助,如下所示:
ybox2 + theme_bw()
我们看到箱线图完全填满了绘图的整个 x 范围,因此没有边距。如果我们按照其他答案中的建议展开轴,我们会得到:
ybox2 + expand_limits(x = 0.2) + theme_bw()
在我制作的原始图中,有四个箱线图,使用这些方法可以看到箱线图位于位置 1、2、3、4,因此将轴范围设置为 -2 到4.5.然而,4.5 的上限并没有完美地选择,并且在箱线图的另一侧产生了一些额外的差距。 expand_limits()
方法可能更好。
这是@ClausWilke (
# Example with limits set to: (-2,4.5)
require(ggplot2)
require(cowplot)
pmain <- ggplot(data = mpg, aes(x = cty, y = hwy)) +
geom_point() +
xlab("City driving (miles/gallon)") +
ylab("Highway driving (miles/gallon)") +
theme_grey()
xbox2 <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) +
geom_boxplot(data = mpg, aes(y = cty, x = 1)) +
scale_x_continuous(limits = c(-2, 4.5)) + coord_flip()
ybox2 <- axis_canvas(pmain, axis = "y") +
geom_boxplot(data = mpg, aes(y = hwy, x = 1)) +
scale_x_continuous(limits = c(-2, 4.5))
p1 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.8, "in"), position = "top")
p2 <- insert_yaxis_grob(p1, ybox2, grid::unit(0.8, "in"), position = "right")
ggdraw(p2)
有了连续的x轴刻度,您可以使用expand_limits
在主图和边缘图之间添加一些空白space。
例如,您的 ybox2
是一个具有连续 x 轴刻度的单箱线图。默认情况下,此图的 x 范围大约为 0.6 到 1.4(您可以通过 运行 ggplot(mpg, aes(y=hwy, x=1)) + geom_boxplot()
看到这一点)。以下代码将 x 轴下限设置为 0.2,这意味着大约 0.4/(0.8+0.4) = 33% 的 x 轴范围将是主图和边际图之间的边距。我们对 xbox2
.
ybox2 <- axis_canvas(pmain, axis = "y") +
geom_boxplot(data = mpg, aes(y = hwy, x = 1)) +
expand_limits(x = 0.2)
xbox2 <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) +
geom_boxplot(data = mpg, aes(y = cty, x = 1)) +
coord_flip() +
expand_limits(x = 0.2)
p1 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.4, "in"), position = "top")
p2 <- insert_yaxis_grob(p1, ybox2, grid::unit(0.4, "in"), position = "right")
ggdraw(p2)
接受的答案是正确的。提供一些额外信息:
首先,您可以使用 layer_scales()
函数来准确计算绘图的比例限制。例如:
ybox2 <- axis_canvas(pmain, axis = "y") +
geom_boxplot(data = mpg, aes(y = hwy, x = 1))
layer_scales(ybox2)
#$x
#<ScaleContinuousPosition>
# Range: 0.625 -- 1.38
# Limits: 0.625 -- 1.38
#
#$y
#<ScaleContinuousPosition>
# Range: 12 -- 44
# Limits: 10.4 -- 45.6
其次,查看显示轴的主题中的边缘图可能会有所帮助,如下所示:
ybox2 + theme_bw()
我们看到箱线图完全填满了绘图的整个 x 范围,因此没有边距。如果我们按照其他答案中的建议展开轴,我们会得到:
ybox2 + expand_limits(x = 0.2) + theme_bw()
在我制作的原始图中,有四个箱线图,使用这些方法可以看到箱线图位于位置 1、2、3、4,因此将轴范围设置为 -2 到4.5.然而,4.5 的上限并没有完美地选择,并且在箱线图的另一侧产生了一些额外的差距。 expand_limits()
方法可能更好。