2015-02-12 5 views
7

Pracuję z htmlwidgetdygraphs for R. Moja seria obejmuje zakres od około 0 do 150 000.Jak sformatować etykiety dygraphs w R - przecinek oddzielają tysiące miejsc?

Próbowałem użyć dyOptions(labelsKMB = "K") - to formatuje oś y jako 0K, 20K, 40K, ... - jednak w rezultacie legenda jest również sformatowana z zaokrąglonymi wartościami - np. 22K, 42K, etc..

Chciałbym wiedzieć, czy są następujące możliwe i jak wykonać je:

  1. Format oś y w tysiącach, ale pozostawiają legendę jako rzeczywistych (non-zaokrągleniu) wartości?
  2. Użyj formatu oddzielonego przecinkami dla tysięcy na jednej (lub obu) osi Y i legendzie? Oznacza to, że zamiast wyświetlania 10000 na osi Y, jest on sformatowany jako 10,000 - podobnie rzeczywiste wartości w legendzie, takie jak 2523, są sformatowane jako 2,523.

Pchnę to do interaktywnego dokumentu RMarkdown. Być może niestandardowy CSS to sposób na zrobienie tego?

Odpowiedz

8

Można określić określoną funkcję javascript, aby ustawić etykiety osi X niezależnie. Jako przykład, oto jak można zmodyfikować y oś demo dygraph:

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) 

po prostu składa się obojętne funkcję zmiany etykiety osi, legenda powinna pozostać taka sama.

Edit: dodano funkcję formatowania zmodyfikowany z jednego z dygraphexample

+0

+1 Ah, nie zdawał sobie sprawy, można posypać JS poprzez. To, do czego dążyłem, jest bliższe temu: 'axisLabelFormatter = JS (" function (x) {return x.toString(). Replace (/ (\\ d) (? = (\\ d {3}) + (?! \\ d))/g, '$ 1,')} ")' - Zostawię to bez odpowiedzi, aby zobaczyć, czy inni mają więcej pomysłów. – JasonAizkalns

+0

Pewnie, dodałem funkcję znalezioną w jednym z przykładów 'dygraph', który formatuje liczby dodające K po tysiącach itp. – NicE

1

Rozwijając na mój komentarz powyżej z pełnym przykład:

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)) 
Powiązane problemy