在 R 中使用 ggplot 更改图例的一部分?

Ele*_*ino 2 r ggplot2

我正在尝试使用 ggplot 更改显示的图例的一部分。例如,如果我有一些数据并创建如下图:

library(ggplot2)
dat <- data.frame(
  nam = c('a','b','c','d','e','f','g','h','i'),
  val = c(2,5,1,6,8,3,9,10,8)
)

col1  <- setNames(scales::hue_pal(c(0, 360) + 15, 100, 64, 0, 1)(length(dat$nam[1:5])), dat$nam[1:5])
col2  <- setNames(rep('#e6e6e6', length(dat$nam[6:9])), dat$nam[6:9])
colFinal <- unname(c(col1, col2))

ggplot(dat, aes(x = nam, y = val, fill= nam )) +  
  geom_bar(stat = 'identity') +
  scale_fill_manual(values = colFinal, name = 'name') +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

这就创造了这个情节:条形图示例

正如您所看到的,fto 的i颜色都是相同的灰色。我想知道是否可以通过“合并”来更改图例,fi仅显示这些值的单个图例条目。例如,我正在尝试做这样的事情:

预期产出

但需要注意的是,我试图通过改变情节本身来做到这一点。我不可能返回并更改数据框。我在想也许这可以通过使用来实现,ggplot_build但我不确定!?

关于我如何做到这一点有什么建议吗?

ste*_*fan 5

一种选择是通过操作对象来手动设置填充breaks比例:labelsggplot

library(ggplot2)
dat <- data.frame(
  nam = c('a','b','c','d','e','f','g','h','i'),
  val = c(2,5,1,6,8,3,9,10,8)
)

col1  <- setNames(scales::hue_pal(c(0, 360) + 15, 100, 64, 0, 1)(length(dat$nam[1:5])), dat$nam[1:5])
col2  <- setNames(rep('#e6e6e6', length(dat$nam[6:9])), dat$nam[6:9])
colFinal <- unname(c(col1, col2))

p <- ggplot(dat, aes(x = nam, y = val, fill= nam )) +  
  geom_bar(stat = 'identity') +
  scale_fill_manual(values = colFinal, name = 'name') +
  theme_bw()

p$scales$scales[[1]]$breaks <- letters[1:6]
p$scales$scales[[1]]$labels <- c(letters[1:5], "Others")
p
Run Code Online (Sandbox Code Playgroud)