тепловая карта на карте США с использованием R - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь составить тепловую карту над картой США. Код создает карту США, но не отображает на ней никаких данных. Ни это не дает никакой ошибки! Я новичок в R, поэтому любая подсказка / идея была бы отличной.

df <- structure(list(X = c(3L, 2L, 6L, 1L, 4L, 4L, 4L, 4L, 1L, 2L, 
5L, 3L, 0L, 4L, 4L, 3L, 3L, 4L, 2L, 4L, 3L, 4L, 4L, 5L, 3L, 4L, 
4L, 2L, 3L, 5L, 2L, 2L, 0L, 1L, 0L, 3L, 4L, 2L, 3L, 0L, 0L, 1L, 
3L, 3L, 1L, 2L, 0L, 0L, 3L, 4L, 3L, 4L, 4L, 3L, 2L, 0L, 2L, 4L, 
3L, 4L), Y = c(3L, 9L, 7L, 6L, 3L, 7L, 7L, 3L, 6L, 5L, 3L, 10L, 
3L, 3L, 4L, 4L, 4L, 3L, 5L, 5L, 4L, 5L, 4L, 4L, 4L, 5L, 6L, 5L, 
4L, 4L, 4L, 2L, 2L, 0L, 2L, 4L, 2L, 4L, 4L, 3L, 3L, 4L, 7L, 7L, 
2L, 3L, 2L, 4L, 3L, 4L, 3L, 3L, 7L, 3L, 4L, 3L, 3L, 3L, 3L, 3L
), Z = c(35L, 31L, 31L, 32L, 35L, 34L, 32L, 36L, 33L, 37L, 32L, 
30L, 39L, 35L, 33L, 35L, 35L, 0L, 35L, 30L, 35L, 33L, 31L, 33L, 
35L, 33L, 35L, 35L, 35L, 34L, 36L, 38L, 42L, 43L, 36L, 37L, 36L, 
39L, 35L, 38L, 40L, 39L, 33L, 33L, 41L, 38L, 38L, 41L, 39L, 35L, 
35L, 35L, 34L, 39L, 39L, 39L, 38L, 35L, 39L, 35L), type = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("BF", 
"DE", "TS", "ZN"), class = "factor"), lat = c(40.77486, 33.72621, 
30.38654, 39.21092, 42.56396, 35.25653, 38.98737, 39.17866, 41.42014, 
38.8756, 39.98261, 32.73808, 39.36327, 42.31465, 42.95051, 38.18899, 
26.05433, 43.00417, 45.21794, 36.13051, 30.00133, 40.7747, 35.48284, 
41.32453, 28.45942, 39.94898, 33.27457, 40.43147, 45.63667, 41.81694, 
32.73808, 39.36327, 42.31465, 42.95051, 35.9996, 34.83323, 41.76574, 
29.53539, 39.80981, 30.34521, 39.09211, 35.95858, 35.92756, 33.78383, 
38.18899, 36.13051, 30.00133, 40.7747, 35.48284, 41.32453, 28.45942, 
39.94898, 33.27457, 40.43147, 45.63667, 41.81694, 35.84396, 37.52477, 
34.03407, 38.60411), long = c(-75.94306, -85.44905, -97.78677, 
-77.6507, -72.23171, -81.42082, -101.89982, -84.7458, -82.23518, 
-104.89844, -83.27101, -98.0848, -106.07907, -83.24842, -85.86264, 
-85.81685, -80.99071, -88.04002, -94.50328, -87.32164, -90.19677, 
-74.68918, -97.61928, -96.59226, -81.96995, -75.87195, -112.45182, 
-80.05054, -123.21019, -71.45619, -98.0848, -106.07907, -83.24842, 
-85.86264, -80.0537, -82.39784, -72.7151, -96.11084, -86.41153, 
-81.82319, -94.8559, -83.99512, -115.53027, -119.30347, -85.81685, 
-87.32164, -90.19677, -74.68918, -97.61928, -96.59226, -81.96995, 
-75.87195, -112.45182, -80.05054, -123.21019, -71.45619, -78.78513, 
-77.5633, -117.63895, -121.41828)), class = "data.frame", row.names = c(NA, 
-60L))

Я пытаюсь получить что-то вроде следующего изображения (без текста на карте) для X, Y and Z отдельно для каждого type (say, DE, TS, etc.). Код, который я пробовал, выглядит следующим образом: -

library(ggplot2)
library(maps)

ggplot() + 
  geom_polygon(data=states, aes(x=long, y=lat, group=group), color="blue", fill="white")+
  geom_tile(data=df, aes(x=long, y=lat, fill = Y), alpha=0.3)+
  scale_fill_gradient(low = "blue", high = "red")

1]

1 Ответ

0 голосов
/ 01 февраля 2020

Я не смог запустить приведенный вами пример, ошибка была:

object 'states' not found

Однако я мог запустить эту слегка адаптированную версию вашего кода:

states <- map_data("state")
ggplot(data = states) +
    geom_polygon(aes(x = long, y = lat, group = group), color = "white") + 
    geom_point(data=df, aes(x=long, y=lat, color = Y), alpha=0.3)+
    scale_fill_gradient(low = "blue", high = "red")

Там Есть два отличия:

  1. Я использую ggplot2 :: map_data ("state") (см. ошибку выше)
  2. Используется ли geom_point () вместо geom_tile (). Я не понимаю, как вы могли бы применить geom_tile () к данным, предоставленным 'df', поскольку вы не рисуете на регулярно расположенном «наборе плиток». geom_polygon (), вероятно, будет более подходящим, но у вас есть наблюдения в одной точке, то есть одно значение 'lat' и 'long' на значение Y, поэтому я понятия не имею, как сделать с этими данными то, что вы хотите сделать ...

Из документации geom_tile ():

geom_rect и geom_tile делают одно и то же, но параметризуются по-разному: geom_rect использует расположение четырех углов (xmin, xmax, ymin и ymax), в то время как geom_tile использует центр плитки и ее размер (x, y, ширина, высота). geom_raster - это особый высокопроизводительный случай, когда все плитки имеют одинаковый размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...