Использование изображения в качестве значка точки в ggmap
Я пытаюсь создать простой ggmap с несколькими школами. Я могу легко добраться до точки, где школы отображаются в виде точек на карте (код ниже). Но я хотел бы ввести изображение школьной иконы, чтобы использовать вместо точек.
Насколько я могу судить, annotation_custom не будет работать, потому что ему нужны декартовы координаты. Вставка должна работать, но это принесет образ для одной школы, а не для всех. Опять же, пытаясь изменить символ точки в изображение, а не просто добавить изображение.
Я подозреваю, что ответ лежит в grImport, subplot и, возможно, функции, чтобы говорить с geom_point. Но я в растерянности.
Это тип изображения, который будет хорошо работать в качестве значка: выпускной шляпу Викимедиа
Ответ на этот вопрос изображений для галочек в ggplot2 делает хорошую работу по добавлению изображений, но я хотел бы использовать изображение в качестве точечного символа и иметь возможность изменять цвет, размер и т. Д. На основе атрибутов.
# Load needed packages
# install.packages(c("rgdal", "rgeos", "maptools", "ggmap", "sp", "plyr", "XML", "grImport"))
library(rgdal)
library(rgeos)
library(maptools)
library(ggmap)
library(sp)
library(plyr)
library(XML)
library(grImport)
# Define a value for the Seattle Public Schools (SPS) url:
SPSurl <- "http://www.seattleschools.org/modules/cms/pages.phtml? pageid=197023&sessionid=95b8499fc128fde5d7e1335751c73fee&t"
# All of the addresses for SPS, multiple tables:
SPSaddresses <- readHTMLTable(SPSurl)
# Just elementary schools
SPSelementary <- readHTMLTable(SPSurl, which=3, header=T)
# Just keep the names of the schools and addresses
SPSelementary <- SPSelementary[,c(1,3)]
# Change the address column name
colnames(SPSelementary)[2] <- "address"
# Convert all to character
SPSelementary <-
data.frame(lapply(SPSelementary,
as.character),
stringsAsFactors=FALSE)
# get rid of the phone numbers in the address
SPSelementary$address <- substr(SPSelementary$address,
1,
nchar(SPSelementary$address)-14)
# get rid of extra space at end of line
SPSelementary$address <- sub("[[:blank:]]+$",
"",
SPSelementary$address)
# get the longitude and latitude of the school addresses
SPSelementary_lonlat <- geocode(SPSelementary$address)
# combine addresses with longitude and latitude data
SPSelementary$id <- rownames(SPSelementary)
SPSelementary_lonlat$id <- rownames(SPSelementary_lonlat)
SPSelementary_ll <- merge(SPSelementary,
SPSelementary_lonlat,
by="id")
# Get a map of the area around the McDonald school
McDonald_map <- get_map("144 NE 54th Street Seattle WA 98105",
zoom=15,
maptype='roadmap')
McDonald_map_plot <-
ggmap(McDonald_map)
McDonald_map_plot
# Add the schools
McDonald_map_plot <- McDonald_map_plot +
geom_point(data=SPSelementary_ll,
mapping=aes(x=lon,
y=lat),
shape = 17, ### This be a triangle, want to change to school.
size = 4,
alpha=.75)
McDonald_map_plot
2 ответа
Основываясь на ответе hrbrmstr выше, вот полный фрагмент кода, который производит символ, очень похожий на ваш пример SVG. Он использует шрифт Symbola, который содержит ряд ориентированных на карту символов. Установите его отсюда: http://zhm.github.io/symbola/
Важно, что вы захотите установить версию шрифта TTF, а не версию OTF, если только вы не загрузите версию пакета extrafonts для devtools. Будущие исследователи этой страницы могут захотеть перепроверить, что OTF не поддерживается в дополнительных шрифтах, так как я уверен, что OTF - это будущее.
Вот полная рабочая версия того, что описывает hrbrmstr:
# Load needed packages
# install.packages(c("rgdal", "rgeos", "maptools", "ggmap", "sp", "plyr", "XML", "rgdal", "grImport"))
library(rgdal)
library(rgeos)
library(maptools)
library(ggmap)
library(sp)
library(plyr)
library(XML)
library(extrafont)
font_import(pattern="Symbola", prompt=FALSE)
# Define a value for the Seattle Public Schools (SPS) url:
SPSurl <- "http://www.seattleschools.org/modules/cms/pages.phtml?pageid=197023&sessionid=95b8499fc128fde5d7e1335751c73fee&t"
# All of the addresses for SPS, multiple tables:
SPSaddresses <- readHTMLTable(SPSurl, header=T)
# Just elementary schools
SPSelementary <- readHTMLTable(SPSurl, which=3)
# Just keep the names of the schools and addresses
SPSelementary <- SPSelementary[,c(1,3)]
# Change the address column name
colnames(SPSelementary)[2] <- "address"
# Convert all to character
SPSelementary <-
data.frame(lapply(SPSelementary,
as.character),
stringsAsFactors=FALSE)
# get rid of the phone numbers in the address
SPSelementary$address <- substr(SPSelementary$address,
1,
nchar(SPSelementary$address)-14)
# get rid of extra space at end of line
SPSelementary$address <- sub("[[:blank:]]+$",
"",
SPSelementary$address)
# get the longitude and latitude of the school addresses
SPSelementary_lonlat <- geocode(SPSelementary$address)
# combine addresses with longitude and latitude data
SPSelementary$id <- rownames(SPSelementary)
SPSelementary_lonlat$id <- rownames(SPSelementary_lonlat)
SPSelementary_ll <- merge(SPSelementary,
SPSelementary_lonlat,
by="id")
SPSelementary_ll$marker <- "⅔"
# Get a map of the area around the McDonald school
McDonald_map <- get_map("144 NE 54th Street Seattle WA 98105",
zoom=15,
maptype='roadmap')
McDonald_map_plot <-
ggmap(McDonald_map)
McDonald_map_plot <- McDonald_map_plot +
geom_text(data=SPSelementary_ll,
mapping=aes(x=lon,
y=lat, label=marker, family="Symbola"),
size = 16)
McDonald_map_plot
Я, вероятно, должен добавить отказ от ответственности, что это может быть чем-то вроде хакерского, общего решения для такого рода проблем. Теоретически вы можете добавить символы svg к собственному шрифту, как описано в документации по символам: https://github.com/zhm/symbola/blob/master/README.md
Если вы выполните инструкции здесь - https://github.com/wch/extrafont - для импорта шрифтов, вы можете попытаться найти хороший символьный шрифт со школой (и кодированный правильно). Тогда вы можете сделать что-то вроде этого:
# add a market object that is the proper
# symbol location in the font family
SPSelementary_ll$marker <- "A"
# Use geom_text() vs geom_point()
# you may (will?) need to do some tweaks to the position of the symbol
McDonald_map_plot <- McDonald_map_plot +
geom_text(data=SPSelementary_ll,
mapping=aes(x=lon,
y=lat, label=marker, family="Wingdings-Regular", fontface="plain"),
size = 10,
alpha=.75)
Это не идеально, но довольно гибко. Я почти уверен, что есть "grob
способ делать то, что вы хотите, но это может помочь, пока один из действительно удивительным ggplot
У пользователей SO есть шанс добавить это решение.