有没有办法在R ggplot2中添加“自定义”图例?

bvhaajcl  于 2023-06-27  发布在  其他
关注(0)|答案(2)|浏览(104)

有没有办法在R ggplot2中添加一个真正的“自定义”图例?
网上所有可用的说明似乎只介绍了从原始数据修改已经存在的图例的方法。
是否可以添加原始数据集中不存在的任何形状和文字的自定义图例?
sample image

data.frame(x = 1:5,
y = rnorm(5),
z = c('a', 'b', 'c' , 'd' , 'e')) %>%
  ggplot(aes(x = x, y = y, fill = z)) + geom_point()

例如,如果我运行代码
它给出了上面的图像。
我想做的是,添加一个充满“红色”的圆圈,并带有“ABCDE”图例,这在原始数据集中是不存在的。

yqlxgs2m

yqlxgs2m1#

我相信有不同的方法可以做到这一点。实现具体目标的一种方法是使z成为一个因子,并将'abcde'作为因子水平(不会出现在数据中),然后在色标中使用drop == FALSE

dat <- data.frame(x = 1:5, y = rnorm(5), z = c('a', 'b', 'c' , 'd' , 'e')) 
dat$z <- factor(dat$z, levels = c(letters[1:5], 'abcde'))
ggplot(dat, aes(x = x, y = y, color = z)) + 
  geom_point() +
  scale_color_manual(values = c(rep("black",5), "red"), drop = FALSE)

mwg9r5ms

mwg9r5ms2#

第二种选择是通过色标的limits参数添加一个额外的类别,对于后者,我使用scale_color_manual,就像@AndreasM的方法一样:

set.seed(123)
dat <- data.frame(x = 1:5, y = rnorm(5), z = c("a", "b", "c", "d", "e"))

library(ggplot2)

ggplot(dat, aes(x = x, y = y, color = z)) +
  geom_point() +
  scale_color_manual(
    values = c(rep("black", 5), "red"),
    limits = \(x) c(x, "abcde")
  )

相关问题