пересечение линий на карте с сетками (ggplot) - PullRequest
0 голосов
/ 02 мая 2018

У меня были трудности с картой, которую я создал в R. Я пытаюсь создать карту с сеткой, где в каждом квадрате есть значение, соответствующее фрейму данных. Пока что я сделал шейп-файл и скрипт, следуя некоторым урокам и сообщениям отсюда ( Download ), но окончательный результат получился довольно странным.

library(xlsx)
library(ggplot2)
library(sp)
library(raster)
library(plyr)
library(dplyr)
library(tidyr)
library(sp)
library(raster)
library(rgeos)
library(rgbif)
library(viridis)
library(gridExtra)
library(rasterVis)
library(ggplot2)
library(maps)
library(rgdal)

br <- readOGR(choose.files(), "brgrid")
plot(br)
class(br)
str(br@data)
br@data$id <- rownames(br@data)
br.df <- fortify(br)
br.df <- join(br.df, br@data, by="id")
str(br.df)
tail(br.df)
names(br.df)
tail(br.df$id)

dados <- read.xlsx("ptsgrid.xlsx",6)
names(dados)

br.df <- merge(br.df, dados, by.x="id", by.y="id", all.x=T, a..ly=F)
str(br.df)

ggp <- ggplot(data=br.df, aes(x=long, y=lat, group=group)) 
ggp <- ggp + geom_polygon(aes(fill=value))         # draw polygons
ggp <- ggp + geom_path(color="grey", linestyle=1)  # draw boundaries
ggp <- ggp + coord_equal() 
ggp <- ggp + scale_fill_gradient(low = "#ffffcc", high = "#ff4444", 
                                 space = "Lab", na.value = "grey50",
                                 guide = "colourbar")
print(ggp)

image

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я скачал ваш набор данных. Я не проверял ваш код. Но я думаю, что когда вы создали br.df с использованием merge(), order испортилось. В вашем коде я говорю об этой строке (br.df<-merge(br.df, dados, by.x="id", by.y="id", all.x=T, a..ly=F). Вы можете проверить этот вопрос . Вы хотели объединить все наборы данных. Но ты не обязан это делать.

В вашем наборе данных, dados, у вас есть 148 точек данных. Но у вас есть 150 сеток в ваших картографических данных. Поэтому я изменил ваши данные EXCEL; Я добавил id = 0 и id = 149. Каждая точка данных имеет 0 и 495, соответственно. Пока существует общее имя столбца (в данном случае id), вы можете делать следующее. Я использовал geom_cartogram() в пакете ggalt. Второй geom_cartogram() добавляет цвета к сеткам.

library(rgdal)
library(ggplot2)
library(ggalt)
library(readxl)

# Create a map data
foo <- readOGR(dsn = "brgrid.shp")
mygrid <- fortify(foo)

# Import the EXCEL data
dados <- read_excel("ptsgrid.xlsx", sheet = 6)

ggplot() +
geom_cartogram(data = mygrid, map = mygrid, 
               aes(x = long, y = lat, map_id = id), 
               color = "black", alpha = 0.5) +
geom_cartogram(data = dados, map = mygrid, 
               aes(fill = value, map_id = id)) +
scale_fill_gradient(low = "#ffffcc", high = "#ff4444", 
                    space = "Lab", na.value = "grey50",
                    guide = "colourbar")

enter image description here

0 голосов
/ 02 мая 2018

Добро пожаловать в переполнение стека! Что вы сделали до сих пор / как выглядит ваш код? Я поделюсь с вами картой / кодом, который я сделал, и который функционирует так, как я планировал, чтобы вы могли заменить значения в моем коде тем, что вам нужно для ваших нужд / вашими данными. Ниже приведен код карты, которую я создал в R для получения дохода в Соединенные Штаты:

library(maps)
library(ggplot2)
usa=map_data("state")

ggplot(usa)+geom_polygon(aes(x=long,y=lat,group=group,fill=region),color="white")+coord_fixed(1.3)+guides(fill=FALSE,color=FALSE)

Результат приведенного выше кода: Result of code

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