Складання графіків на картах у R?


14

Я використовую plotrixв Rпобудувати карту державного рівня США. Він має чудову функцію floating.pieдля розміщення кругових діаграм для кожного стану.

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

Як приклад, мені було б цікаво створити карту, подібну до цієї (але для США):

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

На моїй карті США було б 50 бальних діаграм, по одному для кожного штату.

Я отримав цю карту з /programming/20465070/barplots-on-a-map , але, схоже, ggsubplot не працює на моїй версії R (подібно до того, що інші говорили у публікації ).


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)

Результат виглядає приблизно так: Приклад карти, отриманої з наведеного вище коду


Я отримую цю помилку, коли запускаю рядок картографічних рядків> панелі карт (x = x1, xllc = -110, yllc = 40, barwidth = .5, maxheight = 5) Помилка в картографах (x = x1, xllc = -110, yllc = 40, barwidth = 0,5, maxheight = 5): не вдалося знайти функцію "картки"
324

Це здається, що ви не запустили код у першій частині моєї відповіді. Функція mapbarsвизначена в першому великому блоці коду, де йдеться mapbars <- function (x, xllc = 0, .... Вам доведеться спочатку виконати весь цей розділ коду, щоб "навчити" R новій команді.
Де мій рушник

-1

ggplot2 та ggvis - дві бібліотеки, які можуть допомогти вам відобразити графіки на карті. У ggplot2 ви можете накреслити бульбашки на карті, і тоді вам просто потрібно надати aes () координати, які не мають нічого спільного з розміром і кольором міхура. Щодо бар-діаграми, вам потрібно призначити принаймні 2 пари x і y, одну для розташування смугової діаграми, а другу для висоти та ширини гістограми. Іншими словами, вам потрібно знати координати 4 кутів для смуги.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.