将点添加到R中的filled.contour - 在正确的位置

时间:2013-10-17 14:22:37

标签: r plot

我想使用以下代码为现有的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()似乎也提示相对于“新”坐标系的坐标。那是为什么?

2 个答案:

答案 0 :(得分:2)

您可以在此处找到详细答案: Plotting a box within filled.contour plots in R?

简而言之,filled.contour使用两个不同的坐标系,一个用于填充轮廓,另一个用于图例。要解决您的问题,您必须使用其他函数,或将points放入plot.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

答案 1 :(得分:2)

最好的选择是使用@juba提到的plot.axes参数。但是,如果你真的需要在绘图完成后添加一些东西,那么你可以使用locator点击绘图中的2个点,你知道你想要使用的坐标系中的点的值(对角) ),然后使用TeachingDemos包中的updateusr函数将当前坐标系修改为您要使用的坐标系。然后,您可以使用新的坐标系添加到绘图中(您可能需要设置par(xpd=NA))。