标签: patchwork

将多个图例与拼凑对齐

这个拼凑而成的小插图中解释了如何组合多个 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')
Run Code Online (Sandbox Code Playgroud)

reprex …

r ggplot2 patchwork

6
推荐指数
1
解决办法
1603
查看次数

使用 ggtext 的 ggplots 拼凑标题中的颜色?

如何使用 ggtext 为拼凑而成的 ggplots 赋予彩色标题?

例子

假设我们有四个图

library(ggplot2)
library(patchwork)
library(ggtext)

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')
Run Code Online (Sandbox Code Playgroud)

这些可以这样安排

patch <- (p1 + p2) / (p3 + p4)
patch
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

拼凑而成的标题可以像这样

patch +
  plot_annotation(
  title = "Here is a regular title")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

单个 ggplot 可以像这样被赋予一个丰富多彩的标题

p1 + …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 patchwork ggtext

6
推荐指数
1
解决办法
312
查看次数

使用拼凑排列多个图时,如何将图例合并为图大小图?

虚拟代码:

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(),但这并不完全是我想要的。这就是我得到的:

在此输入图像描述

r ggplot2 patchwork

6
推荐指数
1
解决办法
230
查看次数

如何将表格添加到ggplot?

我正在尝试将(在单个图表中)常规ggplot图表与使用flextable.

考虑以下示例:

library(tidyverse)
library(patchwork)

mydf <- tibble(a = c(1,2,3,4,5,4),
               b = c(4,4,4,3,3,3))

p1 <- mydf %>% ggplot(aes(x = a, y = b, color = as.factor(b))) + geom_point()

p2 <- mydf %>% flextable::flextable()
Run Code Online (Sandbox Code Playgroud)

p2 好像

在此处输入图片说明

但不幸的是我不能将它与 p1

> p1 + p2
Error: Don't know how to add p2 to a plot
Run Code Online (Sandbox Code Playgroud)

我们可以做什么?谢谢!

r ggplot2 flextable patchwork

5
推荐指数
3
解决办法
5620
查看次数

将 ggplotly 和 ggplot 与拼凑而成?

是否可以将 ggplot ly和 ggplot 与拼凑而成?

例子

这将并排显示两个图

library(ggplot2)
library(plotly)
library(patchwork)

a <- ggplot(data.frame(1), aes(X1)) + geom_bar()
b <- ggplot(data.frame(1), aes(X1)) + geom_bar()
a + b
Run Code Online (Sandbox Code Playgroud)

但是,如果我们将其转换为 ggplotly,则会出错

b  <- ggplotly(b)
a + b
Error: Can't add `b` to a ggplot object.
Run `rlang::last_error()` to see where the error occurred.
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题?

r ggplot2 plotly ggplotly patchwork

5
推荐指数
2
解决办法
919
查看次数

忽略拼凑中多个图的 x 标签对齐:这可能吗?

我真的很喜欢 patchwork 包,多个图的对齐通常比其他包(cowplot/gridextra)更好、更容易实现。

然而,有一件事我无法解决:是否可以忽略拼凑物中的 x 轴对齐,而只对齐所有其他元素?或者手动调整拼凑后的x轴对齐方式?参见附图:如果可能的话,我希望补丁 B 和 C (Petal.Length) 的 x 轴标题更接近 x 轴。

在此输入图像描述

生成图像的代码:

library(ggplot2)
library(patchwork)

plot.1 <- ggplot(iris, aes(x = Species, y = Petal.Width)) +
  geom_boxplot() +
  scale_x_discrete(labels = c("A very\nvery\nlong\nlabel", "","")) +
  labs(x = element_blank())

plot.2 <- ggplot(iris, aes(x = Petal.Length, y = Petal.Width)) +
  geom_point()

(plot.1 |plot.2)/(plot.2|plot.1) + 
  plot_annotation(tag_levels = "A")
Run Code Online (Sandbox Code Playgroud)

r alignment ggplot2 patchwork

5
推荐指数
1
解决办法
2266
查看次数

将 ggplot2 中的图例与拼凑而成(离散/分类数据)组合和合并

我使用patchwork包的功能将 3 个ggplot2图排列成一个图形。我试图收集这些图例,结果它们一个接一个地出现。但尽管如此,他们仍然是 3 个独立的传奇,而我原本以为只有一个传奇。那么如何将包含相同因子变量的相同值的图例合并到单个图例中呢?

笔记:

  1. 我不想通过使用来删除单独图的图例,例如,theme(legend.position = "none")以防出现一些附加因素水平。我期待拼凑出具体的解决方案。
  2. 类似的问题在“Combine and merge legends in ggplot2 with patchwork”中得到了回答,但数据是连续的。就我而言,我有分类数据。

代码:

library(ggplot2)
library(patchwork)

iris_1 <-
  ggplot(iris, aes(x = Sepal.Length, fill = Species, color = Species)) +
  geom_density(alpha = 0.3, adjust = 1.5)

iris_2 <-
  ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point()

iris_3 <-
  ggplot(iris, aes(x = Species, y = Sepal.Width, fill = Species)) +
  geom_boxplot()


(iris_1 + iris_2 + …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 patchwork

5
推荐指数
1
解决办法
2075
查看次数

当地块纵横比为 1 时,将地块与拼凑而成

我遇到了使用patchworkwhen组合图的问题theme(aspect.ratio = 1)。提供了一些示例:

library(tidyverse)
library(patchwork)

# Create the base plots
plotlist = list(
  fig1 = iris %>% 
    filter(Species == "setosa") %>% 
    ggplot(aes(x = Sepal.Length, y = Sepal.Width)) +
    geom_point(),
  
  fig2 = iris %>% 
    filter(Species == "versicolor") %>% 
    ggplot(aes(x = Sepal.Length, y = Sepal.Width)) +
    geom_point(),
  
  fig3 = iris %>% 
    filter(Species == "virginica") %>% 
    ggplot(aes(x = Sepal.Length, y = Sepal.Width)) +
    geom_point()
)

# Here patchwork combines the plots nicely
plotlist$fig1 / (plotlist$fig2 + plotlist$fig3)
Run Code Online (Sandbox Code Playgroud)


# However, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 patchwork

5
推荐指数
1
解决办法
79
查看次数

将多个 gt 表合并为一个图

使用下面的代码(根据此处的代码进行编辑)我生成了两个带有gt包的示例表:

library(tidyverse)
library(patchwork)
library(gt)

p1 <- mtcars %>% 
  head(5) %>% 
  gt()

p2 <- mtcars %>% 
  tail(5) %>% 
  gt()

# using wrap elements because this seems to be the answer to non-ggplot grobs e.g. #164 
wrap_elements(full = p1 | p2)
grid.arrange(p1, p2, ncol=2, top="Main Title")
Run Code Online (Sandbox Code Playgroud)

出去:

Error in p1 | p2 : 
  operations are possible only for numeric, logical or complex types
Run Code Online (Sandbox Code Playgroud)

我希望将它们合并为一个 ggplot 对象:p <- (p1 | p2)使用patchwork包,但我还没有找到有效的答案。

我还尝试使用as_ggplot()函数将其转换为 ggplot: …

r cowplot patchwork gt gtextras

5
推荐指数
1
解决办法
3676
查看次数

R ggplot2拼凑公共轴标签

根据下面的代码和数据,是否可以拥有通用的图例标签,而不必使用来从代码中删除xlab和?ylabggplotpatchwork

我之所以问这个问题,是因为我有很多,所以我觉得从每个中删除和然后在代码中使用该方法ggplots并不理想。我知道我可以使用但比 慢得多。xlabylabggplotsggarrangeggpubrpatchwork

示例数据和代码:

library(tidyverse)
library(patchwork)
library(gridextra)

gg1 = ggplot(mtcars) +
  aes(x = cyl, y = disp) +
  geom_point() +
  xlab("Disp") +
  ylab("Hp // Cyl") +
  theme(axis.title = element_blank())

gg2 = gg1 %+% aes(x = hp) +
  xlab("Disp") +
  ylab("Hp // Cyl")

# This method still keeps the individual axis labels.
p = gg1 + gg2
gt = patchwork::patchworkGrob(p)
gridExtra::grid.arrange(gt, left = "Disp", bottom = "Hp // …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 patchwork

5
推荐指数
1
解决办法
4491
查看次数

标签 统计

patchwork ×10

r ×10

ggplot2 ×9

alignment ×1

cowplot ×1

flextable ×1

ggplotly ×1

ggtext ×1

gt ×1

gtextras ×1

plotly ×1