2013-05-05 12 views
17

मैं अलग डेटा फ्रेम से डेटा का उपयोग कर ggplot2 में एक नक्शा बनाने की कोशिश कर रहा हूं।ggplot2 में, मैं अतिरिक्त किंवदंती कैसे जोड़ सकता हूं?

library(maptools) 

xx <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66")) 

xx.sub1 <- subset(xx, xx$FIPSNO < 37010) 
xx.sub2 <- subset(xx, xx$FIPSNO > 37010) 

[email protected]$id <- rownames([email protected]) 
xx.sub1.points <- fortify(xx.sub1, region="id") 
xx.sub1.df = join(xx.sub1.points, [email protected], by="id") 

[email protected]$id <- rownames([email protected]) 
xx.sub2.points <- fortify(xx.sub2, region="id") 
xx.sub2.df = join(xx.sub2.points, [email protected], by="id") 

ggplot(xx.sub2.df) + 
    aes(long, lat, fill = (SID79/BIR79)*1000, group = group) + 
    geom_polygon() + geom_path(color="grey80") + 
    coord_equal() + 
    scale_fill_gradientn(colours = brewer.pal(7, "YlOrBr")) + 
    geom_polygon(data = xx.sub1.df, fill = "grey50") + 
    geom_path(data = xx.sub1.df, color="grey80") + 
    labs(fill = "Mapped value", title = "Title") 
इस बिंदु सब कुछ उम्मीद के रूप में काम करता है और मैं एक अच्छा नक्शा प्राप्त करने के लिए ऊपर

:

enter image description here

मैं तथापि बदलने के लिए क्या करना चाहते हैं xx.sub1.df से डेटा के लिए अलग कथा को जोड़ने के लिए है - के बाद से सभी बहुभुज सिर्फ भूरे रंग से भरे हुए हैं, मुझे उम्मीद है कि यह एक अतिरिक्त प्रविष्टि होगी।

मैं इसे कैसे प्राप्त कर सकता हूं?

+3

पुनरुत्पादित उदाहरण (http://tinyurl.com/reproducible-000) कृपया? इस समस्या को हल करने का वैचारिक तरीका डेटा सेट को मर्ज करना है, जिसमें कारक वैरिएबल शामिल है, यह पहचानने के लिए कि प्रत्येक डेटा सेट किस मूल डेटा फ्रेम से आया है, फिर एक सौंदर्य (अपने मामले में भरने के लिए, मुझे लगता है) का उपयोग करें ... आप देख सकते हैं यह देखने के लिए 'स्केल' पैकेज है कि –

+0

@BenBolker रोजर एक और तरीका है या नहीं। उदाहरण जोड़ा गया। मुझे पता है कि एक डीएफ में सबकुछ रखना आसान होगा। हालांकि, मैं अक्सर डेटा की विभिन्न परतों के साथ काम करता हूं (जीआईएस पृष्ठभूमि से आने की मेरी पूर्वाग्रह हो सकती है) जो गर्दन में शामिल होने के लिए दर्द होगा। और इस विशेष उदाहरण में मुझे कुछ बहुभुजों और 'हाइलाइट' या 'मास्क' को त्वरित तरीके से चुनने की आवश्यकता है। – radek

+0

क्या आप कृपया अपने डेटा का 'ड्यूटी' जोड़ सकते हैं, ताकि कोई आपके अपडेट को अपडेट किए गए हीटमैप के साथ उत्तर दे सके? मैं अनुमान लगा रहा हूं कि: (1) आप 'xx.sub2' के केवल 2 कॉलम का उपयोग करते हैं, (2) राज्य ग्रे दिखाई देते हैं यदि वे 'xx.sub1' में मौजूद हैं। इसलिए शामिल होने से यह परेशान नहीं लगता है। आप 'xx.sub1' में मौजूद प्रविष्टियों के लिए 'xx.sub2' में बस एक कारक जोड़ सकते हैं, और शायद पौराणिक कथाओं में रंगों को समायोजित करने के लिए' scale_fill_manual' का उपयोग करें। –

उत्तर

23

मुझे 100% यकीन नहीं है कि यह वही है जो आप चाहते हैं, लेकिन यहां मैं समस्या को समझने के तरीके से कैसे संपर्क करूंगा। अगर हम xx.sub1.df से किसी भी डेटा के साथ कुछ अप्रयुक्त geom को मानचित्र करते हैं, लेकिन इसे साजिश पर अदृश्य बनाते हैं, तो हम अभी भी geom के लिए एक किंवदंती प्राप्त कर सकते हैं। यहां मैंने geom_point का उपयोग किया है, लेकिन आप इसे दूसरों को बना सकते हैं।

p <- ggplot(xx.sub2.df) + 
    aes(long, lat, fill = (SID79/BIR79)*1000, group = group) + 
    geom_polygon() + geom_path(color="grey80") + 
    coord_equal() + 
    scale_fill_gradientn(colours = brewer.pal(7, "YlOrBr")) + 
    geom_polygon(data = xx.sub1.df, fill = "grey50") + 
    geom_path(data = xx.sub1.df, color="grey80") + 
    labs(fill = "Mapped value", title = "Title") 

#Now we add geom_point() setting shape as NA, but the colour as "grey50", so the 
#legend will be displaying the right colour 

p2 <- p + geom_point(data = xx.sub1.df, aes(size="xx.sub1", shape = NA), colour = "grey50") 

enter image description here

अब हम सिर्फ आकार और कथा पर बिंदु के आकार को बदलने के लिए, और कथा का नाम बदलने (जो इस earlier प्रदर्शन किया @DizisElferts करने के लिए धन्यवाद) की जरूरत है।

p2 + guides(size=guide_legend("Source", override.aes=list(shape=15, size = 10))) 

enter image description here

बेशक आप जिस तरह से लेबल काम करते हैं या जो कुछ भी उजागर करने के लिए आप क्या दिखाना चाहते हैं बदल सकते हैं।

यदि यह नहीं है, तो आप मुझे बताएं!

+0

यह अच्छा है! मुझे लगता है कि वे एक नया सौंदर्य (यहां 'geom_point') जोड़ने से कोई अन्य कामकाज नहीं थे जिसके लिए एक किंवदंती जोड़ा जा सकता है। मुझे 'आकार = एनए 'के बारे में पता नहीं था, इसलिए यह वास्तव में उपयोगी है। –

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