手动alpha刻度exp(-x)

时间:2013-01-14 00:36:33

标签: r ggplot2

我有一个数据框pp,其中包含一个变量nearby_distance,我希望将其映射到alpha aes,使nearby_distance的值等于{{1}对应于完全可见性,0接近无穷大的值对应于接近完全透明度的alpha。

我可以定义一个新变量nearby_distance并使用pp$alphavar <- exp(-pp$nearby_distance)作为我的alphavar aes。这种方法可以满足我所需的转换,但是图中显示的图例不是有意义的单位。如何创建一个手动alpha刻度来完成所需的转换?

感谢。

1 个答案:

答案 0 :(得分:4)

制作包含xynearby_distance值的示例数据框。

pp<-data.frame(x=1:200,y=1:200,nearby_distance=seq(0,9.95,0.05))

如果现有的值不符合您的需求,则可以在库scales中定义您自己的值转换(请参阅?trans)。因此不需要在原始数据帧中进行转换。使用变换,值被转换,然后用于绘图和定义中断。然后对中断进行反转换以在图例中生成标签。

library(ggplot2)
library(scales)

negexp_trans <- function(){
  trans_new('negexp', function(x) exp(-x), function(x) -log(x))
}

scale_alpha_continuous()中用于获取情节的新变换。

ggplot(pp,aes(x,y,alpha=nearby_distance))+geom_point(size=5) + scale_alpha_continuous(trans = 'negexp')

example plot with custom alpha scaling