Tracciare grafici a barre su mappe in R?


14

Sto usando plotrixin Rper tracciare una mappa a livello statale degli Stati Uniti. Ha una funzione eccellente floating.pieper mettere i grafici a torta su ogni stato.

Mi chiedo se ci siano funzioni simili all'interno del plotrixpacchetto per visualizzare i grafici a barre in ogni stato? (Ho dato un'occhiata alla documentazione e le funzioni che trattano i grafici a barre non sembrano avere questa possibilità, ma volevo solo esserne sicuro.) Preferisco lavorare all'interno del pacchetto plotrix, se possibile, ma mi sento libero di nominare altri pacchetti.

Ad esempio, sarei interessato a produrre una mappa simile a questa (ma per gli Stati Uniti):

inserisci qui la descrizione dell'immagine

Per la mia mappa degli Stati Uniti, ci sarebbero 50 grafici a barre, uno per ogni stato.

Ho ottenuto questa mappa da /programming/20465070/barplots-on-a-map , ma sembra che ggsubplot non funzioni sulla mia versione di R (simile a ciò che altri hanno detto sul post ).


2
Sapevo anche come farlo con il ggsubplotpacchetto, ma ora è deprecato e non funzionerà (come hai detto). Forse questo post può essere un punto di partenza: stackoverflow.com/questions/36063043/…
Andre Silva

Consultare la documentazione su plotrix, per vedere se esistono tali funzioni. Quindi consultare il creatore di plotrix.
Mox

Risposte:


1

So di essere davvero in ritardo con questo, ma penso di aver trovato una soluzione piuttosto semplice.

Se dai un'occhiata al codice sorgente di floating.pie()(ad esempio chiamando getAnywhere(floating.pie)), noterai che utilizza un approccio molto semplice ma efficace: disegnare i segmenti di torta come poligoni. Se tutto ciò che desideri dai tuoi grafici a barre sono le barre (senza etichette, assi, ecc.), Puoi seguire lo stesso approccio e scrivere la tua funzione. Ecco una versione rapida e sporca:

# 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 è per i valori che devono essere rappresentati dalle barre
  • xllce yllcspecifica la posizione dell'angolo inferiore sinistro della barra di sinistra in qualsiasi sistema di coordinate che stai utilizzando
  • barwidthe maxheightvengono utilizzati per ridimensionare le dimensioni delle barre

Ecco una demo con una sptrama di base. Non credo di aver lavorato plotrixprima, ma in base a come floating.piefunziona, suppongo che anche questo dovrebbe funzionare 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)

Il risultato è simile al seguente: mappa di esempio risultante dal codice sopra


Ricevo questo errore quando eseguo la linea di mapbar> mapbar (x = x1, xllc = -110, yllc = 40, barwidth = .5, maxheight = 5) Errore nelle mapbar (x = x1, xllc = -110, yllc = 40, larghezza di barra = 0,5, altezza massima = 5): impossibile trovare la funzione "mapbar"
324

Sembra che tu non abbia eseguito il codice nella prima parte della mia risposta. La funzione mapbarsè definita nel primo grande blocco di codice, dove si dice mapbars <- function (x, xllc = 0, .... Dovrai prima eseguire l'intera sezione del codice per "insegnare" al nuovo comando.
Dov'è il mio asciugamano il

-1

ggplot2 e ggvis sono due librerie che possono aiutarti a visualizzare i grafici sulla mappa. In ggplot2 puoi tracciare bolle sulla mappa e quindi devi solo dare aes () le coordinate che non hanno nulla a che fare con la dimensione e il colore della bolla. Per quanto riguarda il grafico a barre, è necessario assegnare almeno 2 coppie di xey, una per la posizione del grafico a barre e l'altra per l'altezza e la larghezza del grafico a barre. In altre parole, devi conoscere le coordinate di 4 angoli per una barra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.