javascript - D3 轴未更新

标签 javascript d3.js

我刚刚了解 D3 并尝试使用它绘制一些图表。我有一个条形图,x 轴是顺序的,y 轴是定量的。在调用 update_bar_chart 时,我希望 x 轴和 y 轴以及条形图相应更新。然而,虽然条形图正在更新,但 x 轴和 y 轴却没有更新。

这是代码:

function dbc_update_bar_chart(metric,sc) {
        data.length = 0;
        url = 'DBFetch.php/dbc_bar_chart/:'+metric+'/:'+sc
                    $.ajax({
                                    type:   'get',
                                    url:    url,
                                    success: function(jdata, status, jqXHR) {
                                        data = JSON.parse(jdata)
                                        //console.log(data)
                                        bar_chart.setSeries(data)
                                        bar_chart.x(d3.scale.ordinal().rangeRoundBands([0, (width - margins.left - margins.right)]).domain(data.map(function(d) {return d[0];})))
                                                   .y(d3.scale.linear().range([(height - margins.top - margins.bottom), 0]).domain([0,d3.max(data, function(d) {return d[1]; })]));                             
                                        renderAxes(_svg);
                                    }
                    })
}

    function renderAxes(svg) {
        xAxis = d3.svg.axis()
                            .scale(_x)
                            .orient("bottom");

        yAxis = d3.svg.axis()
                            .scale(_y)
                            .orient("left");
        if (!axesG) {
            console.log("Entered init axes")
            axesG = svg.append("g")
                    .attr("class", "bar_axes");

            axesG.append("g")
                    .attr("class", "bar_xaxis")
                    .attr("transform", function () {
                        return "translate(" + xStart() + "," + yStart() + ")";
                    })
                    .call(xAxis);

            axesG.append("g")
                    .attr("class", "bar_yaxis")
                    .attr("transform", function () {
                        return "translate(" + xStart() + "," + yEnd() + ")";
                    })
                    .call(yAxis);
        }
        else{
            console.log("Entered update axes")
            svg.selectAll(".bar_axes bar_xaxis").transition()
                .duration(750)
                .call(xAxis);

            console.log("updated x-axes")
            svg.selectAll(".bar_axes bar_yaxis").transition()
                    .duration(750)
                    .call(yAxis);
            console.log("updated y-axes")        
        }
    }

最佳答案

现有轴的选择器是错误的。如果你想显式指定父元素和子元素,它们应该是

svg.selectAll(".bar_axes > .bar_xaxis")
svg.selectAll(".bar_axes > .bar_yaxis")

但是,您也可以直接选择元素:

svg.selectAll(".bar_xaxis")
svg.selectAll(".bar_yaxis")

关于javascript - D3 轴未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930903/

相关文章:

javascript - Angular2 指令基于动态添加的 css 类

javascript - 如果浏览器中禁用了 javascript,则可以选择

javascript - jqGrid 的排序/过滤问题

d3.js - 删除或清除以前绘制的酒窝图

javascript - D3.JS 树形图缩放行为不一致

javascript - 如何在 MVC 5 中通过单个 Ajax POST 请求发送 ViewModel 和文件?

javascript - 无法在 d3 世界地图中为日本和朝鲜着色

javascript - 如何将 d3 选择保存在数组中供以后使用 D3.js?

javascript - 如何将动态对象附加到 HTML 元素?

javascript - 输入文件字段到输入文本字段