使用 coord_equal() 时垂直对齐不同高度的分面 ggplots
Vertically align faceted ggplots of different heights when using coord_equal()
我正在尝试使用 cowplot::plot_grid()
或 egg::ggarrange()
将两个 FACETED ggplot 对象与 coord_equal()
合并并垂直对齐它们。
egg::ggarrange()
方法适用于 UNFACETED 图,解决方案已发布 。
但是,egg::ggarrange()
解决方案在包含分面时出现故障。 绘图正确对齐,但 y 轴的单位是 x 轴单位的两倍。关于如何将其概括为分面的任何建议?
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) +
geom_point() + coord_equal() + facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) +
geom_point() + coord_equal() + facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1)
主要问题是 plot1
和 plot2
的纵横比不同。
这是 plot1
:
还有这个plot2
:
您可以尝试使用 theme(aspect.ratio=1)
而不是 coord_equal()
:
来保持宽高比
require(ggplot2)
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) + geom_point() + theme(aspect.ratio=1)+
facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) + geom_point() + theme(aspect.ratio=1)+
facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1,heights = c(1,10))
希望有用。
这似乎是一个简单的修复,
library(egg)
b <- body(gtable_frame)
b[6] <- parse(text="if (fixed_ar) {
ar <- as.numeric(g$heights[tt[1]]) / as.numeric(g$widths[ll[1]])
height <- width * (ar / length(ll))
g$respect <- FALSE
}")
body(gtable_frame) <- b
assignInNamespace("gtable_frame", gtable_frame, ns = 'egg')
我正在尝试使用 cowplot::plot_grid()
或 egg::ggarrange()
将两个 FACETED ggplot 对象与 coord_equal()
合并并垂直对齐它们。
egg::ggarrange()
方法适用于 UNFACETED 图,解决方案已发布
但是,egg::ggarrange()
解决方案在包含分面时出现故障。 绘图正确对齐,但 y 轴的单位是 x 轴单位的两倍。关于如何将其概括为分面的任何建议?
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) +
geom_point() + coord_equal() + facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) +
geom_point() + coord_equal() + facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1)
主要问题是 plot1
和 plot2
的纵横比不同。
这是 plot1
:
还有这个plot2
:
您可以尝试使用 theme(aspect.ratio=1)
而不是 coord_equal()
:
require(ggplot2)
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) + geom_point() + theme(aspect.ratio=1)+
facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) + geom_point() + theme(aspect.ratio=1)+
facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1,heights = c(1,10))
希望有用。
这似乎是一个简单的修复,
library(egg)
b <- body(gtable_frame)
b[6] <- parse(text="if (fixed_ar) {
ar <- as.numeric(g$heights[tt[1]]) / as.numeric(g$widths[ll[1]])
height <- width * (ar / length(ll))
g$respect <- FALSE
}")
body(gtable_frame) <- b
assignInNamespace("gtable_frame", gtable_frame, ns = 'egg')