отображение от ggplot2 geom_polygon сходит с ума после слияния данных

Я пытаюсь сделать сетку, содержащую карты мегарегионов в США. Я создаю SpatialPolygonDataframe из файла формы. затем преобразуйте его в data.frame, чтобы использовать ggplot2. как только я добавляю данные во фрейм, полигон строится. файл, содержащий SpatialPolygon и фрейм данных, находятся здесь: https://drive.google.com/open?id=1kGPZ3CENJbHva0s558vWU24-erbqWUGo код выглядит следующим образом:

load("./data.rda")
prop.test <- proptest.result[which(proptest.result$variable=="Upward N"),]

#transforming the data
# add to data a new column termed "id" composed of the rownames of data
shape@data$id <- rownames(shape@data)
#add data to our 
shape@data <- data.frame(merge(x = shape@data, y = prop.test, by.x='Name', by.y="megaregion"))

# create a data.frame from our spatial object
mega.prop <- fortify(shape)
#merge the "fortified" data with the data from our spatial object
mega.prop.test <- merge(mega.prop, shape@data, by="id")

Построение первого (mega.prop) отлично работает:

ggplot(data = mega.prop, aes(x=long, y=lat, group=group), fill="blue")+
    geom_polygon()

график до добавления информационного фрейма данных

но построение графика после добавления данных аналитики:

ggplot(data = mega.prop.test, aes(x=long, y=lat, group=group), fill="blue")+
    geom_polygon()

График после добавления аналитических данных

В новом сюжете:

  • Неправильно заполнение полигонов. (Это о порядке начисления очков? Как?)
  • два полигона полностью пропущены.

В чем проблема? Большое спасибо за Вашу помощь.


person BobbyF    schedule 26.01.2018    source источник
comment
базовая версия merge нарушает порядок точек. Вместо этого используйте data.table::merge или dplyr::left_join. (Или сначала добавьте столбец заказа, а потом отсортируйте по нему.)   -  person Gregor Thomas    schedule 27.01.2018


Ответы (1)


Используйте geom_map() (что по какой-то причине требует небольшой настройки вашего шейп-файла), чтобы не выполнять слияние / левое соединение.

Кроме того, вы объединили множество различных факторов, не зная, какие из них хотите нанести на график.

Наконец, маловероятно, что прибрежные районы нуждаются в таком высоком уровне детализации. rgeos::gSimplify() определенно ускорит процесс, и вы уже искажаете области, поэтому небольшое дополнительное искажение не повлияет на результаты.

library(ggplot2)
library(tidyverse)

shape_map <- tbl_df(fortify(shape, region="Name"))
colnames(shape_map) <- c("long", "lat", "order", "hole", "piece", "region", "group")

prop.test <- proptest.result[which(proptest.result$variable=="Upward N"),]

ggplot() +
  geom_map(data=shape_map, map=shape_map, aes(long, lat, map_id=region)) +
  geom_map(
    data=filter(prop.test, season=="DJF"),
    map=shape_map, aes(fill=prop.mega, map_id=megaregion)
  )

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

person hrbrmstr    schedule 26.01.2018
comment
Большое тебе спасибо. Это было большим подспорьем и полностью решило эту проблему. У меня все еще есть одна проблема, которую я просто поставил в этот вопрос;. Буду очень признателен, если вы тоже сможете взглянуть на это. Большое вам спасибо, агиан. - person BobbyF; 27.01.2018