javascript - 如何在下面的图上显示所有月份(轴刻度/中断)? (右)

标签 javascript r dygraphs r-dygraphs

根据提供的 R 代码和数据,使用 dygraph 库(js dygraph 的 R 接口(interface))

library(xts)
library(htmlwidgets)
library(dygraphs)

date <- c("2015-01-01", "2015-02-01", "2015-03-01", "2015-04-01", "2015-05-01", "2015-06-01", "2015-07-01", "2015-08-01", "2015-09-01", "2015-10-01","2015-11-01", "2015-12-01")

revenue <- c(81920, 75240, 70840, 66560, 72140, 71160, 73880, 73900, 69160, 75940, 76100, 76020)

rate <- c(5.10, 5.15, 4.41, 4.33, 4.39, 4.62, 4.58, 4.67, 4.40, 4.85, 4.83, 4.76)

data <- data.frame(date, revenue, rate)
data$date <- as.Date(data$date, format="%Y-%m-%d")

#convert data to xts object
data <- xts(x=data, order.by = data$date)

getMonth <- 'function(d){
               var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
               return monthNames[d.getMonth()];
               }'

customTicker <- 'function(min, max, pixels, opts) {
            return Dygraph.getDateAxis(min, max, Dygraph.Granularity.MONTHLY, opts, this);
          }'

dygraph(data, main = "Revenue & Rate") %>%
  dyAxis("x", rangePad = 40, drawGrid = FALSE, axisLabelFormatter=JS(getMonth)) %>%
  dyAxis("y", label = "Revenue", valueRange = c(0, 100000), independentTicks = TRUE)%>%
  dyAxis("y2", label = "Rate ", valueRange = c(0, 10), independentTicks = TRUE) %>%
  dyBarSeries('revenue', label="revenue",color = "#0099F9") %>% 
  dySeries('rcrate', label="rate",color = "#15354A", axis=('y2'), strokeWidth=4, pointSize=3, drawPoints=TRUE)

output

如何让所有月份显示在日期轴上,而不只是选择几个月份(在最大绘图大小下,显示所有月份。我希望所有月份始终显示,而不管绘图大小如何)。

ticker=JS(customTicker) dyAxis("x" ...) 中的参数似乎不起作用。 Probs 与 Dygraph.getDateAxis 有关...(我没有正确引用当前 dygraph 对象?)

另一位用户使用js版本询问了这个问题,How to show all months with dygraphs?

这是 fiddle :https://jsfiddle.net/wvsj8toc/3/

更新:

根据文档,股票代码参数采用(值,标签)对数组。我尝试在 2015 年 1 月 1 日至 2015 年 12 月 1 日运行 fiddle ,并使用 console.log 获取以下数组(对于股票行情指示器的返回值)。我将此值作为股票代码参数放入 dyAxis 中,它起作用了。

[{ v: 1420059600000,标签:“一月”},{ v:1422738000000,标签:“二月”},{ v:1425157200000,标签:“三月”},{ v:1427835600000,标签:“四月” }, { v: 1430427600000, 标签: "五月"}, { v: 1433106000000, 标签: "六月"}, { v: 1435698000000, 标签: "七月"}, { v: 1438376400000, 标签: "八月"}, { v: 1441054800000, 标签: "九月"}, { v: 1443646800000, 标签: "十月"}, { v: 1446325200000, 标签: "十一月"}, { v: 1448917200000, 标签: "十二月"}];

customTicker <- 'function(a, b, pixels, opts) {
return [{    v: 1420059600000, label: "Jan"}, {    v: 1422738000000, label: "Feb"}, {    v: 1425157200000, label: "Mar"}, {    v: 1427835600000, label: "Apr"}, {    v: 1430427600000, label: "May"}, {    v: 1433106000000, label: "Jun"}, {    v: 1435698000000, label: "Jul"}, {    v: 1438376400000, label: "Aug"}, {    v: 1441054800000, label: "Sep"}, {    v: 1443646800000, label: "Oct"}, {    v: 1446325200000, label: "Nov"}, {    v: 1448917200000, label: "Dec"}];}
'
  
dygraph(data, main = "Revenue & Rate") %>%
  dyAxis("x", rangePad = 40, drawGrid = FALSE, ticker= JS(customTicker), axisLabelFormatter=JS(getMonth)) %>%
 

我如何生成这个数组?

引用文献:

https://dygraphs.com/options.html#ticker https://www.rdocumentation.org/packages/dygraphs/versions/1.1.1.6/topics/dyAxis

最佳答案

假设您有一个日期向量(就像您在问题中所做的那样),您可以像这样创建名称-值配对数组。请记住,Javascript 对于日期有点棘手!所以一个小小的改变就可能让一切崩溃。

如果您有任何疑问,请告诉我。

ticker = "function(a, b) {
          cDts = ['2015-01-01', '2015-02-01', '2015-03-01', '2015-04-01', 
                  '2015-05-01', '2015-06-01', '2015-07-01', '2015-08-01',
                  '2015-09-01', '2015-10-01','2015-11-01', '2015-12-01'];
          x = [];
          for(i = 0; i < cDts.length; i++) {
            d = Date.parse(cDts[i]);
            e = new Date(cDts[i]);
            e.setDate(e.getDate() + 1); /*assuming you're not in Greenwich, England*/
            lab = e.toLocaleString('default', {month: 'short'});
            x[i] = {'v': d, 'label': lab};
          }
          return x
         }"

现在是具有整个功能的股票代码:

dygraph(data, main = "Revenue & Rate") %>%
  dyAxis("x", rangePad = 40, drawGrid = FALSE, 
         axisLabelFormatter=JS(getMonth),
         ticker = "function(a, b) {
          cDts = ['2015-01-01', '2015-02-01', '2015-03-01', '2015-04-01', 
                  '2015-05-01', '2015-06-01', '2015-07-01', '2015-08-01',
                  '2015-09-01', '2015-10-01','2015-11-01', '2015-12-01'];
          x = [];
          for(i = 0; i < cDts.length; i++) {
            d = Date.parse(cDts[i]);
            e = new Date(cDts[i]);
            e.setDate(e.getDate() + 1); /*assuming you're not in Greenwich, England*/
            lab = e.toLocaleString('default', {month: 'short'});
            x[i] = {'v': d, 'label': lab};
          }
          return x
         }") %>%
  dyAxis("y", label = "Revenue", 
         valueRange = c(0, 100000), independentTicks = TRUE)%>%
  dyAxis("y2", label = "Rate ",
         valueRange = c(0, 10), independentTicks = TRUE) %>%
  dyBarSeries('revenue', label="revenue",color = "#0099F9") %>% 
  dySeries('rate', label="rate", color = "#15354A", axis=('y2'), 
           strokeWidth=4, pointSize=3, drawPoints=TRUE)

这是 R 和 JS 调用 dygraph 的结果:

enter image description here

关于javascript - 如何在下面的图上显示所有月份(轴刻度/中断)? (右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71706166/

相关文章:

javascript - 闭包是如何造成内存泄漏的?

r - 将平均值添加到 ggplot 中的直方图

R Cronbach's alpha -- rbindlist 错误

javascript - 更改多个 dygraph 图表的系列可见性

javascript - Jasmine 测试总是通过

javascript - 通过 chrome 扩展将文件作为表单数据上传

php - 没有表格就提交表格

python - 从数据 : overlapping time intervals? 中删除行

r - 当 NA 时,有条件地对 dygraph 时间序列区域进行阴影处理

r - 如何在 R 中的 dygraph 标题中使用 UTF-8 字符