首页 > 解决方案 > 两个带有和不带有图例的图,具有相同的内部图大小

问题描述

我有两个情节,一个有传说,另一个没有。图例应该在右边。现在我想要两个 jpg 文件,并且“内部”图(除了图例之外的所有内容)在两个图中都应该具有相同的大小。我想用指定图例宽度legend.key.width并将该宽度添加到widthggsave 中的参数。这里是 2 英寸。

那是我的代码:

library(tidyverse)
tb <- tibble(a = 1:10, b = 10:1, c = rep(letters[1:2], 5))

plot1 <- 
  ggplot(tb, aes(a, b)) +
  geom_point()

plot1

plot2 <- 
  ggplot(tb, aes(a, b, colour = c)) +
  geom_point() +
  theme(legend.key.width = unit(2, "in"))

plot3

ggsave("plot1.jpg", plot1, width = 5, height = 5, units = "in")
ggsave("plot2.jpg", plot2, width = 7, height = 5, units = "in")

不幸的是,in 的内部情节plot2仍然没有 .in 的内部情节那么宽plot1。我真正想要的是两个看起来完全一样的图(除了颜色),我可以“把一个放在另一个上面,似乎有一个图”,但plot2应该另外有这个图例。有机会吗?我已经尝试了很多,并查看了theme. 我很抱歉我的奇怪解释......

标签: rggplot2

解决方案


据我所知,类似于@MrGumble 提出的选项,您可以使用 eg 将图相互粘合在一起patchwork。如果您更喜欢单独的图,那么一个选项是使用图例制作第一个图,但使用和color使所有文本、颜色等不scale_color_manual可见。guide_legendtheme

1. 单独的地块

library(tidyverse)
tb <- tibble(a = 1:10, b = 10:1, c = rep(letters[1:2], 5))

plot1 <- 
  ggplot(tb, aes(a, b, colour = c)) +
  geom_point() +
  labs(color = "") +
  scale_color_manual(values = rep("black", length(unique(tb$c)))) +
  guides(color = guide_legend(override.aes = list(color = NA))) +
  theme(legend.key = element_rect(fill = NA), legend.text = element_text(color = NA))

plot1

plot2 <- 
  ggplot(tb, aes(a, b, colour = c)) +
  geom_point()

plot2

2.使用patchwork

library(patchwork)

plot1 <- ggplot(tb, aes(a, b)) +
  geom_point()

plot1 / plot2


推荐阅读