2012-05-13 4 views
5

Ich habe ein ähnliches Problem wie @Mike in this question. Die Frage ist, wie man die Umrissfarben der Regionen in einem Kartenplot einstellt.geom_map Grenzen in ggplot2 - revisited

Die vorgeschlagene Lösung dort ist eine geom_polygon hinzufügen, um über die Grenzen zu plotten. Dies funktioniert, solange das gesamte Gebiet geplottet ist. Wenn Sie versuchen, sich auf einen Unterbereich zu beschränken, werden die Polygone seltsam gezeichnet (vermutlich, weil einige Scheitelpunkte fallen gelassen werden). Mit dem Standard geom_map Beispiel:

# Create example data 
ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) 
values <- data.frame(id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5)) 
positions <- data.frame(
    id = rep(ids, each = 4), 
    x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), 
    y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) 
) 

# Plot data 
ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id), map = positions) + 
    geom_polygon(aes(x,y,group=id), fill = NA, colour = 'red', data = positions) + 
    expand_limits(positions) + 
    ylim(0, 3) 

Eine mögliche Abhilfe in geom_map die Farbe Ästhetik verwendet und dann manuell die Konturfarbe wählt mit scale_colour_manual wie folgt:

ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id, colour = 'white'), map = positions) + 
    scale_colour_manual(values=c('white')) + 
    expand_limits(positions) + 
    ylim(0, 3) 

So habe ich zwei Fragen:

  1. Warum funktioniert geom_polygon nicht ordnungsgemäß, wenn die Achsenlimits eingeschränkt sind?
  2. Gibt es eine elegantere Lösung, um die Umrisse zu färben als die hier gezeigte?

Unten sind die Plot-Ausgaben. Vielen Dank im Voraus.

Did not work properly using geom_polygon Works but is not very elegant

Antwort

8

Ich glaube, Sie richtig sind, warum es nicht funktioniert. Die Begrenzung der X- oder Y-Grenzen unter Verwendung von xlim oder ylim klemmt die Daten vor dem Plotten. Dadurch werden einige Vertices aus Ihrem Polygon weggelassen, sodass einige Objekte nicht geplottet werden.

Aus diesem Grund gibt es coord_cartesian, mit dem Sie die X- und Y-Grenzen ohne die Daten schneiden können. Es wird in die richtige Region "gezoomt", anstatt zu clippen und dann zu plotten.

Also versuchen Sie ylim+ coord_cartesian(ylim = c(0,3)).

+0

das funktioniert perfekt, danke! Dies ist ein Detail, aber kennen Sie zufällig die Antwort auf meine zweite Frage? Warum kann ich das "color = white" Aestetic nicht direkt in der 'geom_map' Funktion verwenden? – yellowcap

+0

@ yellowcap Ich weiß es nicht, hauptsächlich, weil ich nicht sicher bin, was Ihr spezifisches Problem im zweiten Fall ist. – joran

+0

@yellowcap Wahrscheinlich viel zu spät, um dies hilfreich zu sein, aber Sie wollen 'color =" white "' im 'geom_map'-Aufruf, aber nicht im' aes'-Aufruf. Es ist keine Ästhetik, weil es nicht von Ihren Daten abhängt. Es ist immer nur weiß. – Gregor