2016-07-25 106 views
-3

我想要一个像这样的甜甜圈图表。Html,CSS - 如何创建一个这样的甜甜圈图表?

如何创建它?我不确定这是什么正确的过程。

非常感谢。 I want a Donut chart like this

+0

你想自己用CSS的帮助下创造这一切?或者你不介意使用像highcharts等外部库,? – Krish

+0

@Krish使用任何其他外部库可能会出现这种情况吗?我愿意接受任何建议。谢谢。 – Varun

+1

使用'context.arc'和'context.fillText'命令很容易使用[Html5 Canvas](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API)。这里有一个快速的[示例](https://jsfiddle.net/wm6szms3/)供您开始。 – markE

回答

0

上述圆环图可以使用HTML 5个画布来完成。

样品:https://jsfiddle.net/wm6szms3/

HTML代码:

<canvas id="canvas" width=325 height=325></canvas> 

JavaScript代码:

var canvas=document.getElementById("canvas"); 
var ctx=canvas.getContext("2d"); 

var colors=['skyblue','gray','orange']; 
var values=[47,6,47]; 
var labels=['Voluntary','Robot','Mandatory']; 

dmbChart(150,150,125,25,values,colors,labels,0); 

function dmbChart(cx,cy,radius,arcwidth,values,colors,labels,selectedValue){ 
    var tot=0; 
    var accum=0; 
    var PI=Math.PI; 
    var PI2=PI*2; 
    var offset=-PI/2; 
    ctx.lineWidth=arcwidth; 
    for(var i=0;i<values.length;i++){tot+=values[i];} 
    for(var i=0;i<values.length;i++){ 
     ctx.beginPath(); 
     ctx.arc(cx,cy,radius, 
      offset+PI2*(accum/tot), 
      offset+PI2*((accum+values[i])/tot) 
     ); 
     ctx.strokeStyle=colors[i]; 
     ctx.stroke(); 
     accum+=values[i]; 
    } 
    var innerRadius=radius-arcwidth-3; 
    ctx.beginPath(); 
    ctx.arc(cx,cy,innerRadius,0,PI2); 
    ctx.fillStyle=colors[selectedValue]; 
    ctx.fill(); 
    ctx.textAlign='center'; 
    ctx.textBaseline='bottom'; 
    ctx.fillStyle='white'; 
    ctx.font=(innerRadius)+'px verdana'; 
    ctx.fillText(values[selectedValue],cx,cy+innerRadius*.9); 
    ctx.font=(innerRadius/4)+'px verdana'; 
    ctx.fillText(labels[selectedValue],cx,cy-innerRadius*.25); 
} 
0

下面是谷歌图表使用Javascript一些代码示例,

,如果你想更复杂的图表,你可以使用this

多个图表与的jsfiddle例子可以精细here

 google.charts.load('current', {'packages':['corechart']}); 
 
     google.charts.setOnLoadCallback(drawChart); 
 
     function drawChart() { 
 

 
     var data = google.visualization.arrayToDataTable([ 
 
      ['Effort', 'Amount given'], 
 
      ['My all',  100], 
 
     ]); 
 

 
     var options = { 
 
      pieHole: 0.5, 
 
      pieSliceTextStyle: { 
 
      color: 'black', 
 
      }, 
 
      legend: 'none' 
 
     }; 
 

 
     var chart = new google.visualization.PieChart(document.getElementById('donut_single')); 
 
     chart.draw(data, options); 
 
     }
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
 
     <div id="donut_single" style="width: 900px; height: 500px;"></div> 
 

+0

我很欣赏你的答案,但我需要一个自定义的,看起来完全像我需要的。如果我使用谷歌图表,我无法得到我想要的样子。 – Varun