आर

2011-03-02 10 views
7

में मार्जिन के बिना नक्शा तैयार करना मैं आर में 'मानचित्र' पैकेज का उपयोग करके उत्पन्न मानचित्रों के मार्जिन से छुटकारा पाने की कोशिश कर रहा हूं। मुझे par(mar=c(0,0,0,0)) सेट करके और सीमा = 0 विकल्प का उपयोग करके कुछ तरीके मिलते हैं। map() फ़ंक्शन। लेकिन उदाहरण की तुलना में mar=c(0,0,0,0) के साथ एक स्कैटरप्लॉट अभी भी बहुत अधिक जगह है। उदाहरण के लिए एक नक्शा उत्पन्न करने के लिए कुछ कोड यहां दिया गया है, साथ ही नियमित स्कैटरप्लॉट तुलना के लिए।आर

library(maps) 
x <- sample(360, 10)-180 
y <- sample(160, 10)-80 
x.boundary <- c(-180, 180, 0, 0) 
y.boundary <- c(0, 0, -80, 80) 

pdf("map.tmp.pdf", width=9, height=4) 
par(mar=rep(0,4)) 
map("world", border=0, ylim=c(-80, 80), fill=TRUE, bg="gray", col="white") 
points(x, y, pch=19, col="blue") 
points(x.boundary, y.boundary, pch=19, col="red") 
# map.axes() 
dev.off() 

pdf("scatter.tmp.pdf", width=9, height=4) 
par(mar=rep(0,4)) 
plot(x, y, xlim=c(-180, 180), ylim=c(-80, 80), pch=19, col="blue") 
points(x.boundary, y.boundary, pch=19, col="red") 
dev.off() 

आप map.axes() समारोह आप देख सकते हैं कि मार्जिन भी साथ कल्पना की दृष्टि से दबा दिया, अंतरिक्ष कुल्हाड़ियों के लिए आरक्षित कर दिया गया है uncomment हैं।

किसी भी विचार की बहुत सराहना की, यह मुझे उम्र के लिए परेशान कर रहा है।

उत्तर

9

मानचित्र फ़ंक्शन में, मार्च फिर से रीसेट किया जाता है (और इसलिए सामान्य सेटिंग्स का पालन नहीं करता है)। आप मानचित्र फ़ंक्शन के भीतर मार्जिन सेट कर सकते हैं (?map देखें)।

map("world", border=0, ylim=c(-80, 80), fill=TRUE, 
    bg="gray", col="white",mar=rep(0,4)) 
एक sidenote पर

, यदि आप बराबर के सामान्य सेटिंग बदल, आप

oldpar <- par(mar=rep(0,4) 
... some plotting ... 
par(oldpar) 

की तरह कुछ कर सकते हैं मापदंडों वापस मूल करने के लिए सेट करने के लिए: यह आप क्या चाहते हैं देता है। यह विशेष रूप से उपयोगी होता है यदि आप अपना खुद का कस्टम प्लॉट फ़ंक्शन लिखते हैं।

+0

धन्यवाद! यह थोड़ा शर्मनाक है कि उत्तर 'मानचित्र' में सभी के साथ था, लेकिन मैं किसी और चीज से अधिक राहत प्राप्त कर रहा हूं। –

+0

@ माइकल: आपका स्वागत है। परेशान मत करो, स्पष्ट याद करना आसान है। मैं उस समय से अधिक बार दोषी हूं;) –

+0

+1 मेरे पास यह मुद्दा था कि मैंने 'सीमा 'संपत्ति निर्धारित नहीं की थी। – seand

2

map() फ़ंक्शन मार्जिन सेट करता है, इसलिए जब आप फ़ंक्शन को कॉल करते हैं तो उन्हें निर्दिष्ट करना मार्जिन बदल जाएगा। हालांकि, mar को अनदेखा किया जाता है यदि आप प्रक्षेपण में भी जाते हैं।

तो तुम जैसे

map("county", fill = TRUE, resolution = 0, lty = 0, 
    projection = "polyconic", 
    myborder = 0, mar = c(0,0,0,0)) 

कुछ मार्जिन परिवर्तन नहीं होगा करते हैं।

इसे ठीक करने के लिए, आपको कोड की एक पंक्ति जोड़कर maps() फ़ंक्शन को बदलना होगा।

पुरानी समारोह:

... 
if (coordtype != "spherical" || doproj) { 
    plot.window(xrange, yrange, asp = 1/aspect[1]) 
} else { 
... 

को बदलें:

... 
if (coordtype != "spherical" || doproj) { 
    par(mar = mar) 
    plot.window(xrange, yrange, asp = 1/aspect[1]) 
} else { 
... 

मैं CRAN से स्रोत डाउनलोड, और अपने आप को RStudio प्रयोग करने के लिए पुस्तकालय पुनर्निर्माण के बाद मैं परिवर्तन इसलिए किया ताकि भविष्य का कोई भी कॉल maps()projection के साथ अभी भी mar के विनिर्देश की अनुमति देगा।