gpt4 book ai didi

javascript - d3折线图,未画线

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:52 25 4
gpt4 key购买 nike

我正在尝试模仿简单的 block 示例 here ,但是我似乎只绘制了 x 和 y 轴,没有线条的符号。我通过数组而不是 tsv 文件以不同的方式加载数据,尽管我已经梳理了几次并且我认为所有内容都以相同的方式输入到秤和线路中。非工作 JSBin here :

<!DOCTYPE html>
<html>
<head>
<script src="https://d3js.org/d3.v4.min.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<svg width="960" height="500"></svg>

<script>
var data = [["2014-12-31", 0.31999999999999],["2014-11-30", 2.71],["2014-10-31", -4.05],["2014-09-30", 4.22],["2014-08-31", 2.17],["2014-07-31", 5.36],["2014-06-30", 3.99],["2014-05-31", 3.52],["2014-04-30", -.46],["2014-03-31", -8.22],["2014-02-28", 5.89]]

var svg = d3.select("svg"),
margin = {top: 20, right: 20, bottom: 30, left: 50},
width = +svg.attr("width") - margin.left - margin.right,
height = +svg.attr("height") - margin.top - margin.bottom,
g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");



var parseTime = d3.timeParse("%Y-%m-%d");

var x = d3.scaleTime().rangeRound([0, width]);
var y = d3.scaleLinear().rangeRound([height, 0]);

var data = data.map(function(d){
return [parseTime(d[0]), +d[1]]
});
var line = d3.line()
.x(function(d){
return d[0];
})
.y(function(d){
return d[1];
});

x.domain(d3.extent(data, function(d) { return d[0]; }));
y.domain(d3.extent(data, function(d) { return d[1]; }));

g.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x))
.select(".domain")
.remove();

g.append("g")
.call(d3.axisLeft(y))
.append("text")
.attr("fill", "#000")
.attr("transform", "rotate(-90)")
.attr("y", 50)
.attr("dy", "0.9em")
.attr("text-anchor", "end")
.text("Price ($)");

g.append("path")
.datum(data)
.attr("fill", "none")
.attr("stroke", "steelblue")
.attr("stroke-linejoin", "round")
.attr("stroke-linecap", "round")
.attr("stroke-width", 3)
.attr("d", line);
</script>

</body>
</html>

有什么明显的事情表明我做错了吗?

最佳答案

问题是您没有缩放数据以正确适应 svg 坐标空间:

var line = d3.line()
.x(function(d){
return d[0];
})
.y(function(d){
return d[1];
});

这部分代码设置数据的绘制坐标,并且您当前正在使用数据值作为 x 和 y svg 值,而不进行任何缩放。您需要根据您的规模来缩放它:

var line = d3.line()
.x(function(d){
console.log(x(d[0])); return x(d[0]);
})
.y(function(d){
return y(d[1]);
});

这将使您的图表能够按预期绘制。

关于javascript - d3折线图,未画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com