Traçando gráficos de barras em mapas em R?


14

Eu estou usando plotrixem Rtraçar um mapa do nível estado dos EUA. Tem uma excelente função floating.piepara colocar gráficos de pizza em cada estado.

Gostaria de saber se existem funções semelhantes dentro do plotrixpacote para exibir gráficos de barras em cada estado? (Examinei a documentação e as funções que lidam com gráficos de barras não parecem ter essa possibilidade, mas eu só queria ter certeza.) Prefiro trabalhar no pacote plotrix, se possível, mas fique à vontade para citar outros pacotes.

Como exemplo, eu estaria interessado em produzir um mapa semelhante a este (mas para os EUA):

insira a descrição da imagem aqui

Para o meu mapa dos EUA, haveria 50 gráficos de barras, um para cada estado.

Eu obtive este mapa em /programming/20465070/barplots-on-a-map , mas parece que o ggsubplot não funciona na minha versão do R (semelhante ao que outros têm dito na publicação )


2
Eu também sabia como fazer isso com o ggsubplotpacote, mas agora está obsoleto e não funcionará (como você mencionou). Talvez este post possa ser um ponto de partida: stackoverflow.com/questions/36063043/…
Andre Silva

Consulte a documentação do plotrix para verificar se essas funções existem. Em seguida, consulte o criador do plotrix.
Mox

Respostas:


1

Sei que estou muito atrasado com isso, mas acho que encontrei uma solução bastante simples.

Se você olhar o código-fonte de floating.pie()(por exemplo, chamando getAnywhere(floating.pie)), notará que ele usa uma abordagem muito simples, porém eficaz: desenhar os segmentos de pizza como polígonos. Se tudo o que você deseja dos seus gráficos de barras são as barras (sem rótulos, eixos etc.), você pode seguir a mesma abordagem e escrever sua própria função. Aqui está uma versão rápida e suja:

# 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 é para os valores serem representados pelas barras
  • xllce yllcespecifique a posição do canto inferior esquerdo da barra esquerda em qualquer sistema de coordenadas que você esteja usando
  • barwidthe maxheightsão usados ​​para dimensionar o tamanho das barras

Aqui está uma demonstração com um spenredo básico . Acho que não trabalhei plotrixantes, mas com base em como floating.piefunciona, eu diria que isso também deve 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)

O resultado fica assim: exemplo de mapa resultante do código acima


-1

ggplot2 e ggvis são duas bibliotecas que podem ajudá-lo a exibir os gráficos no mapa. No ggplot2, você pode plotar bolhas no mapa e, em seguida, basta fornecer aes () as coordenadas que nada têm a ver com o tamanho e a cor da bolha. Em relação ao gráfico de barras, é necessário atribuir pelo menos 2 pares de x e y, um para a localização do gráfico de barras e o outro para a altura e largura do gráfico de barras. Em outras palavras, você precisa conhecer as coordenadas dos 4 cantos de uma barra.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.