【问题标题】:Reverse overplotting alpha value in ggplot2在ggplot2中反向重叠alpha值
【发布时间】:2016-12-31 17:22:39
【问题描述】:

ggplot2 中的 alpha 值通常用于帮助在 R 中进行过度绘图。较深的颜色表示有很多观察值的区域,而较浅的颜色表示只有少数观察值的区域。有可能扭转这种局面吗?那么,异常值(通常很少观察)被强调为更暗,而大多数数据(通常有很多观察)被强调为更亮?

下面是 MWE:

myDat <- data.frame(x=rnorm(10000,0,1),y=rnorm(10000,0,1))
qplot(x=x, y=y, data=myDat, alpha=0.2)

远离中心 (0,0) 的更罕见的观测值更轻。我怎样才能扭转它?感谢您的任何想法。

【问题讨论】:

  • 根据您的具体要求,您可以考虑geom_density_2d。参见例如倒数第二个示例,以及scale_fill_gradient,您可以在其中设置您选择的lowhigh 颜色。

标签: r ggplot2 alpha


【解决方案1】:

您可以尝试分别设置每个点的 alpha 值,使不透明度从中心进一步增加。像这样的

p = 2 # adjust this parameter to set how steeply opacity ncreases with distance
d = (myDat$x^2 + myDat$y^2)^p
al = d / max(d)
ggplot(myDat, aes(x=x, y=y))  + geom_point(alpha = al)

【讨论】:

    【解决方案2】:

    尝试使用距质心的马氏距离作为异常值(分数较高的可以分配较暗的颜色,而不是使用 alpha 值):

    myDat <- data.frame(x=rnorm(10000,0,1),y=rnorm(10000,0,1))
    mu <- colMeans(myDat)
    
    # assuming x, y independent, if not we can always calculate a non-zero cov(x,y)
    sigma <- matrix(c(var(myDat$x), 0, 0, var(myDat$y)), nrow=2) 
    # use (squared) *Mahalanobis distance* as outlier score
    myDat$outlier.score <- apply(myDat, 1, function(x) t(x-mu)%*%solve(sigma)%*%(x-mu))
    qplot(x=x, y=y, data=myDat, col=outlier.score) + 
         scale_color_gradient(low='white', high='blue')
    

    # assuming x, y are not independent
    sigma <- matrix(c(var(myDat$x), cov(myDat$x, myDat$y), cov(myDat$x, myDat$y), var(myDat$y)), nrow=2) 
    # use (squared) *Mahalanobis distance* from centroid as outlier score
    myDat$outlier.score <- apply(myDat, 1, function(x) t(x-mu)%*%solve(sigma)%*%(x-mu)) 
    qplot(x=x, y=y, data=myDat, col=outlier.score) + 
        scale_color_gradient(low='white', high='blue')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多