6

I'd like to add a point to an existing filled.contour plot, using the following code:

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)

I'm pretty surprised that points(0,0) didn't put a point into the origin of the plot, but roughly located at x=10,y=0. Also, locator() seems to be prompting coordinates with respect to that 'new' coordinate system as well. Why is that?

4

2 回答 2

3

您可以在此处找到详细答案: 在 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)})

在此处输入图像描述

于 2013-10-17T14:32:21.640 回答
2

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

于 2013-10-17T17:41:48.167 回答