Сравнить города по районам в ggplot2 на карте - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно сравнить города Украины по площади в ggplot2.Но все они построены в одном размере.

Можете ли вы мне помочь?

Я использую этот код:

library(ggplot2)

cities <- read.csv("https://raw.githubusercontent.com/savchukidze/maps/master/cities.csv", stringsAsFactors = F)


png("compare_cities.png", height = 3000, width = 2500)

ggplot()+

   geom_polygon(data = cities, aes(long, lat, group = group), 
                color = "black", size = 2.5, fill = "grey", alpha = 1)+
   facet_wrap(~city, scales = "free")

dev.off()

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Это немного грязно, но вы могли бы сделать что-то вроде этого, чтобы построить невидимые точки на максимальной дальности для каждого города, чтобы сохранить шкалы одинаковыми ...

library(tidyverse)
ranges <- cities %>% 
  group_by(city) %>% 
  summarise(minlat=min(lat),              #get limits for each city
            maxlat=max(lat),
            minlon=min(long),
            maxlon=max(long)) %>% 
  mutate(rangelat=maxlat-minlat,          #calculate range required for each
         rangelon=maxlon-minlon,
         centrelat=(maxlat+minlat)/2,     #calculate centre point of plot
         centrelon=(maxlon+minlon)/2) %>% 
  ungroup() %>% 
  mutate(bottom=centrelat-max(rangelat)/2,#calculate box size based on max range
         top=centrelat+max(rangelat)/2,
         left=centrelon-max(rangelon)/2,
         right=centrelon+max(rangelon)/2)

ggplot()+
  geom_polygon(data = cities, aes(long, lat, group = group), 
               color = "black", size = 2.5, fill = "grey", alpha = 1)+
  geom_point(data=ranges, aes(x=left,y=bottom), alpha=0)+ #invisible bottom left point
  geom_point(data=ranges, aes(x=right,y=top),alpha=0)+    #invisible top right point
  facet_wrap(~city,scales = "free")

enter image description here

0 голосов
/ 19 декабря 2018

Это немного сложно, потому что вам нужно, чтобы на каждой панели было «свободное» пространство, но вы не можете объединить это с coord_fixed.

Вам нужно будет разместить их все на шкале координат.

library(tidyverse)
cities %>% 
    group_by(city) %>% 
    mutate(long=long-mean(long), lat=lat-mean(lat)) %>% 
    ggplot(aes(long, lat, group=city)) + 
        geom_polygon() + 
        facet_wrap(~city)

Example1

...