当前位置: 首页 > 面试题库 >

使用D3图表更新d3图表的最佳方法是什么

葛浩阔
2023-03-14
问题内容

我学到了几个区块d3。我已经借助jquery做出了响应式d3直方图。

现在,我想在使用ajax更新d3图表方面走得更远。

我刚进入jQuery。

并了解ajax的工作原理。

搜索了很长时间,但在官方d3网站或其他任何地方都找不到任何有效的示例。

任何帮助对我来说都是有益的,让我掌握了通过Ajax更新d3图表的基本功能。

提前致谢!!


问题答案:

您只需在ajax成功中调用d3函数:

    $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: 'url to your web servise',
            dataType: 'json',
            async: true,
            data: "{}", 
            success: function (data) {
               var pos_data = data;
               div_name = "div.histogram";

        draw_histogram(div_name, pos_data);

            },
            error: function (result) {



}
    })



//The drawing of the histogram has been broken out from the data retrial 
    // or computation. (In this case the 'Irwin-Hall distribution' computation above)

    function draw_histogram(reference, pos_data){

        $(reference).empty()

        //The drawing code needs to reference a responsive elements dimneions
        var width = $(reference).width();
        // var width = $(reference).empty().width(); we can chain for effeicanecy as jquery returns jquery.

        // var height = 230;  // We don't want the height to be responsive.

        var margin = {top: 10, right: 30, bottom: 40, left: 30},
        // width = 960 - margin.left - margin.right,
        height = 270 - margin.top - margin.bottom;


        var histogram = d3.layout.histogram() (pos_data);
        //var neg_histogram = d3.layout.histogram()(neg_data);

        var x = d3.scale.ordinal()
            .domain(histogram.map(function(d) { return d.x; }))
            .rangeRoundBands([0, width]);

        var xAxis = d3.svg.axis()
        .scale(x)
        .orient("bottom");


        var y = d3.scale.linear()
            .domain([0, d3.max(histogram.map(function(d) { return d.y; }))])
            .range([0, height]);

        //var ny = d3.scale.linear()
        //    .domain([0, d3.max(neg_histogram.map(function(d) { return d.y; }))])
        //    .range([0, height]);

        var svg = d3.select(reference).append("svg")
            .attr("width", width)
            .attr("height", height + 20);



        svg.selectAll("rect")
            .data(histogram)
          .enter().append("rect")
            .attr("width", x.rangeBand())
            .attr("x", function(d) { return x(d.x); })
            .attr("y", function(d) { return height - y(d.y); })
            .attr("height", function(d) { return y(d.y); });


        svg.append("line")
            .attr("x1", 0)
            .attr("x2", width)
            .attr("y1", height)
            .attr("y2", height);

        svg.append("g")
            .attr("class", "x axis")
            .attr("transform", "translate(0," + (height)  + ")")
            .call(xAxis);
    };

    //Bind the window resize to the draw method.
    //A simple bind example is

    //A better idom for binding with resize is to debounce
    var debounce = function(fn, timeout) 
    {
      var timeoutID = -1;
      return function() {
        if (timeoutID > -1) {
          window.clearTimeout(timeoutID);
        }
        timeoutID = window.setTimeout(fn, timeout);
      }
    };

    var debounced_draw = debounce(function() {
      draw_histogram(div_name, pos_data);
    }, 125);

    $(window).resize(debounced_draw);


 类似资料:
  • 问题内容: 我有一个动态数据源,它经常在浏览器中创建一个新的json。 我能够使用下面的代码从这个json创建饼图(也在这个小提琴中) 此数据经常更新,那么更新饼图的最佳方法是什么?看看这个小提琴。在这里,我还有另一个名为data2的json。 我怎样才能简单地用data2替换数据并使饼动画化/更新? 注意:在某些更新中,值可能== 0 问题答案: 我已经创建了一个有效的版本,并将其发布在这里:h

  • 我正在构建一个将事件呈现为D3图表的仪表板。比如一张D3气泡图;其中气泡大小是根据rest API上的kafka主题所消耗的事件来修改的。对于数据库数据源,我有类似的代码(使用异步xsjs调用);迭代SELECT语句以刷新数据;但我不清楚我是否可以对Kafka的rest调用使用同样的技术。 我希望将所有javascript代码嵌入到HTML页面中(为了简单起见),但我怀疑调用kafka rest服

  • 问题内容: 假设我有一个直方图脚本,可构建960 500 svg图形。如何使它响应,以便调整图形的宽度和高度是动态的? 问题答案: 还有另一种方法,不需要重新绘制图形,它涉及修改元素上的viewBox和preserveAspectRatio属性: 15年11月24日更新 :大多数现代浏览器都可以从推断出SVG元素的长宽比,因此您可能不需要保持图表的大小为最新。如果需要支持较旧的浏览器,可以在窗口调

  • 我的工具提示在d3图表中是开箱即用的。 有人能告诉我我做错了什么吗? css- 工具提示的div- 我觉得有点问题,请指导我。 密码沙盒https://codesandbox.io/s/wizardly-butterfly-2nnbw

  • 问题内容: 我有一个用Java编写的Web应用程序(Spring,Hibernate / JPA,Struts2),用户可以在其中上传图像并将其存储在文件系统中。我想缩放这些图像,以使它们具有一致的大小,以便在网站上显示。哪些库或内置函数将提供最佳结果?在做出决定时,我将考虑以下标准: 免费/开源(基本) 易于实施 结果质量 性能 可执行文件的大小 问题答案: 看一下Java Image I /

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块: