Ich möchte SpatialPolygons
aus Bibliothek sp
mit Löchern in ggplot2 zeichnen. Dank andere Fragen auf Stackoverflow, weiß ich, dass dies erlaubt ist, während sie mit dem Uhrzeigersinn geschrieben Polygonen zu tun:
http://stackoverflow.com/questions/12047643/geom-polygon-with-multiple-hole/12051278#12051278
der Tat, wenn ein SpatialPolygons
mit broom::tidy
(ersetzt ggplot2::fortify
) Transformieren, Löcher Polygone im Uhrzeigersinn gespeichert wie gezeichnet wird Löcher.
In ggplot2 wird die Art, wie Polygone mit Löchern gezeichnet werden, einmal mit fill
und einmal mit colour
gezeichnet, andernfalls können Sie Linien sehen, die Polygone kreuzen. Wenn es sich um mehrere Subpolygone handelt, einige mit Löchern, ist das schwieriger, die Reihenfolge der Punkte-Features, wie sie in broom::tidy
definiert sind, erlaubt möglicherweise keine Füllung von Polygonen (siehe Bild unten).
Hat jemand von Ihnen eine Lösung, um dieses Füllproblem zu beseitigen?Zeichnen Sie SpatialPolygons mit mehreren Subpolygonen und Löchern mit ggplot2
Hier ist ein reproduzierbares Beispiel:
library(sp)
library(ggplot2)
# Create two polygons: second would be a hole inside the first
xy = cbind(
x = c(13.4, 13.4, 13.6, 13.6, 13.4),
y = c(48.9, 49, 49, 48.9, 48.9)
)
hole.xy <- cbind(
x = c(13.5, 13.5, 13.45, 13.45, 13.5),
y = c(48.98, 48.92, 48.92, 48.98, 48.98)
)
# Transform as SpatialPolygons with holes
xy.sp <- SpatialPolygons(list(
Polygons(list(Polygon(xy),
Polygon(hole.xy, hole = TRUE)), "1"),
Polygons(list(Polygon(xy + 0.2),
Polygon(xy + 0.35),
Polygon(hole.xy + 0.2, hole = TRUE)), "2")
))
# Transform SpatialObject to be used by ggplot2
xy.sp.l <- broom::tidy(xy.sp)
ggplot(xy.sp.l) +
geom_polygon(aes(x = long, y = lat, group = id, fill = id))
Eine Lösung würde bedeuten, die Polygone im SpatialPolygons Funktionsaufruf zu trennen. z.B. Zwei Polygone mit id = 2 werden 2a & 2b. Ist dies eine Möglichkeit oder suchen Sie nach einer Lösung ab xy.sp.l? –