Javascript D3线图问题
我有一个d3线图,它不断地用新的数据集更新。问题是我的线图是在一些矩形块上面绘制的。页面加载时,我的线条图始终位于矩形的前面,但在刷新页面后,线条图位于矩形块的后面。你们谁能帮我解决这个问题 我的代码是这样设置的Javascript D3线图问题,javascript,d3.js,Javascript,D3.js,我有一个d3线图,它不断地用新的数据集更新。问题是我的线图是在一些矩形块上面绘制的。页面加载时,我的线条图始终位于矩形的前面,但在刷新页面后,线条图位于矩形块的后面。你们谁能帮我解决这个问题 我的代码是这样设置的 function drawRect(SVG, cData, type) { let selector = '.ca'; let className = 'c a'; let tcHeight = verticalS
function drawRect(SVG, cData, type) {
let selector = '.ca';
let className = 'c a';
let tcHeight = verticalSize + MIN_CELL_PADDING;
let getTranslateString = function (index) {
let yVal = columnHeight - ((index + 1) * tcHeight);
return `translate(${xVal}, ${yVal})`;
let rects = d3.select(columnSVG)
.selectAll(selector)
.data(cData.filter((d) => {
return d;
}));
rects.enter()
.append('g')
.attr('class', className)
.attr('transform', (d, ix) => {
return getTranslateString(ix);
})
.each(function () {
d3.select(this)
.append('rect')
.attr('width', cellSize)
.attr('height', verticalSize)
.attr('rx', 4)
.attr('ry', 4)
.attr('time', (d) => {
return cData.date;
})
.attr('fill', (d) => {
return changeColor(d);
});
});
rects.transition()
.attr('transform', (d, ix) => {
return getTranslateString(ix);
});
rects.each(function (d) {
let node = d3.select(this);
node.selectAll('rects').transition()
.attr('width', cellSize)
.attr('height', verticalSize)
.attr('rx', 4)
.attr('ry', 4)
}
function drawOline(aData, dData, time) {
let aLine = d3.svg.line()
.defined((d) => {
return !isNaN(d.Ptile);
})
.x((d) => {
return ptime(moment(d.day).utc());
})
.y((d) => {
return aY(d.Ptile);
});
let dLine = d3.svg.line()
.defined((d) => {
return !isNaN(d.Ptile);
})
.x((d) => {
return ptime(moment(d.day).utc());
})
.y((d) => {
return dY(d.Ptile);
});
if (aData && aData.length > 0) {
if (g.select('.aline')[0][0] == null) {
g.append('g')
.append('path')
.datum(aData)
.attr('class', 'line aline')
.attr('fill-opacity', 1.0)
.attr('d', aline);
} else {
g.select('.aline')
.datum(aData)
.transition()
.attr('fill-opacity', 1.0)
.attr('d', aline);
}
} else {
g.select('.aline')
.transition()
.attr('fill-opacity', 1.0)
.attr('d', aline);
}
if (dData && dData.length > 0) {
if (g.select('.dline')[0][0] == null) {
g.append('g')
.append('path')
.datum(dData)
.attr('class', 'line dline')
.attr('fill-opacity', 1.0)
.attr('d', dline);
} else {
g.select('.dline')
.datum(dData)
.transition()
.attr('fill-opacity', 1.0)
.attr('d', dline);
}
} else {
g.select('.dline')
.transition()
.attr('fill-opacity', 1.0)
.attr('d', dline);
}
}
某些SVG对象被其他对象遮挡(隐藏)(例如,直线被矩形遮挡,反之亦然)的视觉效果很大程度上取决于它们的绘图顺序。与HTML/CSS不同,SVG没有真正的z-index
或“顶部是什么?”指示器
诀窍通常是把你想看的东西画在最上面。然而,这并不总是方便的。例如,您可能无法在每次重绘块时重绘线
保存对象的视觉顺序的一种方法是将对象放入
组中,即使在重绘对象时也是如此。组的顺序不需要更改,即使项目已更新。例如:
var rectsG = svg.append('g').attr('class', 'rects');
var linesG = svg.append('g').attr('class', 'lines');
然后,将您的附件直接添加到各个组,而不是绘制到全局svg
元素中。它们将充当层:
linesG.append('line')
...more here...
rectsG.append('rect')
...more here...
因为组在文档中是自上而下排序的,所以绘制或重新绘制其组成元素的顺序实际上并不重要。
容器的顺序将决定视觉遮挡 某些SVG对象被其他对象(例如,直线和矩形,反之亦然)遮挡(隐藏)的视觉效果很大程度上取决于它们的绘图顺序。与HTML/CSS不同,SVG没有真正的z-index
或“顶部是什么?”指示器
诀窍通常是把你想看的东西画在最上面。然而,这并不总是方便的。例如,您可能无法在每次重绘块时重绘线
保存对象的视觉顺序的一种方法是将对象放入
组中,即使在重绘对象时也是如此。组的顺序不需要更改,即使项目已更新。例如:
var rectsG = svg.append('g').attr('class', 'rects');
var linesG = svg.append('g').attr('class', 'lines');
然后,将您的附件直接添加到各个组,而不是绘制到全局svg
元素中。它们将充当层:
linesG.append('line')
...more here...
rectsG.append('rect')
...more here...
因为组在文档中是自上而下排序的,所以绘制或重新绘制其组成元素的顺序实际上并不重要。
容器的顺序将决定视觉遮挡 你必须提供更多的代码。你必须提供更多的代码。谢谢@jonathon。我会试试orderingHello Jonathon,我用过ordering,但仍然不起作用。我提供了更多的代码。你能帮我一下我的密码还有什么问题吗。谢谢你advance@user6860877我将更详细地查看代码,但我可以立即看到多个错误。例如,您不能附加rects
。属性rx
和ry
与您认为的不同。没有属性时间
。等等。不要认为它不起作用的原因是
分层技巧的失败。这里有很多原因。至少修复rect
不读取rects
rx
和ry
如果您试图使矩形变圆,并使用变换将其移动到位,则可以工作。无法计算该翻译,因为您没有提供getTranslateString
。我说不出你想用(不是合法的SVG)time
attr和D3选择的低级展开做什么。这里有很多,但分层只是问题之一。你已经建立了一个复杂的非工作系统,现在正试图调试“超出你的工资等级”。谷歌高尔定律。谢谢@jonathon。我会试试orderingHello Jonathon,我用过ordering,但仍然不起作用。我提供了更多的代码。你能帮我一下我的密码还有什么问题吗。谢谢你advance@user6860877我将更详细地查看代码,但我可以立即看到多个错误。例如,您不能附加rects
。属性rx
和ry
与您认为的不同。没有属性时间
。等等。不要认为它不起作用的原因是
分层技巧的失败。这里有很多原因。至少修复rect
不读取rects
rx
和ry
如果您试图使矩形变圆,并使用变换将其移动到位,则可以工作。无法计算该翻译,因为您没有提供getTranslateString
。我说不出你想用(不是合法的SVG)time
attr和D3选择的低级展开做什么。这里有很多,但分层只是问题之一。你已经建立了一个复杂的非工作系统,现在正试图调试“超出你的工资等级”。