% c - спецификатор для символа, вы пытаетесь ввести строку, а не символ. См. документацию scanf . То, что вы хотите использовать, - это спецификатор% s для строки.
Если вы регулярно работаете с шейп-файлами, 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')
Я бы сделал следующее:
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
.
group = group
из первой строки и добавитьaes(group = group)
в geom_polygon и в geom_path. Или добавьтеaes(group = NULL)
в geom_point. Отправьте пример своих данных о точках, чтобы я мог обновить ответ. – Carlos Eduardo Lagosta 14 July 2018 в 01:23