console
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var dataArr = [
{ name: '北京', color: 'yellow', value: 0.3 },
{ name: '上海', color: 'red', value: 0.7 },
];
var x0 = canvas.width * 0.5, y0 = canvas.height * 0.5;
var radius = 50;
var beginAngle = -90 * Math.PI / 180;
let whiteRound = 30;
for (var i = 0; i < dataArr.length; i++) {
var tempAngle = dataArr[i].value * 360 * Math.PI / 180;
var endAngle = beginAngle + tempAngle;
ctx.beginPath();
ctx.moveTo(x0, y0);
ctx.arc(x0, y0, radius, beginAngle, endAngle);
ctx.fillStyle = dataArr[i].color;
ctx.fill();
var textAngle = beginAngle + tempAngle * 0.5;
var text = dataArr[i].name + dataArr[i].value * 100 + '%';
console.log(text);
ctx.beginPath();
ctx.arc(x0, y0, whiteRound, 0, 2 * Math.PI, true);
ctx.fillStyle = "#fff";
ctx.fill();
var textX = x0 + (radius + 10) * Math.cos(textAngle);
var textY = y0 + (radius + 10) * Math.sin(textAngle);
ctx.font = "10px '微软雅黑'";
if ((textAngle > 90 * Math.PI / 180) && (textAngle < 270 * Math.PI / 180)) {
ctx.textAlign = 'end';
}
ctx.fillStyle = "#000";
ctx.fillText(text, textX, textY);
beginAngle = endAngle;
}
<canvas id="canvas" height="200" width="200"></canvas>