как эффективно строить реки?

% c - спецификатор для символа, вы пытаетесь ввести строку, а не символ. См. документацию scanf . То, что вы хотите использовать, - это спецификатор% s для строки.

0
задан Lynx 13 July 2018 в 22:32
поделиться

2 ответа

Если вы регулярно работаете с шейп-файлами, geom_path и geom_polygon предоставляют все, что вам нужно. В последних версиях ggplot напрямую занимается пространственными объектами, поэтому нет необходимости использовать fortify и merge (возможно, этот шаг занимает больше времени в вашем коде). Вот пример использования шейп-файла федеративных единиц Бразилии из IBGE в качестве базовой карты:

shapeUFs <- readOGR('.', 'BRUFE250GC_SIR')
shapeHid <- readOGR('.', 'PrincipaisRiosDoBrasil') 

ggplot(shapeUFs, aes(long, lat, group = group)) +
  geom_polygon(fill = 'gray90', color = 'black') +
  geom_path(data = shapeHid, color = 'steelblue2') +
  coord_map() + theme_void()

Производительность будет зависит от размера ваших фигур (определяется количеством функций и уровнем деталей) больше, чем геометрия, которую вы используете в ggplot. Вы можете использовать rgeos :: gSimplify, чтобы уменьшить количество вершин в объекте пространственных полигонов / линий. Вы также можете отображать точки непосредственно над картой:

# Simplifying the geometry of the federative units
shapeUFs.s <- rgeos::gSimplify(shapeUFs, .05, TRUE)

# Storing map in an object
riversMap <- ggplot(shapeUFs.s, aes(long, lat)) +
  geom_polygon(aes(group = group), fill = 'gray90', color = 'black') +
  geom_path(data = shapeHid, aes(group = group), color = 'steelblue2') +
  coord_map() + theme_void()

# Sampling 20 cities in Brazil
brMunics <- read.csv('https://raw.githubusercontent.com/kelvins/Municipios-Brasileiros/master/Municipios_Brasileiros.csv')
Munics <- brMunics[sample(nrow(brMunics), 20), ]

# Plotting points over the map
riversMap + geom_point(data = Munics, aes(Longitude, Latitude), color = 'red')

# If your data already have the coordinates named 'lat' and 'long',
# you can skip aes(Longitude, Latitude):
names(Munics)[6:7] <- c('lat','long')
riversMap + geom_point(data = Munics, color = 'red')

2
ответ дан Carlos Eduardo Lagosta 17 August 2018 в 12:07
поделиться
  • 1
    когда я пытаюсь добавить некоторую геометрию, мне пришлось добавить столбец с именем group – Ferroao 14 July 2018 в 00:49
  • 2
    Это потому, что пространственные точки не используют группу, и я определил, что в глобальной эстетике упростить код. Попробуйте удалить group = group из первой строки и добавить aes(group = group) в geom_polygon и в geom_path. Или добавьте aes(group = NULL) в geom_point. Отправьте пример своих данных о точках, чтобы я мог обновить ответ. – Carlos Eduardo Lagosta 14 July 2018 в 01:23

Я бы сделал следующее:

library(sf)
library(ggplot2)

world_map <- map_data('world')
sdf <- read_sf("PrincipaisRiosDoBrasil.shp")

myMap3 <- ggplot() +
    geom_map(data = world_map, map = world_map, aes(map_id = region), color = 'black', fill = NA, linetype=2) +
    geom_sf(data = sdf)+
    theme(panel.border = element_rect(fill = NA, colour = "black"))+
    theme(axis.title=element_blank())+
    scale_y_continuous(limits=c(-15,6),expand=c(0,0))+
    scale_x_continuous(limits=c(-76,-55),expand=c(0,0))
myMap3

Вам нужно будет обновить ggplot2 до 3.0.0 для geom_sf.

1
ответ дан AndS. 17 August 2018 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: