2016-12-31 67 views
2

ggplot2中的alpha值經常用於幫助在R中進行重疊繪圖。較深的顏色代表許多觀測值下降的區域,較淺的顏色代表只有少數觀測值落在的區域。是否有可能扭轉這種情況?那麼,那些異常值(通常很少有觀察值)會被強調爲較暗,而大多數數據(通常具有許多觀測值)會被強調爲較亮?在ggplot2中反向疊加alpha值

下面是一個MWE:從中心(0,0)

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

更罕見的觀察遠更輕。我怎樣才能扭轉這種情況?謝謝你的任何想法。

+1

根據您的具體要求,您可以考慮[geom_density_2d](http://docs.ggplot2.org/current/geom_density_2d.html)。見例如第二個最後一個例子,以及[scale_fill_gradient](http://docs.ggplot2.org/current/scale_gradient.html),您可以在其中設置您所選擇的「低」和「高」顏色。 – Henrik

回答

5

您可以嘗試單獨設置每個點的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) 

enter image description here

3

一些與馬氏距離從形心嘗試此爲異常值的得分(分數越高的那些可以分配較深的顏色,而不是使用阿爾法值):

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') 

enter image description here

# 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') 

enter image description here