Plotten von Balkendiagrammen auf Karten in R?

14

Ich verwende plotrixin Reinen Zustand Ebene Karte der USA zu zeichnen. Es hat eine ausgezeichnete Funktion floating.pie, um Kreisdiagramme für jeden Zustand zu erstellen.

Ich frage mich, ob es in dem plotrixPaket ähnliche Funktionen zum Anzeigen von Balkendiagrammen in jedem Status gibt. (Ich habe mir die Dokumentation und die Funktionen angeschaut, die sich mit Balkendiagrammen befassen, aber ich wollte nur sicher sein.) Ich arbeite lieber innerhalb des plotrix-Pakets, aber ich kann es gerne benennen andere Pakete.

Als Beispiel wäre ich daran interessiert, eine ähnliche Karte zu erstellen (aber für die USA):

Bildbeschreibung hier eingeben

Für meine US-Karte gäbe es 50 Balkendiagramme, eines für jeden Staat.

Ich habe diese Karte von /programming/20465070/barplots-on-a-map erhalten , aber es scheint, dass ggsubplot auf meiner Version von R nicht funktioniert (ähnlich wie in anderen Beiträgen ).

wwl
quelle
2
Ich wusste auch, wie man es mit ggsubplotPaket macht, aber es ist jetzt veraltet und es wird nicht mehr funktionieren (wie du erwähnt hast). Vielleicht kann dieser Beitrag ein Ausgangspunkt sein: stackoverflow.com/questions/36063043/…
Andre Silva
Konsultieren Sie die Dokumentation zu plotrix, um festzustellen, ob solche Funktionen vorhanden sind. Dann wenden Sie sich an den Ersteller von plotrix.
Mox

Antworten:

1

Ich weiß, dass ich wirklich spät dran bin, aber ich denke, ich habe eine ziemlich einfache Lösung gefunden.

Wenn Sie sich den Quellcode von ansehen floating.pie()(z. B. durch Aufrufen von getAnywhere(floating.pie)), werden Sie feststellen, dass es einen sehr einfachen und dennoch effektiven Ansatz gibt: Zeichnen der Tortensegmente als Polygone. Wenn Ihre Balkendiagramme nur Balken enthalten sollen (keine Beschriftungen, Achsen usw.), können Sie denselben Ansatz verwenden und Ihre eigene Funktion schreiben. Hier ist eine schnelle und schmutzige Version:

# the function 
mapbars <- function (x, xllc = 0, yllc = 0, barwidth=1, maxheight=10){
  # calculate how long each bar needs to be
  bars <- (x/max(x)) * maxheight
  # get some quick colors
  col <- rainbow(length(x))

  for(i in 1:length(x)){
    # figure out x- and y coordinates for the corners
    leftx   <- xllc + ((i-1) * barwidth)
    rightx  <- leftx + barwidth
    bottomy <- yllc
    topy    <- yllc + bars[i]
    # draw the bar
    polygon(x=c(leftx, rightx, rightx, leftx, leftx),
            y=c(bottomy, bottomy, topy, topy, bottomy),
            col=col[i])
  }
}
  • x ist für die Werte, die durch die Balken dargestellt werden
  • xllcund yllcgeben Sie die Position der linken unteren Ecke des linken Balkens in dem von Ihnen verwendeten Koordinatensystem an
  • barwidthund maxheightwerden zum Skalieren der Balkengröße verwendet

Hier ist eine Demo mit einem grundsätzlichen spPlot. Ich glaube nicht, dass ich vorher mit gearbeitet habe plotrix, aber basierend auf der Funktionsweise floating.piewürde ich davon ausgehen, dass dies auch mit funktionieren sollte plotrix.

library(sp)
library(maptools) # just for easy access to a background map
# load some country borders as a background
data("wrld_simpl")
plot(wrld_simpl)

# zoom on a bit …
mexico <- subset(wrld_simpl, NAME=="Mexico")
plot(mexico, axes=TRUE)

# data for the bars
x1 <- c(4, 7, 1, 2)

# plot
plot(mexico, axes=TRUE)
mapbars(x=x1, xllc=-110, yllc=20, barwidth=.5, maxheight=5)
legend(x="topright", pch=22, col="black", pt.bg=rainbow(x1), legend=c("foo", "bar", "baz", "foobar"))

# add another one:
x2 <- c(9, 21, 64, 45, 33, 43, 12, 7)
mapbars(x=x2, xllc=-100, yllc=25, barwidth=.2, maxheight=2)

Das Ergebnis sieht so aus: Beispielkarte, die sich aus dem obigen Code ergibt

Wo ist mein Handtuch?
quelle
-1

ggplot2 und ggvis sind zwei Bibliotheken, mit denen Sie die Diagramme auf der Karte anzeigen können. In ggplot2 können Sie Blasen auf der Karte zeichnen und dann müssen Sie nur aes () die Koordinaten geben, die nichts mit der Größe und Farbe der Blasen zu tun haben. In Bezug auf ein Balkendiagramm müssen Sie mindestens 2 Paare von x und y zuweisen, eines für die Position des Balkendiagramms und das andere für die Höhe und Breite des Balkendiagramms. Mit anderen Worten, Sie müssen die Koordinaten von 4 Ecken für einen Balken kennen.

Swarley
quelle