- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 cowplot::plot_grid()
组合两个 ggplot 对象并垂直对齐它们。这通常使用 align = "v"
非常简单。
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20)
dat2 <- data.frame(x = 1:10, y = 1:10)
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point()
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v")
但是,当 ggplots 使用 coord_equal()
时,这种方法会失败,因为当强制纵横比时,plot_grid()
无法修改轴。相反,默认设置是保持每个地 block 的高度相同。
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point() + coord_equal()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point() + coord_equal()
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v")
我可以通过玩弄并获得恰到好处的 rel_heights
参数来强制实现我的目标,但这不是一个可行的解决方案,因为我要构建许多动态图。在这里,y轴是对齐的,所有轴的坐标仍然相等。
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v", rel_heights = c(2, 1.07))
我见过许多利用 ggplot2::ggplotGrob()
和 grid::grid_draw()
解决类似问题的方法,但是当coord_equal()
被使用。也许最好的解决方案根本不使用 cowplot::plot_grid()
,或者解决方案可能以某种方式动态确定正确的值并将其传递给 rel_heights
。我想我更喜欢后面的选项,以便能够轻松使用 cowplot::plot_grid()
附带的其他功能。或许可以在 this related approach 中找到一些有用的灵感.
最佳答案
cowplot::plot_grid()
的作者在这里。当您尝试使用 coord_equal()
生成的指定纵横比对齐图时,它不起作用。解决方案是使用 egg 库或 patchwork 库。 Patchwork 仍在开发中,但应该很快就会发布到 CRAN。同时,您可以从 github 安装。
这是一个使用 egg 的解决方案。在我看来,它工作得很好。
library(ggplot2)
library(egg)
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20)
dat2 <- data.frame(x = 1:10, y = 1:10)
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point() + coord_equal()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point() + coord_equal()
ggarrange(plot1, plot2, ncol = 1)
我看到的两个小问题是 (1) 两个 y 轴的轴刻度不同,这使得间距看起来不同,以及 (2) 轴扩展到不同的限制。您可以通过手动设置刻度和扩展来解决这两个问题。
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point() +
scale_y_continuous(limits = c(0, 21), breaks = 5*(0:4), expand = c(0, 0)) +
coord_equal()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point() +
scale_y_continuous(limits = c(0, 11), breaks = 5*(0:4), expand = c(0, 0)) +
coord_equal()
ggarrange(plot1, plot2, ncol = 1)
关于r - 使用 coord_equal() 时使用 cowplot::plot_grid() 垂直对齐不同高度的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48924219/
这是关于@ClausWilke ( see post ) 提供的解决方案之一的后续问题,用于在主面板和边际图之间插入间隙。如何决定 (scale_x_continuous) 限制?另外,如果我们使用“
在当前图中,p2 现在居中。我希望 p2 与左侧的 p1 对齐。我尝试了 plot_grid 中的一些参数,但图像根本没有改变。 library(ggplot2) library(flextable)
我正在尝试为使用 cowplot::plot_grid() 组合 ggplot2 绘图的函数编写单元测试。例如, # setup set.seed(123) library(ggplot2) # cr
假设我有一个数据集 x和 y根据两个变量分组的值:grp是 a , b , 或 c , 而 subgrp是 E , F , 或 G . a有 y [0, 1] 中的值 b有 y [10, 11] 中的
我正在尝试使用cowplot包的draw_image()函数。我已经设法在图表中获取图像作为示例。 我无法弄清楚 xy 位置是如何工作的,我必须不断输入随机数,直到看到图像。 require(ggpl
我正在尝试使用cowplot包的draw_image()函数。我已经设法在图表中获取图像作为示例。 我无法弄清楚 xy 位置是如何工作的,我必须不断输入随机数,直到看到图像。 require(ggpl
我正在尝试使用 Cowplot 制作一些“紧密堆叠”的图。我可以使用以下 MWE 获得我想要的效果: library(ggplot2) library(cowplot) disp_plot <- gg
我正在尝试制作一个相关热图,其中使用 cowplot::switch_axis_position 将 x 轴移动到顶部.我有不同长度的轴标签,我希望标签左对齐(或者更确切地说是底部对齐,因为它们旋转了
我想以某种方式表明应该将多面板图中的某些行放在一起进行比较。例如,我想制作这个情节: 看起来像这个图(用 PowerPoint 制作的面板周围有框): 这是我为使用第一个图而制作的代码。我使用了 gg
我有一个多图图,由 2x2 配置的 4 个图组成。我使用“cowplot”包和 plot_grid 函数使用下面的代码排列图 plot_grid(p1, p2, p3, p4, align='vh',
我正在尝试在与 plot_grid 对齐的两个图周围绘制边框来自牛图包。请看下面的例子(修改自 "Changing the axis positions" vignette ): require(gt
我有一个关于 Cowplot 中的绘图对齐的问题。 我想在由 3 列组成的面板中对齐图 (ggplot)。第一列有 2 个图(垂直对齐),第二列有 1 个图,第三列也有两个图(垂直对齐)。 示例: #
我已经使用 purrr 创建了 ggplot2 图形的列表列,现在我想使用 cowplot::plot_grid() 来组合他们成一个单一的情节。我怎样才能做到这一点?有一种蛮力方法可以做到这一点,但
我有一个关于 Cowplot 中的绘图对齐的问题。 我想在由 3 列组成的面板中对齐图 (ggplot)。第一列有 2 个图(垂直对齐),第二列有 1 个图,第三列也有两个图(垂直对齐)。 示例: #
我已经使用 purrr 创建了 ggplot2 图形的列表列,现在我想使用 cowplot::plot_grid() 来组合他们成一个单一的情节。我怎样才能做到这一点?有一种蛮力方法可以做到这一点,但
我有一个来自 1:10 的 ggplots 列表,名为 plot_1 , plot_2 ....plot_10 . 我想使用 cowplot 将所有图一起显示。 我如何使用 plot.grid()调用
我正在尝试使用 cowplot::plot_grid() 组合两个 ggplot 对象并垂直对齐它们。这通常使用 align = "v" 非常简单。 dat1 <- data.frame(x = re
我想用 R 绘制一个看起来像用 Mac 的 Numbers 制作的示例的图。我正在为情节和图例框之间的空间而苦苦挣扎。这是我想要实现的示例: 在一些用户的帮助下(请参阅帖子末尾以供引用)我已经非常接近
我被问到 this question on Twitter并认为把它放在这里可能会很好。 使用 plot_grid() 制作带标签的并排图时,对于单字母标签,事情按预期工作: library(cowp
使用cowplot中的draw_image()函数读取矢量化pdf有时会导致图像严重模糊: library(ggplot2) library(cowplot) library(magick) # ma
我是一名优秀的程序员,十分优秀!