2015-02-12 9 views
7

Sto lavorando con lo htmlwidgetdygraphs for R. La mia serie si estende su un intervallo da circa 0 a 150.000.Come formattare le etichette di dygraphs in R - virgola separate da migliaia di posti?

Ho provato a utilizzare dyOptions(labelsKMB = "K") - questo formato asse y come 0K, 20K, 40K, ... - tuttavia, di conseguenza, la legenda è anche formattata con valori arrotondati - ad es. 22K, 42K, etc..

Mi piacerebbe sapere se le seguenti sono possibili e come realizzarli:

  1. formato l'asse y in migliaia, ma lasciare la leggenda come valori effettivi (non arrotondati)?
  2. Utilizzare un formato separato da virgola per migliaia su uno (o entrambi) l'asse ye la legenda? Cioè, piuttosto che visualizzare 10000 sull'asse y, è formattato come 10,000 - allo stesso modo, i valori effettivi nella legenda come 2523 sono formattati come 2,523.

Sto inserendo questo in un documento RMarkdown interattivo. Forse il CSS personalizzato è un modo per farlo?

risposta

8

È possibile specificare una funzione javascript specifica per impostare le etichette dell'asse x in modo indipendente. A titolo di esempio, ecco come è possibile modificare l'asse y del dygraph demo:

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) 

ho appena fatto una funzione fittizia di cambiare le etichette degli assi, la leggenda dovrebbe rimanere lo stesso.

Modifica: aggiunta una funzione di formattazione, modificata da uno dei dygraphexample

+0

+1 Ah, non si rese conto che si può cospargere JS per tutto. Quello che stavo cercando è qualcosa di più vicino a questo: 'axisLabelFormatter = JS (" function (x) {return x.toString(). Replace (/ (\\ d) (? = (\\ d {3}) + (?! \\ d))/g, '$ 1,')} ")' - Ho intenzione di lasciare questo senza risposta per un po 'per vedere se altri hanno più idee. – JasonAizkalns

+0

Certo, ho aggiunto una funzione trovata in uno degli esempi di 'dygraph' che formatta i numeri aggiungendo K dopo migliaia di ecc. – NicE

1

Ampliando il mio commento di cui sopra con un esempio completo:

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)) 
Problemi correlati