Example shows Python Dynamic Line Chart that adds new datapoint to chart every 1 second. They are also referred to as Live Data Streaming Charts. 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 () {
// Initial Values
var xValue = 0;
var yValue = 10;
var newDataCount = 6;
dataPoints = [];
var chart = new CanvasJS.Chart("chartContainer", {
exportEnabled: true,
title: {
text: "Dynamic Line Chart from JSON API"
},
data: [{
type: "line",
dataPoints: dataPoints
}]
});
updateData();
function addData(data) {
if (newDataCount !== 1) {
$.each(data, function (key, value) {
dataPoints.push({ x: value.x, y: parseFloat(value.y) });
xValue++;
yValue = parseFloat(value.y);
});
newDataCount = 1;
} else {
dataPoints.shift();
dataPoints.push({ x: data[0].x, y: parseFloat(data[0].y) });
xValue++;
yValue = parseFloat(data[0].y);
}
chart.render();
setTimeout(updateData, 1000);
}
function updateData() {
$.getJSON("get_datapoints?xstart=" + xValue + "&ystart=" + yValue + "&length=" + newDataCount, addData);
}
}
</script>
</head>
<body>
<div id="chartContainer" style="height: 360px; width: 100%;"></div>
<script src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>
<script src="{% static 'canvasjs.min.js' %}"></script>
</body>
</html>
from django.shortcuts import render
from django.http import HttpResponse
import random
import json
def index(request):
return render(request, "index.html")
def get_datapoints(request):
default_query_params = { "xstart": 0, "ystart": 0, "length": 1 }
query_params = { **default_query_params, **request.GET.dict() };
y = int(query_params["ystart"]);
datapoints = []
for i in range(int(query_params["length"])):
y += round(5 + random.random() * (-5-5))
datapoints.append({ "x": (int(query_params["xstart"]) + i), "y": y})
return HttpResponse(json.dumps(datapoints), content_type="application/json")
You can update any chart element dynamically by modifying chart-options & calling render method. You can even use set method to update existing value of a property. addTo method can be used to add new datapoint to the chart.