Построение гистограммы на картах в R?

14

Я использую plotrixв Rпостроить карту государственного уровня США. Он имеет отличную функцию, floating.pieчтобы поставить круговые диаграммы в каждом штате.

Мне интересно, есть ли в plotrixпакете похожие функции для отображения гистограмм в каждом штате? (Я посмотрел на документацию и функции, которые имеют дело с гистограммами, похоже, не имеют такой возможности, но я просто хотел быть уверен.) Я предпочитаю работать в пакете plotrix, если это возможно, но не стесняйтесь называть другие пакеты.

Как пример, я был бы заинтересован в создании карты, подобной этой (но для США):

введите описание изображения здесь

Для моей карты США было бы 50 гистограмм, по одной на каждый штат.

Я получил эту карту с /programming/20465070/barplots-on-a-map , но похоже, что ggsubplot не работает с моей версией R (аналогично тому, что другие говорили в посте). ).

WWL
источник
2
Я также знал, как сделать это с ggsubplotпакетом, но теперь он устарел и не будет работать (как вы упомянули). Возможно, этот пост может послужить отправной точкой: stackoverflow.com/questions/36063043/…
Андре Сильва
Обратитесь к документации на plotrix, чтобы узнать, существуют ли такие функции. Тогда проконсультируйтесь с создателем plotrix.
Мокс

Ответы:

1

Я знаю, что опоздал с этим, но я думаю, что нашел довольно простое решение.

Если вы посмотрите на исходный код floating.pie()(например, позвонив getAnywhere(floating.pie)), вы заметите, что он использует очень простой, но эффективный подход: рисование круговых сегментов в виде многоугольников. Если все, что вам нужно из ваших гистограмм, это столбцы (без меток, осей и т. Д.), Вы можете следовать тому же подходу и написать свою собственную функцию. Вот быстрая и грязная версия:

# 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 для значений, представляемых столбцами
  • xllcи yllcукажите положение нижнего левого угла левой панели в любой системе координат, которую вы используете
  • barwidthи maxheightиспользуются для масштабирования размера баров

Вот демоверсия с базовым spсюжетом. Я не думаю, что я работал plotrixраньше, но исходя из того floating.pie, как работает, я бы предположил, что это также должно работать 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)

Результат выглядит так: пример карты, полученной из приведенного выше кода

Где мое полотенце
источник
Я получаю эту ошибку при запуске строки mapbars> mapbars (x = x1, xllc = -110, yllc = 40, barwidth = .5, maxheight = 5) Ошибка в mapbars (x = x1, xllc = -110, yllc = 40, barwidth = 0.5, maxheight = 5): не удалось найти функцию "mapbars"
324
Похоже, вы не запустили код в первой части моего ответа. Функция mapbarsопределена в первом большом блоке кода, где говорится mapbars <- function (x, xllc = 0, .... Сначала вам придется выполнить весь этот раздел кода, чтобы «обучить» R новой команде.
Где мое полотенце
-1

ggplot2 и ggvis - это две библиотеки, которые могут помочь вам отобразить графики на карте. В ggplot2 вы можете наносить пузырьки на карту, а затем вам просто нужно дать aes () координаты, которые не имеют ничего общего с размером и цветом пузыря. Что касается гистограммы, вам нужно назначить как минимум 2 пары x и y, одну для местоположения гистограммы, а другую для высоты и ширины гистограммы. Другими словами, вам нужно знать координаты 4 углов для стержня.

сварли
источник