R:自定义 ggplot2 颜色转换在标签中给出错误

R: custom ggplot2 color-transform gives error in labels

基本上,我有一个包含 3 个数字向量(x、y、z)的数据框,假设我想绘制一个 x、y 的散点图,用 z 着色。我想用尊重符号的平方根来转换色阶,所以我用 trans_new 制作了自己的色阶。这是一个简单的数据集,但具有实际的转换。

library(ggplot2)
library(scales)
set.seed(1)

plot<-data.frame(x=rnorm(100),y=rnorm(100),z=rnorm(100))
super_trans <- function(){
trans_new('super', function(X) sapply(X,function(x) {if(x>0){x^0.5} else{-(-    x)^0.5}}), function(X) sapply(X,function(x){ if(x>0){x^2} else{-x^2}}))
}
ggplot(plot,aes(x,y))+geom_point(aes(colour=z))+scale_colour_gradient(trans="super")

报错,

Error in if (x > 0) { : missing value where TRUE/FALSE needed 

我不明白。我试图回溯错误,我的猜测是错误发生在 trans_new 试图中断时。 但是,我不明白 "breaks" 参数在 trans_new 中是如何工作的。 那里有 ggplot2/Scales 英雄可以帮助我正确转换色标吗?

只有部分数据集出错可能是相关的。

有一个向量化的if,叫做ifelse。看来您还缺少一个额外的减号。

super_trans <- function() {
     trans_new('super', 
               function(x) ifelse(x>0, x^0.5, -(-x)^0.5), 
               function(x) ifelse(x>0, x^2, -(-x)^2))
}