【问题标题】:Center Pie Chart in SVG ElementSVG 元素中的中心饼图
【发布时间】:2018-01-22 18:48:28
【问题描述】:

我已经阅读了:

  1. https://bl.ocks.org/mbostock/3887235
  2. http://zeroviscosity.com/d3-js-step-by-step/step-1-a-basic-pie-chart
  3. Center align a pie chart on svg

考虑以下几点:

var dataAsCsv = `Col1,Col2
Type1,123456
Type2,789012
Type3,34567`;

var data = d3.csvParse(dataAsCsv);

var margin = {top: 50, right: 20, bottom: 50, left: 80},
    width = 1400 - margin.left - margin.right,
    height = 700 - margin.top - margin.bottom;

var svgPie = d3.select('body').append('svg')
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom);
			
var gPie = svgPie.append("g")
           .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
		   
var radius = Math.min(width, height) / 2;

var color = d3.scaleOrdinal(d3.schemeCategory20b);
			
var label = d3.arc()
    .outerRadius(radius - 40)
    .innerRadius(radius - 40);

var path = d3.arc()
    .outerRadius(radius - 10)
    .innerRadius(0);

var pie = d3.pie()
			.value(function(d) { return d.Col2; })
			.sort(null);

var arc = gPie.selectAll(".arc")
    .data(pie(data))
    .enter().append("g")
      .attr("class", "arc");
	  
arc.append("path")
      .attr("d", path)
      .attr("fill", function(d) { return color(d.data.Col1); });
	  
arc.append("text")
      .attr("transform", function(d) { return "translate(" + label.centroid(d) + ")"; })
      .attr("dy", "0.35em")
      .text(function(d) { return d.data.Col1; });
<script src="https://d3js.org/d3.v4.js"></script>

我试图将饼图相对于它所在的整个 svg 元素垂直和水平居中。我尝试将我的代码修改为上面的示例,但无济于事。

【问题讨论】:

    标签: d3.js


    【解决方案1】:

    您只需将父 g 元素水平平移一半宽度并垂直平移一半高度:

    代替:

    var gPie = svgPie.append("g")
               .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
    

    写:

    var gPie = svgPie.append("g")
               .attr("transform", "translate(" + width/2 + "," + height/2 + ")");
    

    查看演示:

    var dataAsCsv = `Col1,Col2
    Type1,123456
    Type2,789012
    Type3,34567`;
    
    var data = d3.csvParse(dataAsCsv);
    
    var margin = {top: 50, right: 20, bottom: 50, left: 80},
        width = 1400 - margin.left - margin.right,
        height = 700 - margin.top - margin.bottom;
    
    var svgPie = d3.select('body').append('svg')
      .attr("width", width + margin.left + margin.right)
      .attr("height", height + margin.top + margin.bottom);
    			
    var gPie = svgPie.append("g")
               .attr("transform", "translate(" + width/2 + "," + height/2 + ")");
    		   
    var radius = Math.min(width, height) / 2;
    
    var color = d3.scaleOrdinal(d3.schemeCategory20b);
    			
    var label = d3.arc()
        .outerRadius(radius - 40)
        .innerRadius(radius - 40);
    
    var path = d3.arc()
        .outerRadius(radius - 10)
        .innerRadius(0);
    
    var pie = d3.pie()
    			.value(function(d) { return d.Col2; })
    			.sort(null);
    
    var arc = gPie.selectAll(".arc")
        .data(pie(data))
        .enter().append("g")
          .attr("class", "arc");
    	  
    arc.append("path")
          .attr("d", path)
          .attr("fill", function(d) { return color(d.data.Col1); });
    	  
    arc.append("text")
          .attr("transform", function(d) { return "translate(" + label.centroid(d) + ")"; })
          .attr("dy", "0.35em")
          .text(function(d) { return d.data.Col1; });
    <script src="https://d3js.org/d3.v4.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2018-08-26
      • 2015-08-16
      • 2019-02-02
      • 1970-01-01
      • 2014-05-28
      相关资源
      最近更新 更多