Reputation: 39
good day
I hope someone can help me. I created a scatter plot on AMcharts and each data point has its own label, but as soon as I put in more data the labels over flow. I have tried positioning each label individually, but I cant seem to get it right. I also tried using a labelFunction to change the position of an individual data point, but I'm not sure I'm doing it right. Can someone please help me.
I'm really struggling with this thing.
javaScript
var chart = AmCharts.makeChart("chartdiv", {
"type": "xy",
"pathToImages": "http://www.amcharts.com/lib/3/images/",
"theme": "none",
"dataProvider": [{
"y": 10,
"x": 14,
"value": 59,
"y2": -5,
"x2": -3,
"value2": 44
}, {
"y": 5,
"x": 3,
"value": 50,
"y2": -15,
"x2": -8,
"value2": 12
}, {
"y": -10,
"x": 8,
"value": 19,
"y2": -4,
"x2": 6,
"value2": 35
}, {
"y": -6,
"x": 5,
"value": 65,
"y2": -5,
"x2": -6,
"value2": 168
}, {
"y": 15,
"x": -4,
"value": 92,
"y2": -10,
"x2": -8,
"value2": 102
}, {
"y": 13,
"x": 1,
"value": 8,
"y2": -2,
"x2": 0,
"value2": 41
}, {
"y": 1,
"x": 6,
"value": 35,
"y2": 0,
"x2": -3,
"value2": 16
}],
"valueAxes": [{
"position":"bottom",
"axisAlpha": 0
}, {
"minMaxMultiplier": 1.2,
"axisAlpha": 0,
"position": "left"
}],
"graphs": [{
"balloonText": "x:<b>[[x]]</b> y:<b>[[y]]</b><br>value:<b>[[value]] </b>",
"bullet": "circle",
"bulletBorderAlpha": 0.2,
"bulletAlpha": 0.8,
"lineAlpha": 0,
"fillAlphas": 0,
"valueField": "value",
"xField": "x",
"yField": "y",
"maxBulletSize": 100,
"labelText": "[[x]]",
"labelFunction": function(obj,label) {
setTimeout(function() {
console.log(obj.bulletGraphics.node.nextElementSibling);
},100); // delay to generate the element
return label;
}
}, {
"balloonText": "x:<b>[[x]]</b> y:<b>[[y]]</b><br>value:<b>[[value]]</b>",
"bullet": "diamond",
"bulletBorderAlpha": 0.2,
"bulletAlpha": 0.8,
"lineAlpha": 0,
"fillAlphas": 0,
"valueField": "value2",
"xField": "x2",
"yField": "y2",
"maxBulletSize": 100
}],
"marginLeft": 46,
"marginBottom": 35
});
Upvotes: 2
Views: 1041
Reputation: 2297
Ok so what i got for you is this Fiddle.
It uses the labelFunction
to move the label. As labelFunction
returns a blank string you have to do this with \u00a0
(space) or \n
(new line).
So the function checks, if the previous(!) point has the same(!) coordinates.
You could modify it to check the whole dataset and see if any datapoint is near.
I hope you can work with this. :)
Upvotes: 1