5

我正在尝试将两个 FACETED ggplot 对象与coord_equal()使用cowplot::plot_grid()oregg::ggarrange()并垂直对齐它们。

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)

图 1

4

2 回答 2

3

这似乎是一个简单的修复,

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')

在此处输入图像描述

于 2018-02-24T19:40:52.307 回答
2

主要问题是plot1并且plot2具有不同的纵横比。这是plot1在此处输入图像描述

plot2

在此处输入图像描述

您可以尝试使用 ie 来保持纵横比,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))

在此处输入图像描述

希望它服务。

于 2018-02-24T11:15:14.597 回答