2010-01-27 21 views
7

Tôi muốn đặt giá trị cho mỗi thanh trong barchart (lưới) ở đầu mỗi thanh. Tuy nhiên, tôi không thể tìm thấy bất kỳ tùy chọn nào mà tôi có thể đạt được điều này. Tôi chỉ có thể tìm thấy các tùy chọn cho trục.thêm nhãn vào barchart mạng

Trả lời

19

Tạo chức năng bảng tùy chỉnh, ví dụ:

library("lattice") 
p <- barchart((1:10)^2~1:10, horiz=FALSE, ylim=c(0,120), 
       panel=function(...) { 
       args <- list(...) 
       panel.text(args$x, args$y, args$y, pos=3, offset=1) 
       panel.barchart(...) 
       }) 
print(p) 

lattice barchart with labels

+1

Tuyệt vời cho giá thầu tối đa! –

0

Tôi đã đề xuất sử dụng directlabels package mới, có thể được sử dụng với cả mạng và ggplot (và làm cho cuộc sống rất dễ dàng đối với các vấn đề này), nhưng tiếc là nó không hoạt động với barcharts.

-1

Nếu bạn đang sử dụng các tham số groups bạn sẽ tìm thấy các nhãn trong @ đang RCS của tất cả đất đai trên đầu trang của mỗi khác. Điều này có thể được cố định bằng cách mở rộng panel.text để làm việc như panel.barchart, đủ dễ dàng nếu bạn biết R.

Tôi không thể đăng mã sửa lỗi ở đây vì lý do cấp phép, xin lỗi.

+0

Điều đó có nghĩa là gì? Bạn có đang phát triển các công cụ độc quyền (mà sẽ phải là công cụ hợp pháp) dựa trên mạng không? (Chỉ cần tò mò.) –

+0

vì một phiên bản vá của 'panel.text' sẽ là một công việc có nguồn gốc. Tôi luôn sẵn lòng đăng các mẫu mã mà tôi viết hoàn toàn. Ngoài ra tôi có thể có tại bất kỳ hợp đồng thời gian nhất định với chủ nhân của tôi có mang về đóng góp cho GPL. –

0

Vì tôi vẫn phải làm điều này, đây là mẫu mã đủ gần để tìm ra đoạn mã của những gì @Alex Brown gợi ý (điểm là một mảng 2D thuộc loại nào đó sẽ được chuyển thành một nhóm vectơ):

barchart(scores, horizontal=FALSE, stack=FALSE, 
    xlab='Sample', ylab='Mean Score (max of 9)', 
    auto.key=list(rectangles=TRUE, points=FALSE), 
    panel=function(x, y, box.ratio, groups, errbars, ...) { 
     # We need to specify groups because it's not actually the 4th 
     # parameter 
     panel.barchart(x, y, box.ratio, groups=groups, ...) 
     x <- as.numeric(x) 
     nvals <- nlevels(groups) 
     groups <- as.numeric(groups) 
     box.width <- box.ratio/(1 + box.ratio) 
     for(i in unique(x)) { 
      ok <- x == i 
      width <- box.width/nvals 
      locs <- i + width * (groups[ok] - (nvals + 1)/2) 
      panel.arrows(locs, y[ok] + 0.5, scores.ses[,i], ...) 
     } 
    }) 

Tôi chưa thử nghiệm điều này, nhưng các bit quan trọng (các bộ phận xác định vị trí vv trong chức năng bảng điều khiển) hoạt động. Đó là một phần khó khăn để tìm ra. Trong trường hợp của tôi, tôi đã thực sự sử dụng panel.arrows để làm cho errorbars (kinh dị!). Nhưng score.ses có nghĩa là một mảng có cùng kích thước với điểm số.

Tôi sẽ cố gắng làm sạch điều này sau - nhưng nếu ai đó muốn, tôi rất vui vì điều đó!