2016-03-31 21 views
1

Ich habe einen Dataframe Samp, mit Benutzer-ID, Breite, Länge, mb. Ich wollte eine Karte mit den Punkten proportional zu MB verwendet plotten. Ich wollte eine Art Donut Form in Geom_point, also dachte ich, ich kann zwei PCH = 20 mit verschiedenen Größen verwenden, um die Donut-Form von PCH zu bekommen. Aber ich habe einige Probleme damit.ggplot2/ggmap: Verwenden Sie zweifarbige Punktemarkierungen in Plot und Legende

m <- get_map(location=c(lon=median(samp$longitude),lat=median(samp$latitude)), zoom=10) 
print(ggmap(m) + 
     geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="orange", pch = 20, data=samp) + 
     geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="black", pch = 20, size = 4, data=samp)) 

aber ich bin immer so etwas wie,

enter image description here

Die Formen sind nicht einmal in der gesamten Karte. Ich möchte, dass die Formen gleichmäßig und proportional zu mb.user-Werten sind. Aber die Karte hier ist weder proportional zu mb.user noch zu den Größen.

Auch die Legende zeigt nur eine Farbe. Es zeigt nicht zwei Farben zusammen. Ich möchte im Idealfall ein Donut-förmiges Symbol haben, dessen Größe proportional zu mb.user ist.

Kann jemand mir helfen, den Fehler zu finden, den ich hier mache?

Dank

Antwort

1

Wenn Sie einen Punkt Form verwenden, die einen Rahmen hat, können Sie die Punkte nur einmal dargestellt werden können, und es wird richtig in der Legende angezeigt. Wenn Sie ggplot2 Version 2 installiert haben (die neueste Version ist 2.1.0), können Sie die Breite des Punktrahmens auch mit dem Parameter stroke steuern. Sie haben nicht ein reproduzierbares Beispiel vorgesehen, so ist hier ein Beispiel der eingebaute in mtcars Datenrahmen mit:

ggplot(mtcars, aes(wt, mpg)) + 
    geom_point(aes(size=mpg), colour="red", fill="black", shape=21, stroke=1.5) + 
    scale_size_area(max_size=4) 

shape=21 ist ein gefüllter Kreis mit einem Rand (?pch verfügbaren Formen sehen). colour legt die Rahmenfarbe fest, fill legt die Füllfarbe fest und stroke legt die Rahmenbreite fest.

enter image description here

In Bezug auf Ihre Original-Code, sind die schwarzen Kreise die alle gleich groß, weil Sie auch außer Kraft gesetzt habe size=mb.user von size=4 außerhalb der Aufruf aes Einstellung. Einige orangefarbene Punkte können nicht angezeigt werden, wenn die schwarzen Punkte größer als die orangefarbenen Punkte sind. Wenn Sie size=4 entfernen und innerhalb von aessize=0.3*mb.user machen, erhalten Sie korrekt skalierte schwarze Punkte innerhalb der skalierten orangefarbenen Punkte.

Das löst jedoch immer noch nicht das Legendenproblem. Ich glaube nicht, dass es eine Möglichkeit gibt, eine Legende mit schwarz-innen-orangen Punkten zu erhalten, die zwei getrennte Aufrufe an geom_point verwenden, da es keine Möglichkeit gibt (zumindest keine, die ich mir vorstellen kann), eine kombinierte Größen-/Farbzuordnung zu erstellen . Mit einem einzigen Anruf geom_point mit einem gefüllten Marker löst das Problem, aber ich dachte, ich würde versuchen, so gut wie möglich zu erklären, warum Ihr ursprünglicher Code nicht wie erwartet funktioniert hat.

Verwandte Themen