Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3线图问题_Javascript_D3.js - Fatal编程技术网

Javascript 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

我有一个d3线图,它不断地用新的数据集更新。问题是我的线图是在一些矩形块上面绘制的。页面加载时,我的线条图始终位于矩形的前面,但在刷新页面后,线条图位于矩形块的后面。你们谁能帮我解决这个问题

我的代码是这样设置的

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选择的低级展开做什么。这里有很多,但分层只是问题之一。你已经建立了一个复杂的非工作系统,现在正试图调试“超出你的工资等级”。