Giảm khoảng cách giữa các vật phẩm trong truyền thuyết trong R?


9

Tôi đang cố gắng tạo choropleth()bản đồ chính xác trong R bằng cách sử dụng GISToolsgói. Tôi sử dụng choro.legend()để hiển thị huyền thoại của tôi. Tuy nhiên, tôi không thể tạo vị trí chú thích chính xác, VÀ / HOẶC Tôi không hiểu vai trò của fmttham số trong choro.legend()chức năng của mình . Dường như với tôi fmtcó thể làm giảm không gian giữa màu sắc và mô tả huyền thoại của tôi.

nhập mô tả hình ảnh ở đây

Tôi tìm thấy trang trợ giúp choro.legend có trạng thái fmt"Định dạng kiểu C cho các giá trị được nêu trong giới hạn lớp choropleth ở trên" .

Vì vậy, điều này chỉ nên làm việc với các giá trị lớp của tôi, không phải bởi khoảng cách giữa các mục huyền thoại?

HOẶC ý nghĩa dễ hiểu của con người về điều này là gì?

Làm cách nào để giảm khoảng cách giữa choro.legend()các mục của tôi ?

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

Tôi đã làm một ít đào / thử nghiệm về điều này. Tôi đã tìm thấy điều này trên các lệnh định dạng chuỗi kiểu C: Stuff.mit.edu/afs/sipb/project/r-project/lib/R/l Library / base / . Nhưng điều này dường như không có bất kỳ ảnh hưởng nào đến khoảng cách giữa các vật phẩm trong truyền thuyết. Tôi nhận thấy rằng trong mã của bạn, tiêu đề của truyền thuyết là 'Tiêu đề của tôi' nhưng trong hình ảnh của bạn không có tiêu đề về truyền thuyết. Có thể có một vấn đề ở đây? Tôi nghi ngờ điều đó nhưng nó đáng để xem xét.
haff

Khi kiểm tra thêm, sử dụng giá trị "% 20.1f" sẽ tạo ra một chú giải thực sự rộng (như của bạn) và giá trị "% 0.1f" tạo ra một mục có các mục chú thích gần nhau hơn. Nhưng bạn sử dụng giá trị "% 0.1f" và các mục của bạn cách nhau rất xa. Điều khác duy nhất mà tôi có thể nghĩ đến là khoảng trắng tiềm năng đang đệm trước các giá trị của bạn, nhưng tôi không biết tại sao bạn lại có thứ này.
haff

Câu trả lời:


3

fmtkhông có gì để làm với khoảng cách của các mục huyền thoại. Đối với một mô tả chi tiết fmtxin vui lòng xem Sử dụng C-style Chuỗi Formatting Commands . Chỉ cần dán đoạn mã sau vào Rbảng điều khiển của bạn để xem sự khác biệt (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()gọi legend()nội bộ. Để giảm khoảng cách ngang giữa các mục chú thích, bạn nên thay đổi text.widththam số của legend()hàm. Thật không may choro.legend, không cung cấp một tham số để đặt text.widthbên ngoài thay vì tính toán bên trong. Tôi đã thêm một space_reductiontham số cho choro.legendvà sửa đổi một chút chức năng ban đầu như sau:

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

Lưu đoạn mã này trong tệp tập lệnh R và sourcenó. Một đoạn mã có thể tái tạo sẽ như sau:

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)

Dần dần giảm / tăng space_reductiontham số để đạt được kết quả mong muốn.

nhập mô tả hình ảnh ở đây


Đã thử sử dụng hàm choro.legend như đã nêu ở trên, nhưng bất kể giá trị tôi đặt cho space_redraction, tôi nhận được thông báo lỗi sau: Lỗi trong chú thích (x = px, y = py, Legend = rep ("", length ( res)), fill = sh $ cols, '' , cex = 0,6, bty = "n", fmt = "% 0,0f", space_redraction = 4000) Có ai có thể xác định nguồn gốc của vấn đề không?
Darryl H
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.