ggmap

2014-04-27 30 views
6

में बिंदु आइकन के रूप में एक छवि का उपयोग करके मैं कई स्कूलों के साथ एक सरल ggmap बनाने की कोशिश कर रहा हूं। मैं आसानी से उस बिंदु तक पहुंच सकता हूं जहां स्कूल मानचित्र पर बिंदु (नीचे कोड) के रूप में दिखाई देता है। लेकिन, मैं अंक के बजाय उपयोग करने के लिए एक स्कूल आइकन की एक छवि लाने के लिए चाहता हूँ।ggmap

जहां तक ​​मैं कह सकता हूं, annotation_custom काम नहीं करेगा क्योंकि इसे कार्टेशियन निर्देशांक की आवश्यकता है। इन्सेट काम करना चाहिए, लेकिन यह एक स्कूल के लिए छवि लाएगा, उन सभी में से नहीं। फिर, बिंदु चरित्र को एक छवि में बदलने की कोशिश कर रहा है, न कि केवल एक छवि जोड़ें।

मुझे संदेह है कि उत्तर grimport, subplot और शायद geom_point से बात करने के लिए एक फ़ंक्शन के साथ है। लेकिन, मैं एक नुकसान में हूँ।

इस छवि के प्रकार है कि एक प्रतीक के रूप में अच्छी तरह से काम करेगा है: wikimedia graduation hat

इस सवाल का जवाब images for tick marks in 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 

उत्तर

3

आप यहाँ अनुदेश का पालन करें - 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) 

enter image description here

यह आदर्श नहीं है, लेकिन यह बहुत सुविधाजनक है। मुझे लगता है कि आप जो चाहते हैं उसे करने के लिए "grob" तरीका है, लेकिन यह तब तक मदद कर सकता है जब तक कि SO पर वास्तव में अद्भुत ggplot ers में से कोई भी उस समाधान को जोड़ने का मौका न दे।

+2

आपने मुझे इस दृष्टिकोण पर पंच पर हराया। चूंकि ओपी नक्शा प्रतीकों की तलाश में है, मैं सुझाव देता हूं कि [सिंबोला फ़ॉन्ट] (http://zhm.github.io/symbola/) देखें जिसमें कई भौगोलिक मार्कर शामिल हैं, जिनमें मोर्टारबोर्ड भी शामिल है, उदाहरण के विपरीत नहीं। वर्तमान में इसे अतिरिक्त के साथ आयात करने के लिए लड़ने के साथ लड़ रहे हैं। ध्यान देने योग्य बात यह है कि, अतिरिक्त के साथ, आप शायद डाउनलोड किए गए फ़ॉन्ट्स के ओटीएफ संस्करण की बजाय टीटीएफ संस्करण चाहते हैं। Symbola फ़ॉन्ट के लिए – Peter

+0

+1। निश्चित रूप से इसे मेरे संग्रह में जोड़ना। – hrbrmstr

5

ऊपर hrbrmstr के उत्तर के आधार पर, यहां कोड का एक पूरा बिट है जो आपके उदाहरण एसवीजी के समान प्रतीक बनाता है। यह सिम्बोला फ़ॉन्ट का उपयोग करता है, जिसमें कई नक्शा उन्मुख प्रतीक होते हैं। इसे यहाँ से स्थापित करें: http://zhm.github.io/symbola/

महत्वपूर्ण बात, आप जब तक आप डाउनलोड extrafonts पैकेज के DevTools संस्करण बल्कि OTF संस्करण की तुलना में फ़ॉन्ट का टीटीएफ संस्करण को स्थापित करने के लिए, चाहता हूँ। इस पृष्ठ के भविष्य के खोजकर्ता दोबारा जांच कर सकते हैं कि ओटीएफ अतिरिक्त फ़ॉन्ट्स में समर्थित नहीं है, क्योंकि मुझे विश्वास है कि ओटीएफ भविष्य है।

# 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 

Map with mortarboard symbol

मैं शायद त्याग है कि इस इस तरह की समस्या के लिए एक hacky, सामान्य समाधान के बारे में कुछ हो सकता है जोड़ना चाहिए:

यहाँ hrbrmstr क्या वर्णन करता है की एक पूरी काम कर संस्करण है । सिद्धांत रूप में, symbola प्रलेखन में वर्णित अनुसार कस्टम फ़ॉन्ट में svg प्रतीकों को जोड़ सकते हैं: https://github.com/zhm/symbola/blob/master/README.md

संबंधित मुद्दे