Position Image on Marker in Scatter Chart with the help of convertValueToPixel - CanvasJS JavaScript Charts

Position Image on Marker in Scatter Chart with the help of convertValueToPixel - CanvasJS JavaScript Charts

by canvasjs

HTML

<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<div id="chartContainer" style="height: 360px; width: 100%; position: relative;"></div>

JavaScript

var imgUrl = "https://i.imgur.com/gzn48eN.png";
var images = [];

var chart = new CanvasJS.Chart("chartContainer", {
  title: {
    text: "Position Image over Chart"
  },
  data: [{			
			type: "scatter",
			dataPoints: [
				{ x: 10, y: 71 },
        { x: 20, y: 55 },
        { x: 30, y: 50 },
        { x: 40, y: 65 },
        { x: 50, y: 45 }
			]
		}]
});

chart.render();

addImages(chart);
positionImages();

function addImages(chart){
	for (var i = 0; i < chart.data[0].dataPoints.length; i++) {
    images.push(new Image(30, 30));
    images[i].style.cssText = "position: absolute; pointer-events: none";    
    images[i].src = imgUrl;
    chart.container.appendChild(images[i]);
  }
}

//Position image based on dataPoint x & y value
function positionImages() {
  for (var i = 0; i < chart.data[0].dataPoints.length; i++) {
    images[i].style.top = chart.axisY[0].convertValueToPixel(chart.data[0].dataPoints[i].y) - (images[i].width / 2) + "px";
    images[i].style.left = chart.axisX[0].convertValueToPixel(chart.data[0].dataPoints[i].x) - (images[i].width / 2) + "px";
  }
}

//Re-position Image on resizing the window
$(window).resize(function() {
  positionImages();
});