r - ifelse 在 ggplot2 中设置不同的参数
问题描述
我有我的数据框:
test<-data.frame(F1=c(1,2,3,4,5),F2=c(3,4,5,6,7),Group=c("G1","G2","G2","G3","G1"))
我尝试在不同的条件下设置不同的点颜色:
FF<-function(Ture_or_not){
p<-ggplot(test,aes(x=F1,y=F2))+
geom_point(aes(color=Group),size=10)+
scale_color_manual(values=ifelse(Ture_or_not==TRUE,c("yellow","red","black"),c("black","black","black")))
p
}
FF(TRUE)
但我得到了:
Error: Insufficient values in manual scale. 3 needed but only 1 provided.
Run `rlang::last_error()` to see where the error occurred.
我可以知道有什么问题吗?
解决方案
Ture_or_not
这里的一种解决方案是在颜色名称向量的长度上重复该值:
FF <- function(Ture_or_not) {
p <- ggplot(test, aes(x=F1, y=F2)) +
geom_point(aes(color=Group), size=10) +
scale_color_manual(values=ifelse(rep(Ture_or_not, 3),
c("yellow","red","black"),
c("black","black","black"))
)
return(p)
}
FF(TRUE)
这里的想法是ifelse
需要一个相同长度的布尔向量来决定为这些向量中的每个条目选择哪个 3 向量值。您当前的版本正在传递一个标量布尔值,因此它只是从 3 个颜色向量中的任何一个返回一个条目(实际上是第一个条目)。
推荐阅读
- qt - qapitrace.exe - 未找到入口点
- docker - 卡夫卡 Docker 设置
- react-router - 输入 Route 而不将其添加到浏览器历史记录?
- vue.js - 在 vuex 流中运行脚本的正确位置?
- django - 如何更改根 URL 配置以便为用户 URL 使用命名空间
- android - 如何获得使用 MotionLayout 的障碍
- angularjs - “npm run dev”和“npm start”之间的区别
- reactjs - 在页面刷新之前,项目不会映射 - 使用 firestore、react 和 redux
- r - Shinyapps.io 服务器上的 data.table 错误,但不是本地错误
- ios - 当父母和孩子有相同的数据时,如何使用 Alamofire 解析数据?