当ggplot2使用拼凑组合对象时,我希望能够有一个选项,我可以轻松地为所有图设置一个选项,使其具有相同的 x 轴和/或 y 轴范围。
代表:
library(patchwork)
library(ggplot2)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
p1 <- mtcars %>%
ggplot() +
geom_point(aes(mpg, disp)) +
ggtitle('Plot 1')
p2 <- mtcars %>%
filter(disp < 300) %>%
ggplot() +
geom_point(aes(mpg, disp)) +
ggtitle('Plot 2')
p1 + p2
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2020 年 2 …
我使用组合了三个图patchwork
我已经关注了这个SO线程,其中解决了类似的问题。但是,在我的脚本上应用该特定方法并不能解决问题。我想要所有三个图都有一个共同的图例:
脚本
library(ggplot2)
tti_type <- ggplot(p %>%
bind_rows(., mutate(., type = "all")),
aes(x = type, y = logtti, color = corona, fill = corona)) +
geom_boxplot() +
scale_color_manual(name="",
values = c("#8B3A62", "#6DBCC3"),
label = c("Before", "During lockdown")) +
scale_fill_manual(name = "",
values = c("#8B3A6220", "#6DBCC320"),
label = c("Before", "During lockdown")) +
ggtitle("Time to treatment initiation") +
theme(legend.position = "bottom")
los_type <- ggplot(p %>%
bind_rows(., mutate(., type = "all")),
aes(x = type, y = loglos, …Run Code Online (Sandbox Code Playgroud) 我即将通过下面的跨越 textgrob 图形图例实现这个多面板图。但是我继续在人物和人物图例之间获得意想不到的空间。在下面的 reprex 中尝试。
# Library calls
library(tidyverse)
library(grid)
library(gridtext)
library(ggtext)
library(patchwork)
# make dummy figures
d1 <- runif(500)
d2 <- rep(c("Treatment", "Control"), each=250)
d3 <- rbeta(500, shape1=100, shape2=3)
d4 <- d3 + rnorm(500, mean=0, sd=0.1)
plotData <- data.frame(d1, d2, d3, d4)
str(plotData)
#> 'data.frame': 500 obs. of 4 variables:
#> $ d1: num 0.0177 0.2228 0.5643 0.4036 0.329 ...
#> $ d2: Factor w/ 2 levels "Control","Treatment": 2 2 2 2 2 2 2 2 2 2 ... …Run Code Online (Sandbox Code Playgroud) 我使用 patchwork 来组装用 ggplot2 制作的图。我还使用 patchwork 的plot_annotation()命令自动注释组装好的图\xe2\x80\x94,例如自动将“A”、“B”等放置在每个图的右上角。在大多数情况下,这很容易做到。但是,当绘图的轴标签位于不同位置时,很难在正确的位置获得注释。这是问题的最小说明:
library(ggplot2)\nlibrary(patchwork)\n\npLeft <- ggplot(mtcars) + \n geom_point(aes(mpg, disp)) + \n scale_y_continuous("Left-hand panel", position = "left")\n\npRight <- pLeft + \n scale_y_continuous("Right-hand panel", position = "right")\n\npLeft + pRight + \n plot_layout(nrow = 1) & \n plot_annotation(tag_levels = "A") & \n theme(plot.tag.position = c(.935, .96))\nRun Code Online (Sandbox Code Playgroud)\n该代码生成一个两面板图。第一个面板的标签“A”位于正确的位置。但第二个面板的标签“B”不是:\n
有多种方法可以解决该问题。例如,我可以plot.tag.position为每个面板单独指定:
pLeft + theme(plot.tag.position = c(.935, .96)) +\n pRight + theme(plot.tag.position = c(.785, .96)) + \n plot_layout(nrow = 1) & \n plot_annotation(tag_levels = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将两个patchwork objects一起绘制。该代码有效但plot_annotations消失了。
如何解决这个问题?
数据+代码:
library(tidyverse)
library(patchwork)
#Plot 1
GG1 = ggplot(iris,aes(x=Sepal.Length,y=Sepal.Width))+
geom_point()
#Plot 2
GG2 = ggplot(iris,aes(y=Sepal.Length,x=Sepal.Width))+
geom_point()
#Plot 3
GG3 = ggplot(iris,aes(y=Petal.Width,x=Sepal.Width))+
geom_point()
#Plot 4
GG4 = ggplot(iris,aes(y=Petal.Length,x=Petal.Width))+
geom_point()
combine_1 = GG1 + GG2 +
plot_annotation(title = 'Combine plot 1',
theme = theme(plot.title = element_text(hjust = 0.5)))
combine_2 = GG3 + GG4 +
plot_annotation(title = 'Combine plot 2',
theme = theme(plot.title = element_text(hjust = 0.5)))
combine_1/combine_2
Run Code Online (Sandbox Code Playgroud)
输出
我试图弄清楚如何注释组合拼凑物,就好像它们是单独的图一样。
我有一个由三个组合图和另一个单个图组成的拼凑而成。最终的复合图是顶部的第一个拼凑物和底部的单独图。我可以毫无问题地获得我想要的布局,但是当我使用 时plot_annotation,它会为每个图提供字母,而我想看到的是顶部图(三个子图拼凑而成)的 A 和底部图的 B (只是一个情节)
这是我目前正在做的事情:
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
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')
p4 <- ggplot(mtcars) +
geom_bar(aes(gear)) +
facet_wrap(~cyl) +
ggtitle('Plot 4')
top_plot = (p1 + p2 + p3)
bottom_plot = p4
combined_plot <- (top_plot / bottom_plot) + plot_annotation(tag_levels="A")
combined_plot
Run Code Online (Sandbox Code Playgroud)

我希望看到的不是 AD 注释,而是顶部图(图 1-3)的 A 和底部图(图 4)的 …
使用 ggplot,我生成了三个图形,我想使用包 patchworks 以打包方式(在彼此之上)组合这些图形。
这可以通过键入以下内容轻松实现:
graph1/graph2/graph3
但是,我遇到的问题是,对于这三个图形,我有一个共同的 y 轴,我自然希望将其放置在中心图形处(因此,当我制作时,我只为图形 2 创建了 y 轴标签ggplot 中的图表)。这个 y 轴标签文本相当长。因此,我想将它扩展到“超出其他图表的边界”。但是,我的结果如下图所示。
可以看出,y轴标签允许延伸到顶部图但不允许延伸到底部图(这里多余的标签文本被简单地删除,就像底部图放在文本顶部一样)。
我怎样才能让我的 y 轴标签也延伸到底部图形中?之后简单地更改图片的尺寸以使中心图形足够大以容纳标签不是一种选择(然后图形会太大而无法放在一页上)。