Trazar gráficos de barras en mapas en R?

14

Estoy usando plotrixen Rtrazar un mapa a nivel estatal de los EE.UU.. Tiene una función excelente floating.piepara colocar gráficos circulares en cada estado.

Me pregunto si hay funciones similares dentro del plotrixpaquete para mostrar gráficos de barras en cada estado. (Eché un vistazo a la documentación y las funciones que se ocupan de los gráficos de barras no parecen tener esta posibilidad, pero solo quería estar seguro.) Prefiero trabajar dentro del paquete plotrix si es posible, pero siéntase libre de nombrar Otros paquetes.

Como ejemplo, me interesaría producir un mapa similar a este (pero para los EE. UU.):

ingrese la descripción de la imagen aquí

Para mi mapa de EE. UU., Habría 50 gráficos de barras, uno para cada estado.

Obtuve este mapa de /programming/20465070/barplots-on-a-map , pero parece que ggsubplot no funciona en mi versión de R (similar a lo que otros han estado diciendo en la publicación )

wwl
fuente
2
También sabía cómo hacerlo con el ggsubplotpaquete, pero ahora está en desuso y no funcionará (como mencionaste). Quizás esta publicación pueda ser un punto de partida: stackoverflow.com/questions/36063043/…
Andre Silva
Consulte la documentación en plotrix, para ver si existen tales funciones. Luego consulta al creador de plotrix.
Mox

Respuestas:

1

Sé que realmente llego tarde con esto, pero creo que he encontrado una solución bastante simple.

Si observa el código fuente de floating.pie()(por ejemplo, llamando getAnywhere(floating.pie)), notará que utiliza un enfoque muy simple pero efectivo: dibujar los segmentos circulares como polígonos. Si todo lo que desea de sus gráficos de barras son las barras (sin etiquetas, ejes, etc.), puede seguir el mismo enfoque y escribir su propia función. Aquí hay una versión rápida y sucia:

# 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 es para que los valores sean representados por las barras
  • xllcy yllcespecifique la posición de la esquina inferior izquierda de la barra izquierda en cualquier sistema de coordenadas que esté utilizando
  • barwidthy maxheightse usan para escalar el tamaño de las barras

Aquí hay una demostración con una sptrama básica . No creo que haya trabajado plotrixantes, pero en función de cómo floating.piefunciona, asumiría que esto también debería funcionar 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)

El resultado se ve así: ejemplo de mapa resultante del código anterior

Donde esta mi toalla
fuente
Recibo este error cuando ejecuto la línea mapbars> mapbars (x = x1, xllc = -110, yllc = 40, barwidth = .5, maxheight = 5) Error en mapbars (x = x1, xllc = -110, yllc = 40, ancho de barra = 0.5, maxheight = 5): no se pudo encontrar la función "mapbars"
324
Parece que no ejecutó el código en la primera parte de mi respuesta. La función mapbarsse define en el primer gran bloque de código, donde se dice mapbars <- function (x, xllc = 0, .... Deberá ejecutar primero toda esa sección de código para "enseñar" a R el nuevo comando.
¿Dónde está mi toalla
-1

ggplot2 y ggvis son dos bibliotecas que pueden ayudarlo a mostrar las parcelas en el mapa. En ggplot2 puede trazar burbujas en el mapa y luego solo necesita dar aes () las coordenadas que no tienen nada que ver con el tamaño y el color de la burbuja. Con respecto al gráfico de barras, debe asignar al menos 2 pares de x e y, uno para la ubicación del gráfico de barras y el otro para la altura y el ancho del gráfico de barras. En otras palabras, necesitas conocer las coordenadas de 4 esquinas para una barra.

Swarley
fuente