ลดระยะห่างระหว่างไอเท็มในตำนานใน R หรือไม่?


9

ฉันพยายามสร้างchoropleth()แผนที่ที่ถูกต้องใน R โดยใช้GISToolsแพ็คเกจ ฉันใช้choro.legend()แสดงตำนานของฉัน อย่างไรก็ตามฉันไม่สามารถสร้างตำแหน่งคำอธิบายแผนภูมิที่ถูกต้องได้และ / หรือฉันไม่เข้าใจบทบาทของfmtพารามิเตอร์ในchoro.legend()ฟังก์ชันของฉัน ดูเหมือนว่าฉันfmtสามารถลดช่องว่างระหว่างสีในตำนานและคำอธิบายของฉัน

ป้อนคำอธิบายรูปภาพที่นี่

ผมพบว่าหน้าความช่วยเหลือ choro.legendที่รัฐfmtเป็น"รูปแบบสไตล์ C เป็นค่าที่ระบุไว้ในข้างต้นข้อ จำกัด ระดับ choropleth"

ดังนั้นนี่ควรทำงานกับค่าคลาสของฉันไม่ใช่ระยะห่างระหว่างไอเท็มคำอธิบาย?

หรือความหมายของมนุษย์ที่เข้าใจได้ของสิ่งนี้คืออะไร?

ฉันจะลดระยะห่างระหว่าง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")

ฉันขุด / ทดลองเรื่องนี้เล็กน้อย ฉันพบนี้ในสตริง C-รูปแบบการจัดรูปแบบคำสั่ง: stuff.mit.edu/afs/sipb/project/r-project/lib/R/library/base/... แต่นี่ดูเหมือนจะไม่มีผลกระทบใด ๆ กับระยะห่างระหว่างรายการในตำนาน ฉันสังเกตว่าในรหัสของคุณชื่อของตำนานคือ 'ชื่อของฉัน' แต่ในภาพของคุณไม่มีชื่อเรื่องเกี่ยวกับตำนาน มีปัญหาที่นี่ไหม ฉันสงสัยมัน แต่มันคุ้มค่าที่จะดู
haff

ในการตรวจสอบต่อไปการใช้ค่า "% 20.1f" จะสร้างคำอธิบายที่กว้างมาก (เช่นของคุณ) และค่าของ "% 0.1f" จะสร้างคำอธิบายที่ใกล้เคียงกันมาก แต่คุณใช้ค่า "% 0.1f" และรายการของคุณจะอยู่ห่างกันมาก สิ่งเดียวที่ฉันคิดได้ก็คือพื้นที่สีขาวที่ซ่อนเร้นอยู่ด้านหน้าของค่าของคุณ แต่ฉันไม่รู้ว่าทำไมคุณถึงมีสิ่งนี้
haff

คำตอบ:


3

fmtไม่มีส่วนเกี่ยวข้องกับการเว้นวรรคของรายการในตำนาน สำหรับรายละเอียดของfmtโปรดดูที่การใช้ C-String สไตล์การจัดรูปแบบคำสั่ง เพียงวางข้อมูลโค้ดต่อไปนี้ใน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, legend = rep ("" ความยาว ( res)), เติม = sh $ cols,: 'text.width' ต้องเป็นตัวเลข,> = 0 การเรียกฟังก์ชันของฉันดูเหมือนว่า: choro.legend (-85.80,45.3, tneffort.shades, title = 'Trapnet lift ต่อปี' , CEX = 0.6 Bty = "n", fmt = "0.0f%", space_reduction = 4000) ทุกคนสามารถระบุแหล่งที่มาของปัญหา?
ดาร์ริล H
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.