我正在尝试使用d3创建一个简单的折线图,但由于某种原因,它在线和某个中点之间填充。这是输出:
我的javascript如下:
var width = 500,
height = 500,
padding = 10;
var extentVisits = d3.extent(visits, function(obj){
return obj['visits'];
});
var extentDates = d3.extent(visits, function(obj){
return obj['datestamp'];
});
var yScale = d3.scale.linear()
.domain(extentVisits)
.range([height - padding, padding]);
var xScale = d3.time.scale()
.domain(extentDates)
.range([0, width]);
var line = d3.svg.line()
.x(function(d) {
return xScale(d['datestamp']);
})
.y(function(d) {
return yScale(d['visits']);
})
d3.select('#chart')
.append('svg')
.attr('width', width)
.attr('height', height)
.append("g")
.attr("transform", "translate(5,5)")
.append('path')
.datum(visits)
.attr("class", "line")
.attr('d', line);
访问的形式如下:
visits = [{'datestamp': timestampA, 'visits': 1000},
{'datestamp': timestampB, 'visits': 1500}]
我在d3很新,所以我确信它很简单,但它让我发疯了。
提前致谢。
答案 0 :(得分:20)
您所看到的中点只是第一点和最后一点的连接。这是因为您创建的路径(默认情况下)具有黑色填充。即使它是一条开放路径(即第一个和最后一个点实际上没有连接),如果填充,它将显示为关闭:
填充操作通过执行填充操作来填充打开的子路径,就好像在路径中添加了一个额外的“closepath”命令,以将子路径的最后一个点与子路径的第一个点连接起来。
来源:SVG specification来自this SO answer
这里的解决方案是消除填充,而是设置一个笔划。您可以使用d3或通过CSS直接在JS中执行此操作。
path.line
{
fill: none;
stroke: #000;
}
Demo showing both the CSS and JS method (commented out) on jsFiddle