我想要删除部分 colored颜色 图例,同时保留我设置的手动 colored颜色 ,但我无法做到这一点.

下面是一个例子:

library(data.table)
library(ggplot2)
# create dummy data
df <- data.table(x = rep(1:10,10),year = rep(2011:2020,each = 10))
df[,y := rnorm(.N,year[1] - 2011,.5),year]

unique_years <- df$year %>% unique()
# number of lines I want to highlight
Ncol <- 4
grey_gradient <-  paste0("grey",round(seq(90,55,length.out = length(unique_years)-Ncol)))
highlight_colors <- viridis::inferno(Ncol,begin = .2,end = .8)

ggplot(df,aes(x,y,color = as.factor(year),group = year))+
  geom_line()+
  scale_color_manual(breaks = unique_years,
                     values = c(grey_gradient ,highlight_colors ))+
  theme_minimal()

enter image description here

在这个例子中,我想用绿草的 colored颜色 来突出过go 4年.我想在图例中保留only these years年,但其他年份保留我定义的灰色渐变 colored颜色 .

我试过:

ggplot(df,aes(x,y,color = as.factor(year),group = year))+
  geom_line()+
  scale_color_manual(breaks = 2017:2020,
                     values = c(highlight_colors,grey_gradient  ))+
  theme_minimal()

但这并不能在其他年份保持灰色渐变:

enter image description here

我怎么能做到这一点?

推荐答案

您可以将您的数据子集为两个geom_line,其中您的第一个geom只有show.legend=FALSE的灰色线条.要对您的 colored颜色 使用新的比例,您可以使用包ggnewscale中的new_scale_color在第二个geom中添加您的 colored颜色 线,如下所示:

library(data.table)
library(ggplot2)
library(dplyr)
library(ggnewscale)

ggplot() +
  geom_line(df |> filter(year %in% c(2011:2016)),
            mapping = aes(x,y,color = as.factor(year), group = year),
            show.legend = FALSE) +
  scale_color_manual(values = grey_gradient) +
  new_scale_color() +
  geom_line(df |> filter(year %in% c(2017:2020)),
            mapping = aes(x,y,color = as.factor(year), group = year)) +
  scale_color_manual(values = highlight_colors) 

创建于2023-07-11年第reprex v2.0.2

R相关问答推荐

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

提取rame中对应r中某个变量的n个最小正值和n个最大负值的条目

查找满足SpatRaster中条件的单元格位置

R Markdown中的交叉引用表

如何使用按钮切换轨迹?

修改用R编写的用户定义函数

R Sapply函数产生的值似乎与for循环方法略有不同

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

如何在R中对深度嵌套的tibbles中的非空连续行求和?

`lazy_dt`不支持`dplyr/across`?

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

手动指定从相同数据创建的叠加图的 colored颜色

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

循环遍历多个变量,并将每个变量插入函数R

在散点图中使用geom_point放置线图例

我需要使用ggplot2制作堆叠条形图

访问数据帧中未定义的列时出现R错误

计算来自单独分组的分幅的值的百分位数

生存时间序列的逻辑检验

只有当我在循环的末尾放置一条print语句时,Foreach才会给出预期的输出