D3.js v4:放大气泡图

时间:2018-06-28 22:57:56

标签: javascript d3.js zoom

enter image description here

我有这个气泡图,想要放大以查看很小的气泡。我尝试过 Mike Bostock code,但是我没有成功获得良好的缩放功能,因为我有另一个图表概念。

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

这是我的代码:

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");

    });

1 个答案:

答案 0 :(得分:0)

从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);
});
相关问题