2017-01-23 12 views
2

Ich versuche Isoklinen unter einem Streudiagramm mit ggplot zu plotten, aber ich kann nicht herausfinden, wie man stat_function richtig verwendet.R: ggplot Distanzformel

Die Isoklinen auf der Strecke Formel basieren:

sqrt((x1-x2)^2 + (y1-y2)^2) 

und wie diese konzentrische Kreise aussehen würde, mit Ausnahme der Mitte der Ursprung der Handlung wäre:

enter image description here

Was ich bisher versucht habe ist, die Entfernungsfunktion innerhalb von ggplot so aufzurufen (Hinweis: Ich benutze x1 = 1 und y1 = 1, da ich bei meinem wirklichen Problem auch feste Werte habe)

distance <- function(x, y) {sqrt((x - 1)^2 + (y - 1)^2)} 
ggplot(my_data, aes(x, y))+ 
    geom_point()+ 
    stat_function(fun=distance) 

aber R gibt den Fehler:

Computation failed in 'stat_function()': argument "y" is missing, with no default

Wie richtig eingezogen I x und y-Werte zu stat_function, so dass es einer generischen Handlung der Abstandsformel Plots, mit dem Mittelpunkt im Ursprung?

+2

'stat_function' kann nur behandeln Funktionen, die y berechnen: Ich würde nur die Daten und das Grundstück mit stat_contour statt vorab berechnen. Sie müssen Ihre Formel als Funktion y = f (x) neu anordnen. – Roland

Antwort

2

Für alles ein wenig kompliziert, vermeide ich die Verwendung der stat Funktionen. Sie sind meist auf schnelle Berechnungen ausgerichtet. Sie beschränken sich normalerweise auf die Berechnung y basierend auf x.

distance <- function(x, y) {sqrt((x - 1)^2 + (y - 1)^2)} 
d <- expand.grid(x = seq(0, 2, 0.02), y = seq(0, 2, 0.02)) 
d$dist <- mapply(distance, x = d$x, y = d$y) 

ggplot(d, aes(x, y)) + 
    geom_raster(aes(fill = dist), interpolate = T) + 
    stat_contour(aes(z = dist), col = 'white') + 
    coord_fixed() + 
    viridis::scale_fill_viridis(direction = -1) 

enter image description here

+0

Danke, das ist perfekt! Wie würde ich die Rasterfarbe von viridis auf eine andere Palette ändern? Ich kenne den Operator :: nicht. –

+0

:: vermeidet nur zuerst Bibliothek (viridis) zu verwenden. Informationen zum Ändern von Paletten finden Sie auf den Hilfeseiten und im Optionsargument. – Axeman