Rysowanie wykresów słupkowych na mapach w R?

14

Używam plotrixw Rcelu wykreślenia mapy stanu USA. Ma doskonałą funkcję floating.pieumieszczania wykresów kołowych w każdym stanie.

Zastanawiam się, czy w plotrixpakiecie znajdują się podobne funkcje do wyświetlania wykresów słupkowych w każdym stanie? (Rzuciłem okiem na dokumentację i funkcje, które radzą sobie z wykresami słupkowymi, nie wydają się mieć takiej możliwości, ale po prostu chciałem się upewnić.) Wolę pracować w pakiecie plotrix, jeśli to możliwe, ale śmiało nazywam inne pakiety.

Na przykład chciałbym stworzyć mapę podobną do tej (ale dla USA):

wprowadź opis zdjęcia tutaj

Dla mojej mapy w USA byłoby 50 wykresów słupkowych, po jednym dla każdego stanu.

Mam tę mapę z /programming/20465070/barplots-on-a-map , ale wygląda na to, że ggsubplot nie działa na mojej wersji R (podobnie jak inni mówili w poście ).

wwl
źródło
2
Wiedziałem też, jak to zrobić z ggsubplotpakietem, ale teraz jest on przestarzały i nie będzie działał (jak wspomniałeś). Być może ten post może być punktem wyjścia: stackoverflow.com/questions/36063043/…
Andre Silva,
Zapoznaj się z dokumentacją plotrix, aby sprawdzić, czy takie funkcje istnieją. Następnie skonsultuj się z twórcą fabuły.
Mox

Odpowiedzi:

1

Wiem, że naprawdę się z tym spóźniam, ale myślę, że znalazłem dość proste rozwiązanie.

Jeśli spojrzysz na kod źródłowy floating.pie()(np. Przez wywołanie getAnywhere(floating.pie)), zauważysz, że stosuje on bardzo proste, ale skuteczne podejście: rysowanie segmentów kołowych jako wielokątów. Jeśli wszystko, czego chcesz od wykresów słupkowych, to słupki (bez etykiet, osi itp.), Możesz zastosować to samo podejście i napisać własną funkcję. Oto szybka i brudna wersja:

# 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 oznacza, że ​​wartości mają być reprezentowane przez słupki
  • xllci yllcokreśl położenie lewego dolnego rogu lewego paska w dowolnym używanym układzie współrzędnych
  • barwidthi maxheightsłużą do skalowania rozmiaru prętów

Oto demo z podstawową spfabułą. Nie sądzę, że pracowałem plotrixwcześniej, ale na podstawie tego floating.pie, jak działa, zakładam, że to powinno również działać 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)

Wynik wygląda następująco: przykładowa mapa wynikająca z powyższego kodu

Gdzie jest mój ręcznik
źródło
Ten błąd pojawia się po uruchomieniu linii pasków map> pasków map (x = x1, xllc = -110, yllc = 40, barwidth = .5, maxheight = 5) Błąd na paskach map (x = x1, xllc = -110, yllc = 40, barwidth = 0,5, maxheight = 5): nie można znaleźć funkcji „pasków map”
324
To brzmi, jakbyś nie uruchomił kodu w pierwszej części mojej odpowiedzi. Funkcja mapbarsjest zdefiniowana w pierwszym dużym bloku kodu, gdzie jest napisane mapbars <- function (x, xllc = 0, .... Najpierw musisz wykonać całą sekcję kodu, aby „nauczyć” R nowego polecenia.
Gdzie jest mój ręcznik
-1

ggplot2 i ggvis to dwie biblioteki, które mogą pomóc w wyświetlaniu wykresów na mapie. W ggplot2 możesz rysować bąbelki na mapie, a następnie wystarczy podać aes () współrzędne, które nie mają nic wspólnego z rozmiarem i kolorem bąbelka. Jeśli chodzi o wykres słupkowy, musisz przypisać co najmniej 2 pary xiy, jedną dla lokalizacji wykresu słupkowego, a drugą dla wysokości i szerokości wykresu słupkowego. Innymi słowy, musisz znać współrzędne 4 narożników dla paska.

Swarley
źródło