4

我从这里学习了如何为 Dygraphs 创建自定义绘图仪: 使用 dygraphs 包在 R 中创建条形图, 感谢:https ://stackoverflow.com/users/1466144/kero

这是我能够创建的:

library(xts)
library(dygraphs)
library(lubridate)

mychart <- xts(matrix(c(5,-4,0,-3,2,-5,3,4,-4,2),nrow=5,ncol=2), 
order.by = lubridate::ymd(c("2015-01-01", "2015-02-01", "2015-03-01",
                            "2015-04-01", "2015-05-01")))
colnames(mychart) <- c('Blue','Orange')

dygraph(mychart) %>%
  dyOptions(colors= c('#0c93d6','#f5b800'), stackedGraph=TRUE,
            plotter = 
            "function barChartPlotter(e) {
            var ctx = e.drawingContext;
            var points = e.points;
            var y_bottom = e.dygraph.toDomYCoord(0);

            var bar_width = 2/3 * (points[1].canvasx - points[0].canvasx);
            ctx.fillStyle = e.color;

            for (var i = 0; i < points.length; i++) {
            var p = points[i];
            var center_x = p.canvasx;

            ctx.fillRect(center_x - bar_width / 2, p.canvasy,
            bar_width, y_bottom - p.canvasy);
            ctx.strokeRect(center_x - bar_width / 2, p.canvasy,
            bar_width, y_bottom - p.canvasy);
            }
            }")

但我面临两个问题:

(1) 图表在 x 轴的开始和结束处被裁剪。我该如何解决?

(2) 当存在负值和正值时,我希望它显示从零起点开始的两个值。PerformanceAnalytics 包中 chart.StackedBar 的实现就是一个例子。

这是一个示例,说明我希望我的 Dygraphs 图表在正负值添加方面看起来如何:

library(PerformanceAnalytics)
chart.StackedBar(mychart, colorset=c('#0c93d6','#f5b800'))

我发现 Dygraphs for R 真的很棒,但我对 javascript 有点迷茫。非常感谢!

4

0 回答 0