WΔ_*_*WΔ_ 7 d3.js ecmascript-6
我有一个d3可视化,可以正常使用当前的稳定版本(3.x)然而我想实现平移和缩放功能,所以我升级到4.alpha.
随着语法的改变,这会引发很多错误.我更新了变量名称,但是还有一个与以下代码的第二行有关的错误:
function type(d) {
d.date = formatDate.parse(d.date);
d.Flux = +d.Flux;
return d;
}
Run Code Online (Sandbox Code Playgroud)
通过浏览器打开页面源,我看到formatDate.parse is not a function.可视化目前无法呈现.
我试过梳理D3 4.alpha 文档,但没有用.
进一步在代码中,formatDate定义如下:
var formatDate = d3.timeFormat("%d-%b-%y");
Run Code Online (Sandbox Code Playgroud)
我很高兴发布原始代码,大约70行,有点hacky tho:
var margin = {top: 20, right: 20, bottom: 30, left: 50},
width = 1400// - margin.left - margin.right,
height = 1400// - margin.top - margin.bottom;
var formatDate = d3.timeFormat("%d-%b-%y");
var x = d3.scaleLinear()
.range([0, width]);
var y = d3.scaleLinear()
.range([height, 0]);
var line = d3.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.Flux); });
var svg = d3.selectAll("#ExoPlanet, #ExoPlanet2").append("svg")
.attr("width", '90%')
.attr("height", '70%')
.attr('viewBox','0 0 '+Math.min(width,height)+' '+Math.min(width,height))
.attr('preserveAspectRatio','xMinYMin')
.append("g")
.call(d3.zoom()
.scaleExtent([1 / 2, 4])
.on("zoom", zoomed)) ;
function zoomed() {
var transform = d3.event.transform;
circle.attr("transform", function(d) {
return "translate(" + transform.applyX(d[0]) + "," + transform.applyY(d[1]) + ")";
});
}
d3.tsv("/FluxTime.tsv", type, function(error, data) {
if (error) throw error;
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain(d3.extent(data, function(d) { return d.Flux; }));
svg.selectAll("dot")
.data(data)
.enter().append("circle")
.attr("r", 2.0)
.attr("cx", function(d) { return x(d.date); })
.attr("cy", function(d) { return y(d.Flux); })
.attr("stroke", "#CE9A76");
});
function type(d) {
d.date = formatDate.parse(d.date));
d.Flux = +d.Flux;
return d;
Run Code Online (Sandbox Code Playgroud)
}
数据集中前8个条目的屏幕截图:
Ger*_*ado 11
在D3 3.5中,你可以解析你的方式,设置时间格式......
var formatDate = d3.time.format("%d-%b-%y");
Run Code Online (Sandbox Code Playgroud)
...然后使用此时间格式进行解析:
d.date = formatDate.parse(d.date);
Run Code Online (Sandbox Code Playgroud)
但是,使用D3 4.0,您必须以不同的方式解析日期,使用timeParse:
var parseTime = d3.timeParse("%d-%b-%y");
Run Code Online (Sandbox Code Playgroud)
然后,修改您的访问者功能:
function type(d) {
d.date = parseTime(d.date);
d.Flux = +d.Flux;
return d;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10363 次 |
| 最近记录: |