2013-02-07 19 views
7

मैं ऑस्ट्रेलिया में दूरदराज के क्षेत्रों दिखा कोई शेपफ़ाइल, ऑस्ट्रेलियाई सांख्यिकी ब्यूरो से प्राप्त राशि शेपफ़ाइल बहुभुज रंग:आर - साजिश के साथ फंस() - एक स्लॉट मूल्य पर आधारित

http://www.abs.gov.au/AUSSTATS/[email protected]/DetailsPage/1270.0.55.005July%202011?OpenDocument

उसी यूआरएल पर एक पीडीएफ है "एएसजीएस रिमोटनेस स्ट्रक्चर एडिशन 2011 पीडीएफ मैप्स" - मैं इस पीडीएफ दस्तावेज़ से पहले मानचित्र को पुन: पेश करने की कोशिश कर रहा हूं।

मैं शेपफ़ाइल में पढ़ सकते हैं और data स्लॉट के लिए रंग जानकारी जोड़ लिया है:

ra <- readShapeSpatial("RA_2011_AUST", delete_null_obj = TRUE) 
[email protected]$COLOUR <- "#FFFFFF" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 0] <- "#006837" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 1] <- "#31A354" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 2] <- "#78C679" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 3] <- "#C2E699" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 4] <- "#FFFFCC" 

केवल एक चीज छोड़ दिया मुझे करने के लिए साजिश नक्शा है! यह वह जगह है जहाँ मैं अटक जाते हैं ...

[email protected] 35 बहुभुज, जिनमें से प्रत्येक एक स्लॉट ID जो डेटा फ्रेम [email protected] लिए एक सूचकांक है की एक सूची है। तो मुझे [email protected]$COLOUR[ID] में रंग खोजने के लिए plot() बताएं। खैर, काफी नहीं। 35 बहुभुजों में से प्रत्येक (वर्ग "बहुभुज") में बहुभुज की अपनी सूची है (वर्ग "बहुभुज"); कुल मिलाकर 6902 बहुभुज हैं !!!

plot() की मेरी समझ यह है कि मुझे इसे उसी क्रम में रंगों का एक वेक्टर पास करना होगा क्योंकि बहुभुज प्लॉट किया जाएगा। इसलिए मेरा मानना ​​है कि मुझे संबंधित पॉलीगॉन के लिए रंग मान रखने वाले प्रत्येक तत्व के साथ लंबाई 6902 का वेक्टर बनाना होगा। मैं अब तक कैसे कर रहा हूँ?

बहुभुज क्रम में प्लॉट किए जाने पर यह आसान होगा, लेकिन वे नहीं हैं। 35 बहुभुजों में से प्रत्येक में स्लॉट plotOrder है जो एक पूर्णांक वेक्टर है, इसलिए रंग वेक्टर, संभवतः, इन वैक्टरों में से प्रत्येक के मानों द्वारा आदेश दिया जाना चाहिए।

इस बिंदु पर यह सब कुछ जटिल लगता है। क्या मैं यहां पूरी तरह से ट्रैक बंद कर रहा हूँ?

आपकी सलाह के लिए धन्यवाद!

+2

आपको rgdal पैकेज से readOGR का उपयोग करके आकारफाइल पढ़ना चाहिए, और यदि आकारफाइल के साथ .prj फ़ाइल है तो प्रक्षेपण डेटा में लोड होगा। – Spacedman

उत्तर

11

आपने पहले से ही सभी काम किया है!

plot(ra, [email protected]$COLOUR) 

या यहां तक ​​कि, @Spacedman के रूप में सुझाव:

plot(ra, col=ra$COLOUR) 

और बस हो गया!

enter image description here

और तुम बहुभुज सीमाओं से छुटकारा पाने के लिए करना चाहते हैं:

plot(ra, col=ra$COLOUR, border=NA) 

enter image description here

संपादित:

के अनुसार: इस व्यवहार की व्याख्या करने की कोशिश ?SpatialPointsDataFrame:

डिफ़ॉल्ट आईडी मिलान के साथ SpatialPolygonsDataFrame पॉलीगन्स आईडी स्लॉट के विरुद्ध डेटा फ्रेम पंक्ति नामों की जांच करता है। फिर उन्हें एक दूसरे के साथ सहमत होना चाहिए, और अद्वितीय होना चाहिए (कोई बहुभुज वस्तुएं आईडी साझा नहीं कर सकती हैं); बहुभुज आईडी से मेल खाने के लिए आवश्यक होने पर डेटा फ्रेम पंक्तियों को फिर से आदेश दिया जाएगा ..

मतलब है कि बहुभुज उनके आईडी के अनुसार आदेश दिया है और इसलिए कर रहे हैं स्लॉट @data में dataframe की पंक्तियों के क्रम में कर रहे हैं।

अब आप समारोह plot.SpatialPolygons को देखो (getAnywhere(plot.SpatialPolygons) का प्रयोग करके) वहाँ कुछ बिंदु पर उन पंक्तियों कर रहे हैं:

... 
    polys <- slot(x, "polygons") 
    pO <- slot(x, "plotOrder") 
    if (!is.null(density)) { 
     if (missing(col)) 
      col <- par("fg") 
     if (length(col) != n) 
      col <- rep(col, n, n) 
     if (length(density) != n) 
      density <- rep(density, n, n) 
     if (length(angle) != n) 
      angle <- rep(angle, n, n) 
     for (j in pO) .polygonRingHoles(polys[[j]], border = border[j], 
      xpd = xpd, density = density[j], angle = angle[j], 
      col = col[j], pbg = pbg, lty = lty, ...) 
    } 
... 

वेक्टर col को inputted polygons स्लॉट के रूप में एक ही क्रम है और इसलिए आईडी के रूप में। plotOrder का उपयोग उन सभी को एक ही तरीके से इंडेक्स करने के लिए किया जाता है।

+2

बस 'आरए $ COLOUR' काम करना चाहिए - स्थानिक डेटा फ्रेम ज्यादातर डेटा फ्रेम की तरह काम करते हैं, सिवाय इसके कि जब वे ... – Spacedman

+0

ठीक है, यह बहुत अच्छा है! लेकिन यह क्यों काम करता है? आरए @ plotOrder द्वारा निर्दिष्ट आदेश में प्लॉट बहुभुज नहीं हैं ??? यह समाधान केवल तभी काम करता है जब उन्हें संख्यात्मक क्रम में प्लॉट किया गया हो, ra @ plotOrder को अनदेखा कर दें। –

+0

और 6902 "पत्ता" बहुभुज के बारे में क्या? मुझे लगता है कि यह इस वर्ग के लिए साजिश() विधि लागू की गई है, लेकिन यह स्पष्ट नहीं है कि यह इस तरह से होना चाहिए। –

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