用Yeo-Johnson变换进行ggplot缩放

时间:2019-03-19 20:25:37

标签: r ggplot2 transformation

我正在尝试创建一个用Yeo-Johnson变换对y轴进行变换的箱线图。在我的代码下面尝试此操作,但它返回一个错误,该错误在代码下面。我使用此LINK编写了代码。为方便起见,我在虹膜数据集中使用了一个示例。请让我知道您对如何进行这项工作的想法。

代码:

library(scales)
library(VGAM)
trans.yeo <- function(x) {
  yeo.johnson(x, inverse = FALSE, lambda = -1.000968)
}  

back.yeo <- function(x) {
  yeo.johnson(x, inverse = TRUE, lambda = -1.000968)
} 

scale.yeo <- function() {
  require(scales)
  trans_new("yeo", transform = trans.yeo, inverse = back.yeo)
}

iris.bxp <- ggplot(iris, aes(x=Species, y=Sepal.Length, fill=Species)) +
  geom_boxplot()+
  scale_y_continuous(trans = scale.yeo())
iris.bxp

(具有指定lambda的特定转换对Sepal.Length变量可能没有意义,但对我自己的数据却有意义。这只是给出我所产生代码的可用示例)

产生的错误:

  

ans [index]中的错误<-(y [index] * lambda [index] + 1)^(1 / lambda [index])-:     下标作业中不允许使用NA

编辑:

如果我先定义:

trans_yeo <- trans_new("yeo", transform = trans.yeo, inverse = back.yeo)

然后将scale_y_continuous(trans = scale.yeo())替换为coord_trans(y=trans_yeo),它似乎确实起作用...

0 个答案:

没有答案