आर में किंवदंती की वस्तुओं के बीच की दूरी कम करना?


9

मैं पैकेज choropleth()का उपयोग करके आर में सही नक्शा बनाने की कोशिश कर रहा हूं GISTools। मैं choro.legend()अपनी किंवदंती प्रदर्शित करने के लिए उपयोग करता हूं। हालाँकि, मैं या तो सही लेजेंड प्लेसमेंट नहीं बना सकता, और / या मैं fmtअपने choro.legend()फ़ंक्शन में पैरामीटर की भूमिका नहीं समझता । यह मुझे लगता है कि fmtमेरे किंवदंती रंग और विवरण के बीच की जगह को कम कर सकता है।

यहां छवि विवरण दर्ज करें

मुझे choro.legend सहायता पृष्ठ मिला है जिसमें कहा गया fmtहै कि " कोरोप्लेथ क्लास की सीमा से ऊपर के मूल्यों के लिए सी शैली प्रारूप है"

तो यह सिर्फ मेरी कक्षाओं के मूल्यों के साथ काम करना चाहिए, न कि किंवदंती वस्तुओं के बीच की दूरी से?

या इसका मानवीय अर्थ क्या है?

मैं अपने choro.legend()आइटमों के बीच की दूरी को कैसे कम कर सकता हूं ?

choropleth(my.shp, nc.lI[,1], shading = income.shade)
choro.legend(-12919698, 5314317,income.shade,title='My title',cex=0.8, bty = "n", fmt = "%0.1f")

मैंने इस पर थोड़ी खुदाई / प्रयोग किया। मुझे यह सी-स्टाइल स्ट्रिंग फॉर्मेटिंग कमांड्स पर मिला: stuff.mit.edu/afs/sipb/project/r-project/lib/R/library/base/… । लेकिन इससे किंवदंती वस्तुओं के बीच की दूरी पर कोई असर नहीं पड़ता है। मैं ध्यान देता हूं कि आपके कोड में किंवदंती का शीर्षक 'मेरा शीर्षक' है, लेकिन आपकी छवि में किंवदंती पर शीर्षक नहीं है। क्या यहां कोई मुद्दा हो सकता है? मुझे इसमें संदेह है लेकिन यह देखने लायक है।
haff

आगे के निरीक्षण पर, "% 20.1f" के मूल्य का उपयोग करने से वास्तव में व्यापक किंवदंती (आपकी तरह) पैदा होती है और "% 0.1f" का मान एक किंवदंती आइटम के साथ मिलकर बहुत करीब पैदा करता है। लेकिन आप "% 0.1f" के मान का उपयोग करते हैं और आपके आइटम बहुत दूर तक फैल जाते हैं। केवल एक और चीज जो मैं सोच सकता था, वह है संभावित सफेद स्थान आपके मूल्यों के सामने पैडिंग करना, लेकिन मुझे नहीं पता कि आपके पास ऐसा क्यों होगा।
Haff

जवाबों:


3

fmtकिंवदंती वस्तुओं के अंतर से कोई लेना-देना नहीं है। fmtकृपया विस्तृत विवरण के लिए, C- शैली स्ट्रिंग प्रारूपण कमांड का उपयोग करें देखें । Rमतभेदों को देखने के लिए अपने कंसोल में बस निम्नलिखित कोड स्निपेट चिपकाएँ (pi ~ 3.14):

sprintf("%f", pi)
sprintf("%.3f", pi)
sprintf("%1.0f", pi)
sprintf("%5.1f", pi)
sprintf("%05.1f", pi)
sprintf("%+f", pi)
sprintf("% f", pi)
sprintf("%-10f", pi) # left justified
sprintf("%e", pi)
sprintf("%E", pi)
sprintf("%g", pi)
sprintf("%g",   1e6 * pi) # -> exponential
sprintf("%.9g", 1e6 * pi) # -> "fixed"
sprintf("%G", 1e-6 * pi)

choro.legend()legend()आंतरिक रूप से कॉल करता है। पौराणिक वस्तुओं के बीच क्षैतिज अंतर को कम करने के लिए आपको फ़ंक्शन के text.widthपैरामीटर को बदलना चाहिए legend()। दुर्भाग्य से बाहरी रूप से गणना choro.legendकरने के लिए एक पैरामीटर प्रदान नहीं करता है text.widthबल्कि आंतरिक रूप से गणना करता है। मैंने एक space_reductionपैरामीटर जोड़ा choro.legendऔर मूल फ़ंक्शन को इस प्रकार से थोड़ा संशोधित किया:

choro.legend <- function (px, py, sh, under = "under", over = "over", between = "to", 
          fmt = "%g", cex = 1, space_reduction = 0, ...) 
{
  x = sh$breaks
  lx = length(x)
  if (lx < 3) 
    stop("break vector too short")
  res = character(lx + 1)
  res[1] = paste(under, sprintf(fmt, x[1]))
  for (i in 1:(lx - 1)) res[i + 1] <- paste(sprintf(fmt, x[i]), 
                                            between, sprintf(fmt, x[i + 1]))
  res[lx + 1] <- paste(over, sprintf(fmt, x[lx]))
  maxwidth <- max(strwidth(res)) - space_reduction
  temp <- legend(x = px, y = py, legend = rep(" ", length(res)), 
                 fill = sh$cols, text.width = maxwidth, cex = cex, ...)
  text(temp$rect$left + temp$rect$w, temp$text$y, res, pos = 2, 
       cex = cex)
}

इस स्निपेट को R स्क्रिप्ट फ़ाइल में सहेजें और sourceइसे। एक प्रतिलिपि प्रस्तुत करने योग्य कोड स्निपेट निम्नलिखित की तरह होगा:

library(GISTools)

data(newhaven)
blocks

val <- blocks@data$POP1990
shade <- auto.shading(val)
choropleth(blocks, v= val, shade)
choro.legend(514000, 175000,shade,title='My Legend',cex=.8, bty = "n", fmt = "%0.0f",
             space_reduction=4000)

space_reductionवांछित परिणाम प्राप्त करने के लिए धीरे-धीरे पैरामीटर को कम / बढ़ाएं ।

यहां छवि विवरण दर्ज करें


ऊपर उल्लिखित के रूप में choro.legend फ़ंक्शन का उपयोग करने का प्रयास किया गया, लेकिन इसके बावजूद कि मैंने space_reduction के लिए जो मूल्य निर्धारित किया है, मुझे निम्न त्रुटि संदेश मिलता है: त्रुटि किंवदंती में (x = px, y = py, किंवदंती = प्रतिनिधि ("", लंबाई) रेस)), fill = sh $ cols,: 'text.width' को न्यूमेरिक होना चाहिए,> = 0 मेरा फंक्शन कॉल इस तरह दिखता है: choro.legend (-85.80,45.3, tneffort.shades, शीर्षक = 'ट्रैप लिफ़्ट प्रति वर्ष' , cex = 0.6, bty = "n", fmt = "% 0.0f", space_reduction = 4000) क्या कोई भी समस्या के स्रोत की पहचान कर सकता है?
Darryl H
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.