d3.js - d3js 将音量条添加到折线图
问题描述
我用 d3js 构建了这个折线图:jsfiddle
示例数据:
{
date: '18-May-18',
close: 281755783529,
volume: 11792035643,
notes: null
}
如何使用数据中的“体积”值绘制与每个日期对应的矩形条?带有音量条的折线图看起来像这样:
谢谢!
解决方案
因为volume
使用不同的 Y 范围,您需要为此定义一个新的 yScale
var yVolume = d3.scaleLinear().range([height, 0]);
yVolume.domain([0, d3.max(data, function(d) { return d.volume; })]);
为这个比例画一个右轴
var yAxisVol = d3.axisRight(yVolume).ticks(10);
svg.append("g")
.attr("class", "yaxisVol")
.attr("transform", `translate(${width},0)`)
.call(yAxisVol);
然后在正确的位置绘制矩形
svg.append("g").attr("class", "barsVol")
.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("fill", "yellow")
.attr("x", function(d) { return x(new Date(d.date.getTime()-11*60*60*1000)); })
.attr("y", function(d) { return yVolume(d.volume); })
.attr("height", function(d) { return height - yVolume(d.volume); })
.attr("width", function(d) {
return x(new Date(d.date.getTime()+11*60*60*1000)) -
x(new Date(d.date.getTime()-11*60*60*1000)); });
矩形的宽度为 1“天”(22 小时)。
向组中添加一个剪辑矩形,barsVol
或将 x 域扩展为左右各一天。
推荐阅读
- javascript - TypeError:person.map 不是函数
- google-colaboratory - IBM Cloud Watson (NLU) 情感服务错误
- python - 错误消息:无法从 'pylab 导入名称'hold'
- android - Android 芯片:如何更改文本垂直填充?
- c# - 当您拥有相关实体的 ID 时如何映射相关实体的属性
- vert.x - 如何更改 quarkus-vertx eventBus ClusterManager 选项
- android - 更新 gradle 错误我在添加库并更新时遇到问题
- azure - 在子路径上部署服务而不在 Kubernetes 中重定向
- c# - 带 alpha 的混合模式
- matlab - 循环问题Matlab CVX的问题效率低下