2015-11-04 14 views
7

Tôi đang tìm cách tạo thanh khi sử dụng DT datatable xuất hiện ở giữa các ô của cột và tiếp cận trái hoặc phải tùy thuộc vào giá trị trong ô là dương hoặc tiêu cực.styleColorBar Center và dịch chuyển sang trái/phải phụ thuộc vào ký

Tôi đã thử bằng cách sử dụng chức năng styleColorBar và thay đổi lập luận backgroundPosition để 'left' hay 'center' tuy nhiên với mỗi thử các quán bar vẫn còn xuất hiện ở bên phải của tế bào và luôn đi bên trái.

Tôi không thể tìm thấy ví dụ từ mã R, nhưng đã đính kèm một ví dụ về những gì có thể được thực hiện trên Excel; màu sắc là không cần thiết nhưng nếu bao gồm đó sẽ là một tiền thưởng.

enter image description here

+1

Đây là một thú vị câu hỏi nhưng nó thiếu nỗ lực theo cách nó được trình bày. Vui lòng thêm một ví dụ tái sản xuất. Bạn có thể thêm một ví dụ tối thiểu khi bạn sử dụng 'backgroundPosition = 'left'' để mọi người có thể sử dụng nó và cố gắng tìm một giải pháp. Rất khó có ai đó (kể cả tôi) sẽ dành thời gian để viết mã sản xuất tình huống được mô tả ở đây và sau đó cố gắng tìm một giải pháp ... – LyzandeR

+0

Tôi hiểu những gì tôi viết không dễ hiểu; đã viết lại nó để đọc tốt hơn một chút. Có lẽ vẫn không tuyệt vời nhưng hy vọng có ý nghĩa hơn trước đây! –

Trả lời

14

Bạn có thể làm một tùy chỉnh styleColorBar chức năng sử dụng các gradient CSS (giống như bản gốc styleColorBar) để làm cho các loại thanh mà bạn muốn.

Dưới đây là một ví dụ (xin lỗi vì sự đường dài, thêm dòng mới phá vỡ CSS):

color_from_middle <- function (data, color1,color2) 
{ 
    max_val=max(abs(data)) 
    JS(sprintf("isNaN(parseFloat(value)) || value < 0 ? 'linear-gradient(90deg, transparent, transparent ' + (50 + value/%s * 50) + '%%, %s ' + (50 + value/%s * 50) + '%%,%s 50%%,transparent 50%%)': 'linear-gradient(90deg, transparent, transparent 50%%, %s 50%%, %s ' + (50 + value/%s * 50) + '%%, transparent ' + (50 + value/%s * 50) + '%%)'", 
      max_val,color1,max_val,color1,color2,color2,max_val,max_val)) 
} 

Sử dụng một số dữ liệu thử nghiệm:

data <- data.frame(a=c(rep("a",9)),value=c(-4,-3,-2,-1,0,1,2,3,4)) 

datatable(data) %>% 
    formatStyle('value', 
       background=color_from_middle(data$value,'red','blue')) 

enter image description here

+0

Cảm ơn bạn rất nhiều, đã làm việc hoàn hảo ngay cả đối với nhiều cột! –

Các vấn đề liên quan