2013-01-06 21 views
3

我不得不產生filled.contour地塊具有某種在z值對稱像下面的代碼的變化filled.contour - 劃定的Z值水平

x <- 1:5 
y <- 1:5 
z <- matrix(outer(x,y,"+"),nrow=5) 
filled.contour(x,y,z) 
filled.contour(x,y,z,color.palette=rainbow) 
z2 <- z 
z2[5,5] <- Inf 
filled.contour(x,y,z2,col=rainbow(200),nlevels=200) 

我想能夠劃定例如某些水平或增量(2,4,6,8,10)z值的電平增加,從而獲得下面的情節

enter image description here

我想離開的col=rainbow(200)水平爲了繪製平穩顏色和顏色過渡,但我想描述某些值/增量。

這可能嗎?我將不勝感激基地的R解決方案,但萬一這是不可能的任何解決方案將是好的(ggplot,格)

回答

4

您可以使用countourLines()添加的線條和文字()添加文字:

txtlab <- c("2", "4", "6", "8", "Inf") 
txtpos <- c(1.25, 2, 3, 4, 4.75) 
ctlns <- contourLines(x, y, z2, levels=c(3, 5, 7, 9)) 
filled.contour(x,y,z2,col=rainbow(200),nlevels=200, 
    plot.axes={axis(1); axis(2); text(txtpos, txtpos, txtlab, cex=1.5); 
    sapply(1:4, function(x) lines(ctlns[[x]][[2]], ctlns[[x]][[3]], lwd=2)) 
}) 

Filled contour

+0

太好了。非常感謝你。這是否也適用於現在筆直而彎曲的線條? – ECII

+0

是的,contourLines()函數也會構造麴線輪廓線。 – dcarlson

+0

太棒了!我會給你答案,因爲這個答案不會混淆傳說。大量使用sapply!非常感謝你! – ECII

1

這是黑色的每個整數(使用is.integer的例子),可以修改爲只有甚至整數返回black很容易:

getcolor <- function(z, n) { 
    is.wholenumber <- 
    function(x, tol = .Machine$double.eps^0.5) abs(x - round(x)) < tol 
    pp <- pretty(range(z, finite=TRUE), n) 
    ifelse(is.wholenumber(pp), 'black', rainbow(n)) 
} 

filled.contour(x,y,z2,col=getcolor(z2, 200),nlevels=200) 

enter image description here

+0

這是一個非常聰明的做法。您將顏色中的線條圖集成在一起。我有兩個問題。 1.我想指定自己的範圍/間隔(而不是依靠'漂亮')。 2.這種方法是否允許彎曲的生命?來自「簡明英漢詞典」黑線不可能畫在傳說上嗎?非常感謝 – ECII

+0

1:圖例和情節似乎沒有獨立的顏色參數,答案似乎是否定的。 2:沒有任何線條;如果形狀z ==常數是彎曲的,黑色也會彎曲。 –

0

我最近做類似的東西,我用這種類型的代碼:

x <- 1:5 
y <- 1:5 
z <- matrix(outer(x,y,"+"),nrow=5) 
z2 <- z 
z2[5,5] <- Inf 
filled.contour(x,y,z2,col=rainbow(200),nlevels=200 
plot.axis = {axis(1);axis(2);contour(x,y,z2,add=TRUE)}) #that's when you add the contours 

Result (click on link to see)