2013-10-17 9 views
5

ich einen Punkt auf einen vorhandenen filled.contour Plot hinzufügen möchte, mit dem folgenden Code:Punkte Hinzufügen in R filled.contour - am richtigen Ort

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) 

Ich bin ziemlich überrascht, dass points(0,0) didn Lege keinen Punkt in den Ursprung der Handlung, sondern ungefähr bei x = 10, y = 0. Auch scheint locator() Koordinaten in Bezug auf dieses "neue" Koordinatensystem zu veranlassen. Warum das?

+0

Diese Frage hat einige Überschneidungen mit dem von juba bereitgestellten Link. Da ich suche, 'locator()' funktionieren zu lassen, hoffe ich, dass es sich lohnt, es nicht zu schließen. – Roland

Antwort

1

Die beste Option ist das plot.axes Argument zu verwenden, wie von @juba erwähnt. Aber wenn Sie wirklich etwas hinzufügen müssen, nachdem der Plot fertig ist, dann können Sie locator verwenden, um auf 2 Punkte im Plot zu klicken, wo Sie die Werte der Punkte im Koordinatensystem kennen, die Sie verwenden möchten (gegenüberliegende Ecken), dann verwenden Verwenden Sie die Funktion updateusr aus dem TeachingDemos-Paket, um das aktuelle Koordinatensystem zu dem zu ändern, das Sie verwenden möchten. Sie können dann mit dem neuen Koordinatensystem zum Plot hinzufügen (möglicherweise müssen Sie par(xpd=NA) setzen).

1

Sie können eine ausführliche Antwort finden Sie hier: Plotting a box within filled.contour plots in R?

Kurz gesagt, filled.contour Verwendung zwei unterschiedliche Koordinatensystem, eine für die gefüllten Kontur und eine für die Legende. Um Ihr Problem zu lösen, müssen Sie entweder eine andere Funktion verwenden, oder Ihre points in das plot.axes Argument zu setzen:

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

Haben Sie eine Idee, wie 'locator()' mit 'filled.contour' funktioniert? – Roland

+0

Ich bin nicht sicher, dass es möglich ist, angesichts der zwei Skalen Problem. Vielleicht solltest du eine andere Funktion ausprobieren? – juba