如何格式化 R 中的 dygraphs 标签 - 逗号分隔千位?
How to format dygraphs labels in R - comma separate thousands place?
我正在使用 htmlwidget
dygraphs for R。我的系列跨越大约 0 到 150,000 的范围。
我试过使用 dyOptions(labelsKMB = "K")
——这会将 y 轴格式化为 0K, 20K, 40K, ...
——但是,结果,图例也被格式化为四舍五入的值——例如22K, 42K, etc.
.
我想知道以下是否可行以及如何实现它们:
- 以千为单位格式化 y 轴,但将图例保留为实际值
(非四舍五入)值?
- 在 y 轴和图例中的一个(或两个)上使用逗号分隔的千位格式?也就是说,不是在 y 轴上显示
10000
,而是将其格式化为 10,000
——同样,图例中的实际值(例如 2523
被格式化为 2,523
.
我正在将其推送到交互式 RMarkdown 文档中。也许自定义 CSS 是一种方法?
您可以指定一个特定的javascript函数来独立设置x轴的标签。作为示例,您可以通过以下方式修改 dygraph 演示的 y 轴:
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
example
用一个完整的例子来扩展我上面的评论:
library(dygraphs)
library(htmlwidgets)
FUNC_JSFormatNumber <- "function(x) {return x.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ',')}"
dygraph(ldeaths) %>%
dyAxis("y", axisLabelFormatter=JS(FUNC_JSFormatNumber), valueFormatter=JS(FUNC_JSFormatNumber))
我正在使用 htmlwidget
dygraphs for R。我的系列跨越大约 0 到 150,000 的范围。
我试过使用 dyOptions(labelsKMB = "K")
——这会将 y 轴格式化为 0K, 20K, 40K, ...
——但是,结果,图例也被格式化为四舍五入的值——例如22K, 42K, etc.
.
我想知道以下是否可行以及如何实现它们:
- 以千为单位格式化 y 轴,但将图例保留为实际值 (非四舍五入)值?
- 在 y 轴和图例中的一个(或两个)上使用逗号分隔的千位格式?也就是说,不是在 y 轴上显示
10000
,而是将其格式化为10,000
——同样,图例中的实际值(例如2523
被格式化为2,523
.
我正在将其推送到交互式 RMarkdown 文档中。也许自定义 CSS 是一种方法?
您可以指定一个特定的javascript函数来独立设置x轴的标签。作为示例,您可以通过以下方式修改 dygraph 演示的 y 轴:
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
example
用一个完整的例子来扩展我上面的评论:
library(dygraphs)
library(htmlwidgets)
FUNC_JSFormatNumber <- "function(x) {return x.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ',')}"
dygraph(ldeaths) %>%
dyAxis("y", axisLabelFormatter=JS(FUNC_JSFormatNumber), valueFormatter=JS(FUNC_JSFormatNumber))