javascript - 非常简单的 d3.js 折线图不在浏览器中显示
问题描述
出于某种原因,即使我使用来自此来源的代码片段,我也无法显示非常简单的折线图:https ://www.dashingd3js.com/svg-paths-and-d3js
我对d3相当陌生。
我意识到源代码片段没有 xScale 或 yScale 变量(StackOverflow 上的一些解决方案推荐)所以我尝试将它们合并到代码片段中但无济于事......我不确定我是否正确使用了 scale 函数. 我已经获得了要显示的 svg 路径版本,但出于交互性原因,我需要将其转换为 d3 脚本。
<script src="d3.min.js"></script>
<script>
var lineData = [ { "x": 1, "y": 5}, { "x": 20, "y": 20},
{ "x": 40, "y": 10}, { "x": 60, "y": 40},
{ "x": 80, "y": 5}, { "x": 100, "y": 60}];
var xScale = d3.scale.linear()
.domain([0, 300])
.range([0, 300]);
var yScale = d3.scale.linear()
.domain([0, 300])
.range([0, 300]);
var lineFunction = d3.svg.line()
.x(function(d) { return xScale(d.x); })
.y(function(d) { return yScale(d.y); })
.interpolate("linear");
var svgContainer = d3.select("body").append("svg")
.attr("width", 300)
.attr("height", 300);
var lineGraph = svgContainer.append("path")
.attr("d", lineFunction(lineData))
.attr("stroke", "blue")
.attr("stroke-width", 3)
.attr("fill", "none");
</script>
解决方案
您正在使用已弃用的 D3 版本 3 代码。您可以查看此链接以查看 d3 的哪些部分在 V4 和 v5 中发生了变化。
在您的代码示例中:
d3.scale.linear()
应该d3.scaleLinear()
d3.svg.line()
应该d3.line()
.interpolate("linear")
应该.curve(d3.curveBasis)
另外,请确保您的脚本在<body>
元素内,而不是在<head>
这是一个更正和测试的版本:
var lineData = [ { "x": 1, "y": 5}, { "x": 20, "y": 20},
{ "x": 40, "y": 10}, { "x": 60, "y": 40},
{ "x": 80, "y": 5}, { "x": 100, "y": 60}];
var xScale = d3.scaleLinear()
.domain([0, 300])
.range([0, 300]);
var yScale = d3.scaleLinear()
.domain([0, 300])
.range([0, 300]);
var lineFunction = d3.line()
.x(function(d) { return xScale(d.x); })
.y(function(d) { return yScale(d.y); })
.curve(d3.curveBasis);
var svgContainer = d3.select("body").append("svg")
.attr("width", 300)
.attr("height", 300);
var lineGraph = svgContainer.append("path")
.attr("d", lineFunction(lineData))
.attr("stroke", "blue")
.attr("stroke-width", 3)
.attr("fill", "none");
推荐阅读
- node.js - 电子 NPM 错误!缺少脚本:开始
- apache-flink - Flink jdbc sink 未在 web ui 中提交
- flutter - 如何根据列表中的数据在颤动中渲染多个小部件?
- angular - Angular:在运行时评估自定义字符串
- java - REST API 使用 JAX-RS 同时在 JSON 数组中发送多个错误
- entity-framework - linq 使用由多个属性组成的属性
- c++ - 在 HackerRank 上攀登排行榜
- c# - 使用 Microsoft.AspNetCore.OData v8.0.0-preview2 时 Swagger 失败
- java - scp 命令在 java 中的进程生成器中不起作用
- react-native - React Native,Tensorflow js,从本地存储加载模型