📜  如何在 R 中使用 ggplot2 更改图例形状?(1)

📅  最后修改于: 2023-12-03 14:52:31.738000             🧑  作者: Mango

如何在 R 中使用 ggplot2 更改图例形状?

使用 ggplot2 绘制图形时,默认情况下图例形状为圆圈。但有时候,我们需要更改图例形状以更好地反映数据。本文将介绍如何在 ggplot2 中更改图例形状。

使用 scale_shape_manual 函数

使用 scale_shape_manual 函数可以手动指定图例形状。该函数需要传入一个形状向量,形状向量可以是数字或字母。下面是一个示例:

library(ggplot2)

# 创建数据
df <- data.frame(x = 1:3, y = 1:3, group = c("A", "B", "A"))

# 绘制散点图,并手动指定图例形状
ggplot(df, aes(x, y, color = group, shape = group)) +
  geom_point(size = 3) +
  scale_shape_manual(values = c(17, 18))  # 指定形状向量为 17 和 18

上面的代码将使用数字 17 和 18 分别代表组 A 和组 B。可以在 scale_shape_manual 函数中传入多个形状,对应不同组别。

使用自定义形状

除了预定义的形状以外,ggplot2 还支持使用自定义形状。可以通过向 ggplot2 提供具有 SVG 或 PDF 中的自定义绘图来实现此目的。下面是一个示例:

library(png)  # 加载 png 包
library(grid)  # 加载 grid 包

# 自定义绘图函数,用于绘制三角形形状
triangle <- function(size) {
  g <- rasterGrob(readPNG(system.file("img", "Rlogo.png", package="png")), interpolate=TRUE)
  height <- convertHeight(unit(size, "mm"), "mm", valueOnly=TRUE)
  width <- convertWidth(unit(size, "mm"), "mm", valueOnly=TRUE)
  grid.ls()
  grobTree(polygonGrob(unit(c(0.5, 1, 0), "npc"), unit(c(0.5, 1, 1), "npc"), 
                       gp=gpar(fill="#FF0000", col="#FFFFFF")), 
           grobViewport(width=width, height=height))
}

# 创建数据
df <- data.frame(x = 1:3, y = 1:3, group = c("A", "B", "A"))

# 绘制散点图,并使用自定义形状作为图例形状
ggplot(df, aes(x, y, color = group, shape = group)) +
  geom_point(size = 3) +
  guides(shape = guide_legend(override.aes = list(shape=triangle(4))))  # 使用自定义形状

上面的代码将自定义三角形形状,并将其作为 A 组和 B 组的图例形状。

总结

本文介绍了在 ggplot2 中更改图例形状的两种方法:使用 scale_shape_manual 函数和使用自定义形状。使用 scale_shape_manual 函数需要传入数字或字母作为形状向量,而使用自定义形状需要编写具有 SVG 或 PDF 格式的自定义绘图函数。