r - 更改 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 种颜色,并且如果我输入“白色”或“透明”则不起作用。
有简单的解决方案吗?
非常感谢!
解决方案
它不是特别整洁,我相信有更好的方法,但如果你玩“大小”,你可以为块着色:
myplot +
guides(color=guide_legend(override.aes=list(fill=pred$Myc, size=5)))
我希望这会有所帮助!
推荐阅读
- maven - 如何获得并行构建的 Maven 反应堆构建顺序?
- python - 使用 python 读取文件和过滤值
- docker - 我无法在 docker 上连接到我的 hugo 站点
- javascript - 向谷歌地图地点添加搜索栏
- java - java - 如何使用java从现在减去30天,3个月和1年?
- javascript - 在 .then 函数中返回嵌套在 forEach 中的承诺
- reverse-proxy - 球童重写和重新分配
- python - 使用 API 访问 sqlalchemy 中的关系表数据
- java - 导出 VS Code Java 项目以在 VS Code 外部使用
- java - 这是我得到的错误:类型不匹配:无法从双精度转换为双精度 []