📅  最后修改于: 2023-12-03 14:52:31.738000             🧑  作者: Mango
使用 ggplot2 绘制图形时,默认情况下图例形状为圆圈。但有时候,我们需要更改图例形状以更好地反映数据。本文将介绍如何在 ggplot2 中更改图例形状。
使用 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 格式的自定义绘图函数。