मैंने बेस-आर का उपयोग करके काफी कुछ मानचित्र बनाए हैं, लेकिन अब मैं ggplot2 का उपयोग करके समान कार्य करने की कोशिश कर रहा हूं, जिससे आसानी से एक ही पृष्ठ पर कई भूखंडों को व्यवस्थित किया जा सके। मूल रूप से, मैं उन स्थानों की साजिश रच रहा हूं जहां रुचि की एक विशेष प्रजाति के नमूने एकत्र किए गए हैं और चाहते हैं कि प्रतीक का आकार उस स्थान पर एकत्रित प्रजातियों के कुल वजन को दर्शाए। आधार मानचित्र और विभिन्न परतें बनाना कोई समस्या नहीं रही है, लेकिन मुझे प्रतीक आकार और संबंधित किंवदंती को जिस तरह से मैं चाहता हूं, उसे प्राप्त करने में परेशानी हो रही है।

समस्या नीचे व्यावहारिक उदाहरण में प्रदर्शित की गई है। जब मैं एईएस के बाहर 'आकार' शामिल करता हूं, तो प्रतीक आकार उचित रूप से स्केल किए जाते हैं (प्लॉट 1)। लेकिन जब मैं एईएस स्टेटमेंट के अंदर 'आकार' डालता हूं (एक किंवदंती प्राप्त करने के लिए) प्रतीक आकार अब सही नहीं हैं (प्लॉट 2)। ऐसा लगता है कि ggplot2 ने डेटा को पुनर्विक्रय किया है। यह एक आसान काम होना चाहिए इसलिए मुझे स्पष्ट रूप से कुछ बहुत ही बुनियादी याद आ रही है। इसे समझने में कोई मदद की सराहना की जाएगी।

library(ggplot2)

#create a very simple dataset that includes locations and total weight of samples collected from each site
catch.data<-data.frame(long=c(-50,-52.5,-52,-54,-53.8,-52),
                       lat=c(48,54,54,55,52,50),
                       wt=c(2,38,3,4,25,122))

#including 'size' outside of aes results in no legend
#but the symbol sizes are represented correctly
plot1<-ggplot(catch.data,aes(x=long,y=lat)) +
  geom_point(size=catch.data$wt,colour="white",fill="blue",shape=21)    

#including 'size' within aes appears necessary in order to create a legend
#but the symbol sizes are not represented correctly
plot2<-ggplot(catch.data,aes(x=long,y=lat)) +
  geom_point(aes(size=catch.data$wt),colour="white",fill="blue",shape=21)

enter image description here

5
Turbo74 21 अगस्त 2017, 20:18

2 जवाब

सबसे बढ़िया उत्तर

सबसे पहले, आपको aes के अंदर डेटा फ्रेम नाम का संदर्भ नहीं देना चाहिए, इसने किंवदंती को गड़बड़ कर दिया। तो सही संस्करण होगा

plot3 <- ggplot(catch.data,aes(x=long,y=lat)) + 
         geom_point(aes(size=wt),colour="white",fill="blue",shape=21)

अब विविधता प्रदर्शित करने के लिए आपको range तर्क scale_size_continuous के साथ खेलना चाहिए, उदा।

plot3 + scale_size_continuous(range = range(catch.data$wt) / 5)

enter image description here

इसे कुछ बार बदलें और देखें कि आपके लिए कौन सा काम करता है। कृपया ध्यान दें कि संख्याओं को क्षेत्रों के रूप में दर्शाने में एक सामान्य दृश्य गड़बड़ी मौजूद है (गूगल जैसे "क्यों पाई चार्ट खराब हैं")।

संपादित करें: नीचे दी गई टिप्पणी का उत्तर देते हुए, आप उदाहरण के लिए एक निश्चित स्केलिंग पेश कर सकते हैं। scale_size_continuous(limits = c(1, 200), range = c(1, 20))

0
tonytonov 23 अगस्त 2017, 19:38

एईएस () के भीतर किसी भी मूल्य को डेटा में चर के लिए मैप किया जाता है, जबकि एईएस के बाहर निर्दिष्ट मूल्यों के लिए ऐसा नहीं है ()

देखें एईएस में पासिंग विकल्पों के बीच अंतर () और इसके बाहर ggplot2 में

साथ ही दस्तावेज़ीकरण: http://ggplot2.tidyverse.org/reference/aes.html

1
Megha John 22 अगस्त 2017, 13:31