Example shows Python Multi-Series Scatter Chart with different marker types. Library supports different marker types like circle, square, triangle & cross that can help you analyze data. Demo also includes Django source-code that you can try running locally.
<!-- index.html -->
{% load static %}
<html>
<head>
<title>CanvasJS Python Charts</title>
<script>
window.onload = function () {
var chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
theme: "light2",
title:{
text: "Server Performance"
},
axisX: {
title:"Server Load (in TPS)"
},
axisY:{
title: "Response Time",
lineThickness: 1,
gridThickness: 0,
suffix: "ms"
},
legend:{
cursor: "pointer",
itemclick: toggleDataSeries
},
data: [{
type: "scatter",
toolTipContent: "<b>{name}</b><br/><b> Load:</b> {x} TPS<br/><b> Response Time:</b> {y} ms",
name: "Server 1",
markerType: "square",
showInLegend: true,
dataPoints: {{ server1_data|safe }}
},{
type: "scatter",
name: "Server 2",
markerType: "triangle",
showInLegend: true,
toolTipContent: "<b>{name}</b><br/><b> Load:</b> {x} TPS<br/><b> Response Time:</b> {y} ms",
dataPoints: {{ server2_data|safe }}
}]
});
chart.render();
function toggleDataSeries(e){
if (typeof(e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
e.dataSeries.visible = false;
}
else{
e.dataSeries.visible = true;
}
chart.render();
}
}
</script>
</head>
<body>
<div id="chartContainer" style="width: 100%; height: 360px;"></div>
<script src="{% static 'canvasjs.min.js' %}"></script>
</body>
</html>
from django.shortcuts import render
def index(request):
server1_data = [
{ "x": 23, "y": 340 },
{ "x": 20, "y": 292 },
{ "x": 21, "y": 292 },
{ "x": 22, "y": 292 },
{ "x": 23, "y": 290 },
{ "x": 24, "y": 321 },
{ "x": 25, "y": 321 },
{ "x": 26, "y": 321 },
{ "x": 27, "y": 250 },
{ "x": 28, "y": 390 },
{ "x": 29, "y": 250 },
{ "x": 30, "y": 400 },
{ "x": 31, "y": 453 },
{ "x": 32, "y": 405 },
{ "x": 33, "y": 430 },
{ "x": 34, "y": 380 },
{ "x": 35, "y": 350 },
{ "x": 36, "y": 380 },
{ "x": 37, "y": 390 },
{ "x": 38, "y": 405 },
{ "x": 39, "y": 410 },
{ "x": 40, "y": 415 },
{ "x": 41, "y": 430 }
]
server2_data = [
{ "x": 19, "y": 260 },
{ "x": 20, "y": 250 },
{ "x": 21, "y": 240 },
{ "x": 22, "y": 250 },
{ "x": 23, "y": 265 },
{ "x": 24, "y": 330 },
{ "x": 25, "y": 240 },
{ "x": 26, "y": 360 },
{ "x": 27, "y": 250 },
{ "x": 28, "y": 240 },
{ "x": 29, "y": 225 },
{ "x": 30, "y": 330 },
{ "x": 31, "y": 250 },
{ "x": 32, "y": 290 },
{ "x": 33, "y": 350 },
{ "x": 34, "y": 390 },
{ "x": 37, "y": 280 },
{ "x": 38, "y": 285 },
{ "x": 40, "y": 290 },
{ "x": 41, "y": 295 },
{ "x": 43, "y": 320 },
{ "x": 44, "y": 340 },
{ "x": 42, "y": 360 }
]
return render(request, 'index.html', { "server1_data" : server1_data, "server2_data": server2_data })
You can show hollow markers by setting markerBorderColor & markerBorderThickness properties along with markerColor set to transparent. Same can be done in legend-markers with the combination of legendMarkerBorderColor, legendMarkerBorderThickness & legendMarkerColor properties.