首页 > 解决方案 > 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.

我可以知道有什么问题吗?

标签: rif-statementggplot2

解决方案


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 个颜色向量中的任何一个返回一个条目(实际上是第一个条目)。


推荐阅读