首页 > 解决方案 > 更改 ggplot2 中的图例颜色

问题描述

我在改变 ggplot2 中图例的外观时遇到了一些问题。这可能是一个普遍的问题,但以防万一,这是我的示例数据和我正在绘制的 lmer 模型,以便可以复制它。

tempEf <- data.frame(
  N = rep(c("1", "2","1", "2","1", "2","1"), each=5, times=11),
  Myc = rep(c("1", "2", "3", "4", "5"), each=1, times=77),
  TRTYEAR = runif(385, 1, 15),
  site = rep(c(1:77), each=5, times=1),#77 sites
  Asp = runif(385, 1, 5))

# Make up some response data
tempEf$r <- 2*tempEf$TRTYEAR +                   
  -8*as.numeric(tempEf$Myc=="1") +
  4*as.numeric(tempEf$N=="1") +
  0.1*tempEf$TRTYEAR * as.numeric(tempEf$N=="1") +
  0.2*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="1") +
  -11*as.numeric(tempEf$Myc=="1")*as.numeric(tempEf$N=="1")+ 
  0.5*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="1")*as.numeric(tempEf$N=="1")+ 
  as.numeric(tempEf$site) +  #Random intercepts; intercepts will increase by 1
  tempEf$TRTYEAR/10*rnorm(385, mean=0, sd=2)    #Add some noise
#fit model
library(lme4)
model <- lmer(r ~ Myc * N + TRTYEAR + Asp + (1|site), data=tempEf)
tempEf$fit <- predict(model)   #Add model fits to dataframe

多亏了这个网站的一些帮助,我现在已经得到了我想要的情节:

pred <- ggpredict(model, c("TRTYEAR", "Myc"))

myplot<-plot(pred, rawdata  = TRUE, use.theme = TRUE)

并使用 ggsci 中的色标稍微调整一下:

myplot<-myplot+
  scale_color_npg(labels = c("A", "B", "C", "D", "E")) + scale_fill_npg() + 
  labs(x="\nTreatment Year",y="Ratings\n")

我的问题是我似乎无法制作图例,以便它只显示丝带/线条的实际颜色——目前图例中的每个“块”都是灰色的,只有一条颜色的线穿过它。我希望它们是正确颜色的实心块,或者至少只是摆脱灰色并使用带有正确颜色线的白色。我试过用这个:

  theme(legend.key = element_rect(fill =  'pink'))

它可以在图例中着色,阻止与灰色不同的颜色,但仅适用于所有 5 种颜色,并且如果我输入“白色”或“透明”则不起作用。

有简单的解决方案吗?

非常感谢!

标签: rggplot2

解决方案


它不是特别整洁,我相信有更好的方法,但如果你玩“大小”,你可以为块着色:

myplot + 
 guides(color=guide_legend(override.aes=list(fill=pred$Myc, size=5)))

我希望这会有所帮助!


推荐阅读