2013-10-17 18 views
5

Chciałbym dodać punkt do istniejącego filled.contour działce, stosując następujący kod:Dodawanie punktów do filled.contour w R - w odpowiednim miejscu

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) 

Jestem bardzo zaskoczony, że points(0,0) didn nie umieścił punktu na początku wykresu, ale z grubsza znajduje się w punkcie x = 10, y = 0. Również, locator() wydaje się również monitować współrzędne w odniesieniu do tego "nowego" układu współrzędnych. Dlaczego?

+0

To pytanie pokrywa się z linkiem dostarczonym przez juba. Ponieważ staram się wykonać funkcję 'locator()', mam nadzieję, że nie zasługuje na to, aby ją zamknąć. – Roland

Odpowiedz

1

Najlepszym rozwiązaniem jest użycie plot.axes argumentu jak wspomniano przez @juba. Ale jeśli naprawdę musisz dodać coś po zakończeniu fabuły, możesz użyć locator, aby kliknąć 2 punkty na wykresie, gdzie znasz wartości punktów w układzie współrzędnych, którego chcesz użyć (przeciwległe rogi), a następnie użyj funkcja updateusr z pakietu TeachingDemos, aby zmodyfikować bieżący układ współrzędnych do tego, którego chcesz użyć. Następnie można dodać do wykresu za pomocą nowego układu współrzędnych (może być konieczne ustawienie par(xpd=NA)).

1

można znaleźć szczegółowe odpowiedź tutaj: Plotting a box within filled.contour plots in R?

w skrócie, filled.contour stosowanie dwóch różnych systemów współrzędnych, jeden dla napełnionego konturu i jeden dla legendy. Aby rozwiązać problem, trzeba albo użyć innej funkcji lub umieszczania points do plot.axes argumentu:

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

Czy masz pomysł, jak zrobić 'locator()' działa z 'filled.contour'? – Roland

+0

Nie jestem pewien, czy jest to możliwe, zważywszy na problem z dwiema skalami. Może powinieneś spróbować innej funkcji? – juba

Powiązane problemy