关于如何将两个相同的 y 轴标题“合并”为一个,然后将此 y 轴标题放置在图之间的中间,有什么想法吗?我已经成功地通过使用合并图例 plot_layout(guides = "collect")
,但我似乎找不到任何类似的轴。在这种情况下,我会将名为 disp_disp_disp 的两个轴标题合并为一个。
mtcars
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
labs(x = "mpg", y = "disp_disp_disp_disp_disp")
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
labs(x = "gear", y = "disp_disp_disp_disp_disp")
p3 <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
ggtitle('Plot 3')
p1 / (p2 | p3)
Run Code Online (Sandbox Code Playgroud) 有没有办法使用 patchwork 包按行或列添加标题来组合绘图?前任。安排为:拼凑<- (p| p2 | p3)/ (p4| p5| p6),我想要一个标题用于图 1-3,另一个标题用于图 4-6。
我用这个ggplot2
包制作了 3 个地块。为了将绘图排列在一个图中,我使用了该patchwork
包。在安排中,我将 2 个图放在顶部,在这些图下方放置通用图例,在通用图例下方放置第三个图。我使用该函数创建了公共图例空间guide_area()
,但随之创建了一个大的未使用的空白区域。
如何才能将未使用的空白空间保持在最低限度?
library(ggplot2)
library(patchwork)
p1 <- ggplot(data = mpg,
aes(x = fl,
y = displ)) +
geom_col(aes(fill = cty))
p2 <- ggplot(data = mpg,
aes(x = year,
y = hwy)) +
geom_point(aes(color = drv))
p3 <- ggplot(data = mpg,
aes(x = class,
y = displ)) +
geom_col() +
facet_grid(~year)
((p1+p2)/guide_area()/p3) +
plot_layout(guides = "collect") &
theme(legend.position = "bottom")
Run Code Online (Sandbox Code Playgroud)
空白区域保留在图形的不同大小和比例中(空白区域用红色标记)。
大家好,我正在使用一个小数据框来构建一些绘图ggplot2
。我的数据框是df
,我将其包含dput()
在最后。我有情节,当我使用时问题就会出现patchwork
。我希望最终的图没有空格,以便中间的线(即轴)可以将图连接在一起。这是代码:
library(ggplot2)
library(patchwork)
library(cowplot)
library(ggtext)
#Plot 1
G1 <- ggplot(df,aes(x=Var1,y=Var2))+
geom_line(aes(color=Group,group=Group),size=1)+
geom_point(aes(color=Group,group=Group,shape=Group),size=2)+
scale_y_continuous(limits = c(0,NA),
sec.axis = dup_axis(name = '',breaks = NULL,labels = NULL))+
theme_half_open(12) +
background_grid() +
theme(
strip.background = element_blank(),
strip.text = element_textbox(
size = 12,
face = 'bold',
color = "white", fill = "#5D729D", box.color = "#4A618C",
halign = 0.5, linetype = 1, r = unit(5, "pt"), width = unit(1, "npc"),
padding = margin(2, 0, 1, 0), margin = …
Run Code Online (Sandbox Code Playgroud) 我有一个图形组装patchwork
如下:
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p1 + p2 + plot_annotation(tag_levels = 'a')
Run Code Online (Sandbox Code Playgroud)
如何更改标签的字体以使字母a
和b
以粗体显示?
我想将图例(所有绘图共有)放置在拼凑布局的空白区域中。legend.position
从我在网上可以找到的情况来看,如果我也使用的话,我无法手动定位图例guides="collect"
(但可以使用左、右等)。
我尝试过使用l <- get.legend
then+ inset_element(l, 0.6, 0.6, 1, 1)
但它不明白l
。我也尝试过混入,+ inset_element(gridExtra::tableGrob(l))
但没有运气。
我的目标是将图例放在空白处。我的实际拼凑图更复杂,但有两个空白空间,我希望图例位于其中。
微量元素
library(patchwork)
library(ggplot2)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp, color = mpg)) +
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')
design <- "
1111
223#
"
p1 + p2 + p3 + plot_layout(guides = 'collect') + plot_layout(design=design, guides …
Run Code Online (Sandbox Code Playgroud) 当使用{patchwork}将单独的 ggplots 组合成同一个图形时,我有时想添加一个或多个根本不是绘图的部分,但基本上是一个文本框。
据我所知,拼凑文档中唯一一次解决这个问题是在这里使用wrap_elements(grid::textGrob('Text on left side'))
. 然而,这是行不通的,因为我想使用{ggtext}主要是为了(i)自动换行和(ii)混合常规、斜体、粗体和彩色文本(参见例如此处)。
到目前为止,我已经找到了两种不同的方法来实现这项工作,它们在下面的 reprex 中进行了演示。两种方法的共同点是它们基本上隐藏了 ggplot 中不是所需文本的所有部分。
ggtext::geom_textbox()
。subtitle
with theme(plot.subtitle = ggtext::element_markdown())
。然而,我的问题是,是否有更好/更简单的方法来实现这一点。主要是因为正如您在下面的 reprex 中看到的那样,在文本正确排列之前需要进行一些margin()
操作。plot_layout()
我可以想到对于此文本我想要两种不同的垂直对齐方式:
p2
与此接近,但需要手动扭转。此外,它目前为左侧图的标题和副标题添加了不必要的垂直空间。p1
与此接近,但需要手动扭转# setup -------------------------------------------------------------------
library(ggtext)
library(glue)
library(patchwork)
library(tidyverse)
cols <- c(ctrl = "red", trt1 = "blue", trt2 = "purple")
string <- glue("<i style='color:{cols}'>{names(cols)}</i>") …
Run Code Online (Sandbox Code Playgroud) 是否可以使用拼接在“主”标题下方和情节标题上方添加图例?
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars, aes(disp, wt, color = factor(gear))) +
geom_point() +
labs(title = "first plot title")
p2 <- ggplot(mtcars, aes(drat, qsec, color = factor(gear))) +
geom_point() +
labs(title = "second plot title")
(p1+p2) +
plot_layout(guides = "collect") +
plot_annotation(title = "main title") &
theme(legend.position = "top")
Run Code Online (Sandbox Code Playgroud)
我想结合两个或更多的情节来合并他们的传说。
例如,我可以创建一些数据和两个场景,如下所示。
# packages
library(ggplot2)
library(patchwork)
# first plot
set.seed(07042020)
x <- runif(50)
y <- runif(50)
data1 <- data.frame(x = x, y = y, z = runif(50, 0, 2))
p1 <- ggplot(data1) + geom_point(aes(x, y, col = z))
p1
Run Code Online (Sandbox Code Playgroud)
data2 <- data.frame(x = x, y = y, z = runif(50, -1, 1))
p2 <- ggplot(data2) + geom_point(aes(x, y, col = z))
p2
Run Code Online (Sandbox Code Playgroud)
以下代码是我迄今为止尝试过的代码,但这不是预期的结果。我想将两个图与单个图例合并,即创建一个独特且常见的图例“z”,使两个图的点根据这个图例进行着色。这可能吗?
p1 + p2 + plot_layout(guides = "collect")
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2020 年 4 月 7 日创建
虚拟代码:
library(ggplot2)
library(patchwork)
plot1 <- mpg %>% ggplot()
plot2 <- mpg %>% ggplot()
plot3 <- mpg %>% ggplot(aes(cyl, displ)) +
geom_point(aes(colour = manufacturer)) +
guides(colour=guide_legend(ncol=4))
(plot1 + plot2) / plot3
Run Code Online (Sandbox Code Playgroud)
我不是在寻找组合的图例,而是看起来像这样的东西:
图例被“视为”情节的一部分。theme()
我尝试过使用and添加边距plot_spacer()
,但这并不完全是我想要的。这就是我得到的: