我从这里学习了如何为 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 有点迷茫。非常感谢!