Tracer des graphiques à barres sur des cartes en R?

14

J'utilise plotrixen Rtracer une carte du niveau de l' État des États - Unis. Il a une excellente fonction floating.piepour mettre des graphiques à secteurs sur chaque état.

Je me demande s'il y a des fonctions similaires dans le plotrixpackage pour afficher des graphiques à barres dans chaque état? (J'ai jeté un œil à la documentation et les fonctions qui traitent des graphiques à barres ne semblent pas avoir cette possibilité, mais je voulais juste en être sûr.) Je préfère travailler dans le package plotrix si possible, mais n'hésitez pas à nommer d'autres packages.

À titre d'exemple, je serais intéressé à produire une carte similaire à celle-ci (mais pour les États-Unis):

entrez la description de l'image ici

Pour ma carte des États-Unis, il y aurait 50 graphiques à barres, un pour chaque État.

J'ai obtenu cette carte sur /programming/20465070/barplots-on-a-map , mais il semble que ggsubplot ne fonctionne pas sur ma version de R (similaire à ce que d'autres ont dit sur le post ).

wwl
la source
2
Je savais également comment le faire avec le ggsubplotpackage, mais il est désormais obsolète et ne fonctionnera pas (comme vous l'avez mentionné). Peut-être que ce message peut être un point de départ: stackoverflow.com/questions/36063043/…
Andre Silva
Consultez la documentation sur plotrix pour voir si de telles fonctions existent. Consultez ensuite le créateur de plotrix.
Mox

Réponses:

1

Je sais que je suis vraiment en retard avec cela, mais je pense avoir trouvé une solution assez simple.

Si vous regardez le code source de floating.pie()(par exemple en appelant getAnywhere(floating.pie)), vous remarquerez qu'il utilise une approche très simple mais efficace: dessiner les segments de tarte sous forme de polygones. Si tout ce que vous voulez de vos graphiques à barres est les barres (pas d'étiquettes, d'axes, etc.), vous pouvez suivre la même approche et écrire votre propre fonction. Voici une version rapide et sale:

# 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 est pour que les valeurs soient représentées par les barres
  • xllcet yllcspécifiez la position du coin inférieur gauche de la barre de gauche dans le système de coordonnées que vous utilisez
  • barwidthet maxheightsont utilisés pour mettre à l'échelle la taille des barres

Voici une démo avec une spintrigue basique . Je ne pense pas avoir déjà travaillé avec plotrix, mais en fonction de la façon dont cela floating.piefonctionne, je suppose que cela devrait également fonctionner 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)

Le résultat ressemble à ceci: exemple de carte résultant du code ci-dessus

Où est ma serviette
la source
Je reçois cette erreur lorsque j'exécute la ligne mapbars> mapbars (x = x1, xllc = -110, yllc = 40, barwidth = .5, maxheight = 5) Erreur dans les mapbars (x = x1, xllc = -110, yllc = 40, barwidth = 0.5, maxheight = 5): impossible de trouver la fonction "mapbars"
324
On dirait que vous n'avez pas exécuté le code dans la première partie de ma réponse. La fonction mapbarsest définie dans le premier gros bloc de code, où est dit mapbars <- function (x, xllc = 0, .... Vous devrez d'abord exécuter cette section entière de code pour «enseigner» à R la nouvelle commande.
Où est ma serviette
-1

ggplot2 et ggvis sont deux bibliothèques qui peuvent vous aider à afficher les tracés sur la carte. Dans ggplot2, vous pouvez tracer des bulles sur la carte, puis il vous suffit de donner à aes () les coordonnées qui n'ont rien à voir avec la taille et la couleur de la bulle. En ce qui concerne le graphique à barres, vous devez affecter au moins 2 paires de x et y, une pour l'emplacement du graphique à barres et l'autre pour la hauteur et la largeur du graphique à barres. En d'autres termes, vous devez connaître les coordonnées des 4 coins d'une barre.

Swarley
la source