2015-02-12 20 views
7

Tôi đang làm việc với htmlwidgetdygraphs for R. Chuỗi video của tôi trải dài từ 0 đến 150.000.Làm cách nào để định dạng các nhãn hiển thị trong R - dấu phẩy tách biệt hàng nghìn địa điểm?

Tôi đã thử sử dụng dyOptions(labelsKMB = "K") - định dạng trục y này là 0K, 20K, 40K, ... - tuy nhiên, kết quả là chú giải cũng được định dạng với các giá trị được làm tròn - ví dụ: 22K, 42K, etc..

Tôi muốn biết nếu sau đây là có thể và làm thế nào để thực hiện chúng:

  1. Format trục y trong hàng ngàn, nhưng để lại những huyền thoại như giá trị thực tế (không làm tròn)?
  2. Sử dụng một dấu phẩy tách ra định dạng cho hàng ngàn trên một trong hai (hoặc cả hai) với trục y và truyền thuyết? Nghĩa là, thay vì hiển thị 10000 trên trục y, nó được định dạng như 10,000 - tương tự như vậy, giá trị thực tế trong truyền thuyết như 2523 được định dạng như 2,523.

Tôi đang đẩy tài liệu này vào tài liệu RMarkdown tương tác. Có lẽ CSS tùy chỉnh là một cách để làm điều này?

Trả lời

8

Bạn có thể chỉ định một hàm javascript cụ thể để thiết lập các nhãn của trục x một cách độc lập. Ví dụ, dưới đây là cách bạn có thể sửa đổi trục y của bản trình diễn hình ảnh:

library(dygraphs) 
library(htmlwidgets) 

nhtempBig<-nhtemp*500 
nhtempBig 

valueFormatter<-"function formatValue(v) { 
var suffixes = ['', 'K', 'M', 'G', 'T']; 
    if (v < 1000) return v; 
    var magnitude = Math.ceil(String(Math.floor(v)).length/3-1); 
    if (magnitude > suffixes.length - 1) 
    magnitude = suffixes.length - 1; 
    return String(Math.round(v/Math.pow(10, magnitude * 3), 2)) +suffixes[magnitude]}" 




dygraph(nhtempBig, main = "New Haven Temperatures") %>% 
    dyAxis("y", label = "Temp (F)", valueRange = c(0, 150000),axisLabelFormatter=JS(valueFormatter)) %>% 
    dyOptions(axisLineWidth = 1.5, fillGraph = TRUE, drawGrid = FALSE) 

Tôi vừa tạo ra một hàm giả để thay đổi nhãn trục, chú giải phải giữ nguyên.

Edit: thêm một chức năng định dạng, biến đổi từ một trong những dygraphexample

+0

+1 Ah, đã không nhận ra bạn có thể rắc JS khắp. Những gì tôi đang diễn ra là một cái gì đó gần gũi hơn với này: 'axisLabelFormatter = JS (" function (x) {return x.toString() thay thế (/ (\\ d) (= (\\ d {3}) + (.? ?! \\ d))/g, '$ 1,')} ")' - Tôi sẽ không trả lời câu hỏi này một chút để xem người khác có thêm ý tưởng hay không. – JasonAizkalns

+0

Chắc chắn, tôi đã thêm một chức năng được tìm thấy trong một trong những 'ví dụ dygraph' rằng số định dạng thêm K sau khi hàng ngàn vv – NicE

1

Mở rộng trên nhận xét của tôi ở trên với một ví dụ đầy đủ:

library(dygraphs) 
library(htmlwidgets) 
FUNC_JSFormatNumber <- "function(x) {return x.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')}" 
dygraph(ldeaths) %>% 
    dyAxis("y", axisLabelFormatter=JS(FUNC_JSFormatNumber), valueFormatter=JS(FUNC_JSFormatNumber)) 
Các vấn đề liên quan