2013-10-17 38 views
5

我想一個點添加到現有filled.contour情節,使用下面的代碼:添加點在R鍵filled.contour - 在正確的地方

MyFunction <- function(x,y){ 
    return(dnorm(sqrt(x^2+y^2))) 
} 
wrapper <- function(x, y, my.fun, ...) {sapply(seq_along(x), FUN = function(i) my.fun(x[i], y[i], ...))} 
meshstep <- 0.5 
x<- seq(-20,20,meshstep) 
y <-seq(-20,20,meshstep) 
z <- outer(x,y,FUN = wrapper, my.fun=MyFunction) 
filled.contour(x,y,z, col=rev(heat.colors(n=20, alpha=0.7)), nlevels=15) 
points(0,0) 

我很驚訝的是points(0,0)沒把點放在圖的原點上,但大致位於x = 10,y = 0。此外,locator()似乎也在提示關於該「新」座標系的座標。這是爲什麼?

+0

這個問題與朱巴提供的鏈接有一些重疊。由於我正在尋找'locator()'工作,所以我希望這不值得關閉它。 – Roland

回答

1

最好的辦法是使用plot.axes參數由@juba提及。但是,如果您確實需要在繪圖完成後添加某些東西,則可以使用locator單擊繪圖中您知道要使用的座標系中的點的值(對角)的兩點,然後使用TeachingDemos包中的updateusr函數將當前座標系修改爲您要使用的座標系。然後,您可以使用新的座標系添加到繪圖(您可能需要設置par(xpd=NA))。

1

你可以找到一個詳細的解答在這裏: Plotting a box within filled.contour plots in R?

總之,filled.contour使用兩種不同的座標系統,一個用於填充的輪廓和一個圖例。爲了解決你的問題,你要麼必須使用另一個函數,或者把你的pointsplot.axes說法:

filled.contour(x,y,z, col=rev(heat.colors(n=20, alpha=0.7)), nlevels=15, 
       plot.axes={points(0,0)}) 

enter image description here

+0

你有一個想法如何使'locator()'與'filled.contour'一起工作嗎? – Roland

+0

鑑於兩個尺度問題,我不確定這是可能的。也許你應該嘗試其他功能? – juba