如何使用highchart在饼图上定位图像
How to position images on piechart using highchart
我正在使用 highcharts 在饼图上渲染图像,如下所示。
但是我无法正确定位它。
有什么好的公式可以做到这一点吗?
由于数据是动态变化的,我们如何给每个图像坐标。
我试过给出几个这样的公式。
chart.customMen = chart.renderer.image('https://pixabay.com/static/uploads/photo/2014/04/02/10/56/restroom-304984_640.png', shapeM.x + shapeM.r / 4, shapeM.y,shapeM.r / 2, shapeM.r/4)
这是我想要的输出。
这是我的 fiddle
http://jsfiddle.net/uq9kyon6/2/
我正在寻找可以应用于所有角度的公式。
谁能帮帮我。
谢谢
终于解决了。
var chart = this,
points = chart.series[0].points,
shape, r, ang, posX, posY,
cX = chart.series[0].center[0],
cY = chart.series[0].center[1] + chart.plotTop;
chart.customImgs = [];
$.each(points, function (i, p) {
shape = p.shapeArgs;
r = shape.r;
ang = (shape.end - shape.start) / 2 + shape.start;
posX = cX + (r * 0.8) * (Math.cos(ang));
if((-.3) < Math.cos(ang) && Math.cos(ang) <.2){
var cal=.06;
posX = cX + (r * 0.7) * (Math.cos(ang) + cal)
}
var angle =(shape.end - shape.start)*360/Math.PI;
posY = cY + (r * 0.7) * Math.sin(ang);
var r1 = 2*(shape.end - shape.start)/Math.PI;
r1= r1>1 ? 1 : r1;
r= r*r1;
if(angle>25)
chart.customImgs.push(chart.renderer.image(
images[i],
posX + (p.labelPos[6] === 'right' ? (1) :(-1)) * (r / 8),
posY - r / 4, r / 4, r / 2)
.attr({
zIndex: 4,
'pointer-events': 'none'
})
.add());
});
},
redraw: function () {
var chart = this,
points = chart.series[0].points,
shape, r, ang, posX, posY,
cX = chart.series[0].center[0],
cY = chart.series[0].center[1] + chart.plotTop;
$.each(points, function (i, p) {
shape = p.shapeArgs;
r = shape.r;
ang = (shape.end - shape.start) / 2 + shape.start;
posX = cX + (r * 0.7) * Math.cos(ang);
if((-.3) < Math.cos(ang) && Math.cos(ang) <.2){
var cal=.1;
posX = cX + (r * 0.7) * (Math.cos(ang) + cal)
}
posY = cY + (r * 0.7) * Math.sin(ang);
if (chart.customImgs[i]) {
chart.customImgs[i].attr({
x: posX + (p.labelPos[6] === 'right' ? (1) : (-1)) * (r / 8),
y: posY - r / 4,
});
}
});
}
}
},
我正在使用 highcharts 在饼图上渲染图像,如下所示。
但是我无法正确定位它。
有什么好的公式可以做到这一点吗?
由于数据是动态变化的,我们如何给每个图像坐标。
我试过给出几个这样的公式。
chart.customMen = chart.renderer.image('https://pixabay.com/static/uploads/photo/2014/04/02/10/56/restroom-304984_640.png', shapeM.x + shapeM.r / 4, shapeM.y,shapeM.r / 2, shapeM.r/4)
这是我想要的输出。
这是我的 fiddle http://jsfiddle.net/uq9kyon6/2/
我正在寻找可以应用于所有角度的公式。 谁能帮帮我。
谢谢
终于解决了。
var chart = this,
points = chart.series[0].points,
shape, r, ang, posX, posY,
cX = chart.series[0].center[0],
cY = chart.series[0].center[1] + chart.plotTop;
chart.customImgs = [];
$.each(points, function (i, p) {
shape = p.shapeArgs;
r = shape.r;
ang = (shape.end - shape.start) / 2 + shape.start;
posX = cX + (r * 0.8) * (Math.cos(ang));
if((-.3) < Math.cos(ang) && Math.cos(ang) <.2){
var cal=.06;
posX = cX + (r * 0.7) * (Math.cos(ang) + cal)
}
var angle =(shape.end - shape.start)*360/Math.PI;
posY = cY + (r * 0.7) * Math.sin(ang);
var r1 = 2*(shape.end - shape.start)/Math.PI;
r1= r1>1 ? 1 : r1;
r= r*r1;
if(angle>25)
chart.customImgs.push(chart.renderer.image(
images[i],
posX + (p.labelPos[6] === 'right' ? (1) :(-1)) * (r / 8),
posY - r / 4, r / 4, r / 2)
.attr({
zIndex: 4,
'pointer-events': 'none'
})
.add());
});
},
redraw: function () {
var chart = this,
points = chart.series[0].points,
shape, r, ang, posX, posY,
cX = chart.series[0].center[0],
cY = chart.series[0].center[1] + chart.plotTop;
$.each(points, function (i, p) {
shape = p.shapeArgs;
r = shape.r;
ang = (shape.end - shape.start) / 2 + shape.start;
posX = cX + (r * 0.7) * Math.cos(ang);
if((-.3) < Math.cos(ang) && Math.cos(ang) <.2){
var cal=.1;
posX = cX + (r * 0.7) * (Math.cos(ang) + cal)
}
posY = cY + (r * 0.7) * Math.sin(ang);
if (chart.customImgs[i]) {
chart.customImgs[i].attr({
x: posX + (p.labelPos[6] === 'right' ? (1) : (-1)) * (r / 8),
y: posY - r / 4,
});
}
});
}
}
},