我想使用以下代码为现有的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 :(得分: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)})
答案 1 :(得分:2)
最好的选择是使用@juba提到的plot.axes
参数。但是,如果你真的需要在绘图完成后添加一些东西,那么你可以使用locator
点击绘图中的2个点,你知道你想要使用的坐标系中的点的值(对角) ),然后使用TeachingDemos包中的updateusr
函数将当前坐标系修改为您要使用的坐标系。然后,您可以使用新的坐标系添加到绘图中(您可能需要设置par(xpd=NA)
)。