r - 将多个图例与拼凑对齐
问题描述
在这个拼凑的小插曲中解释了如何组合多个 ggplots。我遇到的一个困难是收集图例并在它们的标题字符数非常不同时正确对齐/证明它们。
下面是一个示例 - 我希望“mpg”图例也左对齐/对齐,而不是在“大小”图例下方居中。有什么建议么?请注意,添加theme(legend.justification = "left")
并不能解决问题。
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp, colour = mpg, size = wt)) +
guides(size = guide_legend(title = "Size - long title for the purpose of this example")) +
ggtitle('Plot 1')
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('Plot 2')
p3 <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
ggtitle('Plot 3')
(p1 | (p2 / p3)) + plot_layout(guides = 'collect')
由reprex 包(v0.3.0)于 2019 年 12 月 16 日创建
解决方案
与此同时,这由 Ilia Kats 修复。
使用 & theme(legend.justification = "left")
(当保持图例分开/与图对齐时)或+ plot_layout(guides = 'collect')
(合并图例中的图例)现在可以正常工作。
用于remotes::install_github("thomasp85/patchwork")
更新patchwork
(如果〜2020年之前)。
详细示例:
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp, colour = mpg, size = wt)) +
guides(size = guide_legend(title = "Size - long title for the purpose of this example")) +
ggtitle('Plot 1')
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('Plot 2')
p3 <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
ggtitle('Plot 3')
OP的情况是固定的:
(p1 | (p2 / p3)) + plot_layout(guides = 'collect')
但是默认情况下仍然没有对齐:
(p1 / p3)
通过合并指南对齐(现已修复):
(p1 / p3) + plot_layout(guides = 'collect')
按左对齐(现已修复):
(p1 / p3) & theme(legend.justification = "left")
(如果两个图之间没有共享图例,这将是可取的(所以这只是一个不好的使用示例))
由reprex 包(v0.3.0)于 2020 年 9 月 10 日创建
# Session info:
R version 4.0.1 (2020-06-06),
ggplot2 * 3.3.1 2020-05-28 [1] CRAN (R 4.0.0)
patchwork * 1.0.1.9000 2020-09-10 [1] Github (thomasp85/patchwork@82a5e03)
推荐阅读
- python - 使用 pipenv 安装 bs4 时出错
- scala - 带有泛型的隐式 scala 类
- ios - iOS 13 UISearchController 书签
- node.js - 安装 Angular Material 后的 Angular 编译警告
- timer - 在 CAPL 中创建一个可暂停的计时器
- google-apps-script - 粘贴到错误的单元格
- javascript - Google Apps 脚本删除自动电子邮件中的 html 标签
- typescript - 在 TypeScript 中复制相同键属性错误
- postgresql - 加速 Postgres Group
- multithreading - SOCK_STREAM 套接字的多线程使用