R'deki efsane eşyaları arasındaki mesafe azalıyor mu?


9

Paketi choropleth()kullanarak R doğru harita oluşturmaya çalışıyorum GISTools. choro.legend()Efsanemi göstermek için kullanıyorum . Ancak her iki doğru efsane yerleşimini oluşturamıyorum VE / VEYA İşlevimdeki fmtparametrenin rolünü anlamıyorum choro.legend(). Bana öyle geliyor ki fmtefsane renklerim ve tanımım arasındaki boşluğu azaltabilir.

resim açıklamasını buraya girin

Bulduğum choro.legend yardım sayfasını devletler bu fmtolduğunu "choropleth sınıf sınırların üzerinde belirtilen değerler için C tarzı biçimi" .

Yani bu sadece sınıf değerlerimle çalışmalı, efsane öğeleri arasındaki mesafeye göre değil mi?

VEYA bunun insanın anlaşılabilir anlamı nedir?

Öğelerim arasındaki mesafeyi nasıl azaltabilirim 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")

Biraz kazma / deneme yaptım. Bunu C tarzı dize biçimlendirme komutlarında buldum : stuff.mit.edu/afs/sipb/project/r-project/lib/R/library/base/… . Ancak bunun efsane nesneler arasındaki mesafeyi etkilediği görülmemektedir. Kodunuzda efsanenin başlığının 'Başlığım' olduğunu ancak resminizde efsane başlığı olmadığını fark ediyorum. Burada bir sorun olabilir mi? Şüpheliyim ama bakmaya değer.
beceriksizlik

Daha fazla incelemede, "% 20.1f" değerinin kullanılması gerçekten geniş bir açıklama (sizinki gibi) üretir ve "% 0.1f" değeri, gösterge öğeleri birbirine daha yakın olan bir değer üretir. Ancak, "% 0.1f" değerini kullanırsınız ve öğeleriniz birbirinden aralıklı yerleştirilir. Aklıma gelen tek şey, değerlerinizin önünü dolduran potansiyel beyaz boşluk, ama neden buna sahip olacağını bilmiyorum.
Haff

Yanıtlar:


3

fmtefsane öğelerin aralığıyla hiçbir ilgisi yoktur. fmtLütfen ayrıntılı bir açıklama için bkz. C-tarzı Dize Biçimlendirme Komutlarını Kullanma . RFarklılıkları görmek için aşağıdaki kod snippet'ini konsolunuza yapıştırmanız yeterlidir (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()dahili olarak arar . Gösterge öğeleri arasındaki yatay boşluğu azaltmak text.widthiçin legend()işlevin parametresini değiştirmelisiniz . Ne yazık ki harici choro.legendolarak ayarlamak için bir parametre sağlamaz, text.widthdahili olarak hesaplar. Bir space_reductionparametreyi ekledim choro.legendve orijinal işlevi aşağıdaki gibi biraz değiştirdim:

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)
}

Bu pasajı bir R komut dosyasına kaydedin ve kaydedin source. Tekrarlanabilir bir kod snippet'i aşağıdaki gibi olacaktır:

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İstenen sonucu elde etmek için parametreyi kademeli olarak azaltın / artırın .

resim açıklamasını buraya girin


Yukarıda özetlendiği gibi choro.legend işlevini kullanmaya çalıştım, ancak space_reduction için ayarladığım değere bakılmaksızın, aşağıdaki hata iletisini alıyorum: Gösterge hatası (x = px, y = py, legend = rep ("", uzunluk ( res)), fill = sh $ cols,: 'text.width' sayısal olmalı,> = 0 İşlev çağrım şöyle görünüyor: choro.legend (-85.80,45.3, tneffort.shades, title = 'Yıllık Trapnet asansörleri' , cex = 0.6, bty = "n", fmt = "% 0.0f", space_reduction = 4000) Sorunun kaynağını tanımlayan var mı?
Darryl H
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.