【问题标题】:D3.js v4: Zoom on Bubble chartD3.js v4:放大气泡图
【发布时间】:2018-12-08 02:03:58
【问题描述】:

我有这张气泡图,想放大以查看非常小的气泡。我尝试了 Mike Bostockcode,但我没有成功获得良好的缩放功能,我认为这是因为我有另一个图表概念。

其他在线示例在有轴但我的图表没有轴的图表上应用缩放。

这是我的代码:

d3.json("Data/New/Treemap_source.json", function (error, data) {
        if (error) throw error;

        var diameter = 693;
        var color = d3.scaleOrdinal(d3.schemeCategory20);
        var format = function (d){ return "BTC " + d3.format(",.2f")(d); }

        var bubble = d3.pack(data)
            .size([diameter, diameter])
            .padding(1.5);

        var svg = d3.select("#bubblediv")
            .append("svg")
            .attr("width", diameter + margin.left + margin.right)
            .attr("height", diameter + margin.top + margin.bottom)
            .attr("class", "bubble");


        var nodes = d3.hierarchy(data)
            .sum(function(d) { return d.VolumeBTC; });


        var node = svg.selectAll(".node")
            .data(bubble(nodes).descendants())
            .enter()
            .filter(function(d){
                return  !d.children
            })
            .append("g")
            .attr("class", "node")
            .attr("transform", function(d) {
                return "translate(" + (d.x + margin.left)+ "," + (d.y + margin.top+20) + ")";
            });

            node.on("click", function (d) {
            alert("This bubble contains: " + d.data.Symbol);
            // var sel = d.data.Symbol;
            d3.select('#my-select').property('value', d.data.Symbol);
            // print_filter(d3.select('#my-select').property('value', d.data.Symbol));
            // d3.select('#my-select').property('value', d.data.Symbol);
        });

        node.append("title")
            .text(function(d) {
                return d.data.Symbol + ": " + format(d.value);
            });

     d3.select("svg").append("text")
                        .attr("transform", "translate(" + (diameter / 2 -20) + " ,30)")
                        .attr('class','chartlabel')
                        .style("text-anchor", "middle")
                        .text("Altcoins Trading in BTC");

        node.append("circle")
            .attr("r", function(d) {
                return d.r;
            })
            .style('stroke', '#263432')
            .style('stroke-width', '1.5')
            .style("fill", function(d,i) {
                return color(i);
            });

        node.append("text")
            .attr("dy", ".2em")
            .style("text-anchor", "middle")
            .text(function(d) {
                return d.data.Symbol.substring(0, d.r / 3);
            })
            .attr("font-family", "sans-serif")
            .attr("font-size", function(d){
                return d.r/5;
            })
            .attr("fill", "white");

        node.append("text")
            .attr("dy", "1.3em")
            .style("text-anchor", "middle")
            .text(function(d) {
                return format(d.data.VolumeBTC);
            })
            .attr("font-family",  "Gill Sans", "Gill Sans MT")
            .attr("font-size", function(d){
                return d.r/6;
            })
            .attr("fill", "white");

        d3.select(self.frameElement)
            .style("height", diameter + "px");

    });

【问题讨论】:

    标签: javascript d3.js zooming


    【解决方案1】:

    从 d3 v4 开始,您可以使用以下内容放大任何 svg

    function zoomed() {
      svg.attr("transform", d3.event.transform);
    }
    
    var zoom = d3.zoom().on("zoom", zoomed);
    
    svg.call(zoom);
    

    要让它完全按照您的意愿工作,您需要使用 d3-zoom: https://github.com/d3/d3-zoom

    最后,您可能需要一个按钮来重置缩放,可以这样完成:

    d3.select('#zoom-reset-button').on("click", function() {
        zoom.transform(svg, d3.zoomIdentity);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 2016-03-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多