2015-07-19 75 views
2

我想繪製包含多個密度圖並提取其值的分佈圖的外部外包絡(輪廓)。在一個圖中繪製多個密度圖的外包絡

X <- c(1,2,1,4,3,1,2,8,9,0,5,4,2,2,5,5,7,8,8,9,5,6,5,6,3,4,5,3,4,5,4) 
Y <- c(0,3,1,1,3,2,7,1,2,1,9,2,1,3,6,1,9,5,2,9,1,1,2,1,3,4,6,9,4,5,2) 
Z <- c(1,4,9,5,7,8,2,8,9,0,5,4,2,2,5,5,7,8,8,9,5,6,5,6,9,9,9,2,6,7,1) 
W <- c(1,8,9,7,8,9,12,3,11,21,5,4,8,8,2,3,2,1,2,3,4,5,6,3,1,9,2,1,8,4,1) 
Q <- c(1,8,9,7,8,9,12,3,16,30,2,3,4,4,4,3,7,7,2,3,2,5,9,3,2,1,1,1,1,1,0) 

n <- data.frame(X,Y,Z,W,Q) 

plot((density(X))) 
fun <- function(x)lines((density(n[[x]]))) 
t <- seq(1:length(n)) 
lapply(t,fun) 

已經在網上搜索過,我可以找到輪廓,但它不能應用於上面生成的分佈圖。

+1

我不明白你想要做什麼圖。如何將等高線圖與密度圖結合起來? –

+0

Appologies編輯名稱,因爲它被稱爲外部包絡不輪廓。在這個問題下面有幾個很好的答案 – Barnaby

回答

4

我懷疑你是在問什麼可能被稱爲「外層信封」。我的第一個工作有幾個問題,你可以看到:

lines( x= density(X)$x, 
     y=apply( do.call(cbind, 
        lapply(n, function(x){ density(x)$y})), 1, max), col="red", lwd=3) 

而且我覺得還強調了與你的努力的問題爲好,因爲它說明了不是建立在其上懸掛的密度共同格的問題估計。

enter image description here

所以建立限制和重新做:

from=min(X,Y,Z,W,Q); to = max(X,Y,Z,W,Q) 
png() 
plot(Xd <- density(X, from=from, to=to)) 
fun <- function(x) lines(density(n[[x]],from=from, to = to )) 
t <- seq(1:length(n)) 
lapply(t,fun) 
lines( x= density(X, from=from, to=to)$x, 
     y=apply( do.call(cbind, lapply(n, 
        function(x){ density(x, from=from, to = to)$y})), 1, max), col="red", lwd=3) 
    dev.off() 

enter image description here

+0

不會有'y = apply(sapply(n,'是相同的並且更容易閱讀嗎?另外我試圖創建一個「更簡單」的版本並保存第一個「密度」結果,並避免再次計算,但不知道最終是否會產生任何差異 – Molx

+0

當我們使用'sapply'來疊加結果而不是單獨保留時,我有時會感到驚訝(不愉快)。發現讓它們分開更安全保存X密度是有意義的 –

+0

謝謝,可以從用於繪製形成外部包絡的多個分佈圖的序列中識別和提取值點 – Barnaby

1

這裏的答案非常相似,BondedDust的(基於他從/接近),我認爲是如果數據集非常大,更容易閱讀並且可能更快,因爲它不計算密度兩次。

from <- min(n) 
to <- max(n) 

t <- seq(1:length(n)) 
ds <- lapply(t, function(i) density(n[[i]], from=from, to=to)) #Densities 
maxd <- apply(sapply(ds, "[[", "y"), 1, max) #Max y of each x 

plot(density(X), type="n", ylim=c(0, max(maxd)), xlim=c(0, 15)) 
for (i in t) lines(ds[[i]]) 
lines(seq(from, to, length.out = length(maxd)), maxd, col="red", lwd=3) 

我手動設置繪圖xlim爲更好的可視化。

enter image description here