我已经看到了类似的问题,但我想直接问我的具体问题:
我有一个散点图,其中"z"变量编码为色标:
library(ggplot2)
myData <- data.frame(x = rnorm(1000),
y = rnorm(1000))
myData$z <- with(myData, x * y)
badVersion <- ggplot(myData,
aes(x = x, y = y, colour = z))
badVersion <- badVersion + geom_point()
print(badVersion)
Run Code Online (Sandbox Code Playgroud)
产生这个:
正如您所看到的,由于"z"变量是正态分布的,因此很少有点用分布的"极端"颜色着色.这是应该的,但我有兴趣强调差异.一种方法是使用:
betterVersion <- ggplot(myData,
aes(x = x, y = y, colour = rank(z)))
betterVersion <- betterVersion + geom_point()
print(betterVersion)
Run Code Online (Sandbox Code Playgroud)
产生这个:
通过将rank()应用于"z"变量,我更加强调"z"变量中的微小差异.可以想象在这里使用任何转换,而不是排名,但你明白了.
我的问题基本上是,以最简单的方式,或最"真正的ggplot2"方式,以原始单位(z的单位,而不是z的等级)获得一个图例,同时保持转换后的版本有色点?
我有一种感觉,它以某种方式使用rescaler(),但我不清楚如何使用rescaler()与任意转换等.一般来说,更明确的例子将是有用的.
在此先感谢您的时间.
scales
特别是
看看包装?trans
我认为,给定获得值或更极端的概率的颜色映射的转换应该是合理的(基本上pnorm(z)
)
我认为这scale_colour_continuous(trans = probability_trans(distribution = 'norm')
应该有效,但它会引发警告.
所以我定义了一个新的转变(见?trans_new
)
我必须定义一个转换和一个逆
library(scales)
norm_trans <- function(){
trans_new('norm', function(x) pnorm(x), function(x) qnorm(x))
}
badVersion + geom_point() + scale_colour_continuous(trans = 'norm'))
Run Code Online (Sandbox Code Playgroud)
使用提供的probability_trans
抛出警告,似乎不起作用
# this throws a warning
badVersion + geom_point+
scale_colour_continuous(trans = probability_trans(distribution = 'norm'))
## Warning message:
## In qfun(x, ...) : NaNs produced
Run Code Online (Sandbox Code Playgroud)