- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 d3 和 json 格式的数据创建多折线图。出于某种原因,我的代码无法正常工作。我一直无法找出我做错的地方。网上查了很多例子,都没有用。我可能对代码视而不见。
在示例中,我只尝试绘制两条线,但不知道线的数量。所以我不能硬编码。有人对我做错的地方有任何提示吗?
Jsfiddle 代码链接。 http://jsfiddle.net/6qrcmsnj/3/
这里也是代码。
var w = 700;
var h = 600;
var pad = 80;
var time_format = d3.time.format("%I:%M:%S");
var gd = example_data(4);
var xScale = d3.time.scale()
.domain(d3.extent(gd[0].data, function(d) { return d[0]; }))
.range([pad, w - pad]);
var yScale = d3.scale.linear()
.domain([0, d3.max(gd[0].data, function(d) { return d[1]; })*2])
.range([h - pad, pad]);
var canvas = d3.select("body")
.append("svg")
.attr("class", "chart")
.attr("width", w)
.attr("height", h);
var xaxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.tickFormat(time_format);
var yaxis = d3.svg.axis()
.scale(yScale)
.orient("left");
var line = d3.svg.line()
.x(function(d) { return xScale(d[0]); })
.y(function(d) { return yScale(d[1]); })
.interpolate("linear");
// Just for a grey background.
canvas.append("rect")
.attr("width", "100%")
.attr("height", "100%")
.attr("fill", "#E8E8E8");
// Add x-axis.
canvas.append("g")
.attr("class", "axis")
.attr("transform","translate(0," + (h - pad) + ")")
.call(xaxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".15em")
.attr("transform", function(d) {
return "rotate(-65)"
});
// Add y-axis
canvas.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + pad + ", 0)")
.call(yaxis);
// Add line
canvas.selectAll("path")
.data(gd)
.enter().append("path")
.attr("d", line(gd.data))
.attr("stroke", "black")
.attr("stroke-width", 1)
.attr("fill", "none");
function example_data(val) {
if (val == "4") {
return [
{ "label" : "Data_1", "data" : [ [ 1404438592000, 21.09 ], [ 1404438593000, 10.85 ], [ 1404438594000, 15.74 ], [ 1404438595000, 20.86 ], [ 1404438596000, 10.83 ], [ 1404438597000, 8.92 ], [ 1404438598000, 23.68 ], [ 1404438599000, 20.68 ], [ 1404438600000, 14.68 ], [ 1404438601000, 4.65 ]] },
{ "label" : "Data_2", "data" : [ [ 1404438592000, 3.219 ], [ 1404438593000, 1.641 ], [ 1404438594000, 6.68 ], [ 1404438595000, 2.543 ], [ 1404438596000, 8.522 ], [ 1404438597000, 4.616 ], [ 1404438598000, 9.703 ], [ 1404438599000, 3.737 ], [ 1404438600000, 8.752 ], [ 1404438601000, 1.791 ]]}
];
}
}
最佳答案
@LarThoren 方法肯定会起作用,但对于 d3
我们希望避免显式循环。您的版本遗漏了两件事:
canvas.selectAll(".series") //<-- don't selectAll with "path", there are other paths in the axis and you selection needs to be more specific
.data(gd)
.enter()
.append("path")
.attr("d", function(d){ //<-- gd is out of scope here, you need to use the accessor function
return line(d.data);
})
.attr("class", "series")
.attr("stroke", "black")
.attr("stroke-width", 1)
.attr("fill", "none");
完整的工作代码:
var w = 700;
var h = 600;
var pad = 80;
var time_format = d3.time.format("%I:%M:%S");
var gd = example_data(4);
var xScale = d3.time.scale()
.domain(d3.extent(gd[0].data, function(d) { return d[0]; }))
.range([pad, w - pad]);
var yScale = d3.scale.linear()
.domain([0, d3.max(gd[0].data, function(d) { return d[1]; })*2])
.range([h - pad, pad]);
var canvas = d3.select("body")
.append("svg")
.attr("class", "chart")
.attr("width", w)
.attr("height", h);
var xaxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.tickFormat(time_format);
var yaxis = d3.svg.axis()
.scale(yScale)
.orient("left");
var line = d3.svg.line()
.x(function(d) { return xScale(d[0]); })
.y(function(d) { return yScale(d[1]); })
.interpolate("linear");
// Just for a grey background.
canvas.append("rect")
.attr("width", "100%")
.attr("height", "100%")
.attr("fill", "#E8E8E8");
// Add x-axis.
canvas.append("g")
.attr("class", "axis")
.attr("transform","translate(0," + (h - pad) + ")")
.call(xaxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".15em")
.attr("transform", function(d) {
return "rotate(-65)"
});
// Add y-axis
canvas.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + pad + ", 0)")
.call(yaxis);
// Add line
canvas.selectAll(".series")
.data(gd)
.enter()
.append("path")
.attr("d", function(d){
return line(d.data);
})
.attr("class", "series")
.attr("stroke", "black")
.attr("stroke-width", 1)
.attr("fill", "none");
function example_data(val) {
if (val == "4") {
return [
{ "label" : "Data_1", "data" : [ [ 1404438592000, 21.09 ], [ 1404438593000, 10.85 ], [ 1404438594000, 15.74 ], [ 1404438595000, 20.86 ], [ 1404438596000, 10.83 ], [ 1404438597000, 8.92 ], [ 1404438598000, 23.68 ], [ 1404438599000, 20.68 ], [ 1404438600000, 14.68 ], [ 1404438601000, 4.65 ]] },
{ "label" : "Data_2", "data" : [ [ 1404438592000, 3.219 ], [ 1404438593000, 1.641 ], [ 1404438594000, 6.68 ], [ 1404438595000, 2.543 ], [ 1404438596000, 8.522 ], [ 1404438597000, 4.616 ], [ 1404438598000, 9.703 ], [ 1404438599000, 3.737 ], [ 1404438600000, 8.752 ], [ 1404438601000, 1.791 ]]}
];
}
}
.axis path,
.axis line {
fill: none;
stroke: black;
shape-rendering: crispEdges;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
关于javascript - 在 nvd3 结构中使用 d3 和 json 的多折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32933326/
[INFO] [INFO] --- dependency-check-maven:4.0.2:check (default) @ realtimePaymachine --- [INFO] Centr
我开始从 NVD XML 提要转向 JSON 提要(因为从 2019 年 10 月起不再支持 XML)。现在我很难理解这些标签及其使用目的。 例如: “配置”中的“运算符(operator)”标签有什
我的 IT 产品已定义 CPE,例如:cpe:/o:microsoft:windows_vista:6.0:sp1:~-~home_premium~-~x64~- 我正在使用 NVD 数据源来获取所有
我们正在使用 jQuery,我在国家漏洞数据库中发现了以下 jQuery 漏洞: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-23
我正在尝试下载 NVD CVE。这是我的Python代码: import requests import re r = requests.get('https://nvd.nist.gov/vuln/
目前我正在使用 Angular-nvd3 图形来显示数据。但是,堆叠面积图 nvd3 图形类型正在切断数字和轴标签。模板图可查看here 。 y 轴数字和标签是主要关注点。下面是图形选项代码和问题的图
我们在项目中遇到以下错误,该URL何时返回? > Task :dependencyCheckAnalyze Verifying dependencies for project cckm-app
我在gitlab管道中使用gradle:5.6.2-jdk8 docker镜像。 gradle clean build 上面的命令因错误而失败: 无法下载元文件:https://nvd.nist.go
我是一名优秀的程序员,十分优秀!