📜  在 R 中添加无边框和白色背景的图例(1)

📅  最后修改于: 2023-12-03 15:37:28.090000             🧑  作者: Mango

在 R 中添加无边框和白色背景的图例

当我们在 R 中创建图形时,图例是一个必不可少的部分。图例描述了图形中数据对应的颜色、填充和线条类型等信息。在某些情况下,我们需要将图例从主图中分离出来,并设置无边框和白色背景。本文将介绍如何使用 ggplot2 包来实现这个目标。

首先,我们需要创建一个基本的 ggplot2 图形作为示例。这里我们使用 diamonds 数据集,创建一个散点图表示钻石价格与克拉数之间的关系。

library(ggplot2)

# 导入数据
data(diamonds)

# 创建 ggplot2 图形
diamonds %>% 
  ggplot(aes(x = carat, y = price, color = cut, shape = clarity)) +
  geom_point(alpha = 0.5) +
  labs(x = "克拉数", y = "价格", color = "切割质量", shape = "净度质量")

上述代码将创建一个散点图,其中颜色表示钻石的切割质量,形状表示钻石的净度质量。现在我们将这个图例从主图中分离出来,添加无边框和白色背景。

# 创建一个新的 ggplot2 图形,只包含图例信息
leg <- diamonds %>% 
  ggplot(aes(x = "", y = "", color = cut, shape = clarity)) +
  geom_point(show.legend = TRUE) +
  theme_void() +
  theme(legend.background = element_rect(fill = "white", size = 0),
        legend.key = element_blank(),
        legend.text = element_text(size = 12),
        legend.title = element_text(size = 14, face = "bold"))

# 将图例添加到主图中
diamonds %>% 
  ggplot(aes(x = carat, y = price, color = cut, shape = clarity)) +
  geom_point(alpha = 0.5) +
  labs(x = "克拉数", y = "价格") +
  annotation_custom(grob = ggplotGrob(leg), xmin = 4.5, xmax = 5.5, ymin = 8000, ymax = 12000) +
  theme(legend.position = "none")

我们通过使用一个新的 ggplot2 图形来创建一个新的图例。在此图形中,我们将 x 和 y aes 设为空,因为我们只需要绘制一个无数据点的图例。我们使用 theme_void() 来删除原有的主题元素,以便后面添加新的元素。然后我们使用 theme() 来设置图例的背景色为白色,并将图例键和标题设置为空白元素。最后,我们使用 ggplotGrob() 函数将图例的 grob 对象转换为gtable 对象,并使用 annotation_custom() 将图例添加到主图中。

总之,我们可以使用 ggplot2 包的函数来创建无边框和白色背景的图例,使我们能够更好地将图例与主图分离开来。