Как отформатировать метки dygraphs в R - запятая разделяет тысячи?

Я работаю с htmlwidget dygraphs для R. Моя серия охватывает диапазон от 0 до 150 000.

Я пытался использовать dyOptions(labelsKMB = "K") - это форматирует ось Y как 0K, 20K, 40K, ... - однако в результате легенда также форматируется с округленными значениями - например. 22K, 42K, etc..

Я хотел бы знать, возможно ли следующее и как их выполнить:

  1. Отформатировать ось Y в тысячах, но оставить легенду как фактические (не округленные) значения?
  2. Использовать формат, разделенный запятыми, для тысяч на одной (или обеих) оси Y и легенде? То есть, вместо того, чтобы отображать 10000 по оси Y, он отформатирован как 10,000 — аналогичным образом, фактические значения в легенде, такие как 2523, отформатированы как 2,523.

Я помещаю это в интерактивный документ RMarkdown. Возможно, пользовательский CSS - это способ сделать это?


person JasonAizkalns    schedule 12.02.2015    source источник


Ответы (2)


Вы можете указать определенную функцию javascript для независимой установки меток оси X. В качестве примера, вот как вы можете изменить ось Y в демонстрации 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)

Я только что создал фиктивную функцию для изменения меток осей, легенда должна остаться прежней.

Изменить: добавлена ​​функция форматирования, измененная из одного из dygraph примера

person NicE    schedule 12.02.2015
comment
+1 А, не знал, что можно повсюду рассыпать JS. То, к чему я стремился, ближе к этому: axisLabelFormatter=JS("function(x) {return x.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')}") - я собираюсь оставить это без ответа на некоторое время, чтобы узнать, есть ли у других другие идеи. - person JasonAizkalns; 13.02.2015
comment
Конечно, я добавил функцию из одного из dygraph примеров, которая форматирует числа, добавляя K после тысяч и т. д. - person NicE; 13.02.2015

Расширение моего комментария выше полным примером:

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))
person JasonAizkalns    schedule 13.02.2015