javascript - 使用 D3.js v5 在两条曲线之间着色
问题描述
我试图遮蔽两条曲线(时间序列)之间的区域。我改编了一个在C3.js fill area between curves找到的示例,但由于我的工作,我需要使用 D3.js 版本 5,并且从 D3 版本 4 开始,一些方法已被其他方法替换。
这是我使用 D3.js v3 的代码:
function fillArea(){
var indexies = d3.range( items.length );
var yscale = linechart.internal.y;
var xscale = linechart.internal.x;
var area = d3.svg.area()
.interpolate("linear")
.x(function(d) {return xscale(new Date(items[d].Index)); })
.y0(function(d) { return yscale(items[d].ymin_sd); })
.y1(function(d) { return yscale(items[d].ymax_sd); });
d3.select("#chart svg g").append('path')
.datum(indexies)
.attr('class', 'area')
.attr('fill', 'red')
.attr('d', area);
}
这是我适应 D3 v5 的代码,具有我需要的版本,但没有出现阴影。
function fillArea(){
var indexies = d3.range( items.length );
var yscale = linechart.internal.y;
var xscale = linechart.internal.x;
var area = d3.area()
.curveCardinal()
.x(function(d) {return xscale(new Date(items[d].Index)); })
.y0(function(d) { return yscale(items[d].ymin_sd); })
.y1(function(d) { return yscale(items[d].ymax_sd); });
d3.select("#chart svg g").append('path')
.datum(indexies)
.attr('class', 'area')
.attr('fill', 'red')
.attr('d', area);
}
这是适用于 D3 v5的jsfiddle 。
任何人都可以帮助我在我的代码中做错了什么?
解决方案
首先,我认为您可能在第二个 jsfiddle 链接上导入了错误版本的 d3.js 和 c3.js。js fiddle 链接似乎正在导入旧版本的 c3 和 d3,因此您的示例没有在那里运行。如果您通过 CDN 导入它们,则应该使用这 2 个。
https://d3js.org/d3.v5.min.js
和
https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js
https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css
另外,我认为您不能将 .area() 和 .curveCardinal() 链接在一起。
你只能这样做:
d3.area()
或这个。
d3.curveCardinal()
如果您删除 .curveCardinal(),您将意识到您的代码确实有效
var area = d3.area()
.x(function(d) {return xscale(new Date(items[d].Index)); })
.y0(function(d) { return yscale(items[d].ymin_sd); })
.y1(function(d) { return yscale(items[d].ymax_sd); });
从 d3.js v4 开始就不需要了.interpolate('linear')
,因为默认情况下是线性插值。
推荐阅读
- react-native - 如何在 react-native 中获得 webview 上的滑动手势?
- java - 在上传到firebase android之前压缩图像
- php - PHP和MySQL中的随机用户ID
- python - 用 Celery 调度 Django 方法
- node.js - Node.js(Express.js)中用于登录的Access Token和Refresh Token的概念和用法
- amazon-web-services - 使用 boto3 在多个区域启动 EC2
- python - aiohttp-graphql AsyncioExecutor GraphQLLocatedError: 'NoneType' 对象不可调用
- java - Android Firebase如何处理实时服务器到本地数据库的连接
- java - Maven 忽略 ParameterizedTest
- java - SAP Cloud Foundry 中的远程调试