Q: how can I force the “indexLabel” placement/alignment to the far left?
Aside: data is provided by a Python script / neural net (no GPU!). Not provided; see Keras-js …
I solved this myself.
Code:
<!doctype html>
<HTML lang="en">
<HEAD>
<meta charset="utf-8">
<link rel="stylesheet" href="css/main.css">
<script type="text/javascript" src="css/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="css/canvasjs.min.js"></script>
<script type="text/javascript">
window.onload = function () {
// https://canvasjs.com/docs/charts/how-to/create-charts-from-csv/
function getDataPointsFromCSV(csv) {
var dataPoints = csvLines = points = [];
//csvLines = csv.split(/[\r?\n|\r|\n]+/);
// http://stackoverflow.com/questions/15433188/r-n-r-n-what-is-the-difference-between-them
csvLines = csv.split('\n');
for (var i = 0; i < csvLines.length; i++)
if (csvLines[i].length > 0) {
points = csvLines[i].split(",");
dataPoints.push({
y: parseFloat(points[1]),
//label: parseFloat(points[1]),
label: " ",
indexlabel: String(points[0])
});
}
return dataPoints;
}
// https://www.google.com/search?num=20&btnG=Search&q=jquery+get+csv+file
// http://stackoverflow.com/questions/8185912/error-with-jquery-get-of-a-csv-file
// http://stackoverflow.com/questions/7431268/how-to-read-data-from-csv-file-using-javascript
var myVar = setInterval(myTimer, 1000);
function myTimer() {
$.get("webcam.csv", function(data) {
var chart = new CanvasJS.Chart("chartContainer", {
title: {
text: "Top-5 Probability",
fontFamily: "Verdana",
fontColor: "Peru",
fontSize: 14
},
animationEnabled: false,
axisY: {
// https://canvasjs.com/docs/charts/chart-options/axisx/valueformatstring/
//valueFormatString: "#0.000",
tickThickness: 0,
lineThickness: 0,
//lineThickness: 1,
valueFormatString: " ",
gridThickness: 1
},
axisX: {
// https://canvasjs.com/docs/charts/chart-options/axisx/valueformatstring/
//valueFormatString: "#0.000",
tickThickness: 0,
lineThickness: 0,
labelFontSize: 12,
labelFontColor: "Peru"
},
data: [
{
// https://canvasjs.com/docs/charts/chart-options/axisx/valueformatstring/
//indexLabel: "{x}, {y}",
//indexLabel: "{label}, {indexlabel}, {y}",
indexLabel: "{y}: {indexlabel}",
//xValueFormatString: "#0.000",
yValueFormatString: "#0.000",
indexLabelFontSize: 14,
//toolTipContent: "<span style='\"'color: {color};'\"'>{indexLabel}</span><span style='\"'font-size: 20px; color:peru '\"'>{y}</span>",
indexLabelPlacement: "inside", /* auto | inside | outside */
//indexLabelOrientation: "horizontal",
//indexLabelFontColor: "magenta",
indexLabelFontColor: "brown",
indexLabelFontWeight: 600,
indexLabelFontFamily: "Verdana",
color: "#62C9C3",
//color: "#abcabc",
//color: "#abc",
//color: "#cbacba",
type: "bar",
dataPoints: getDataPointsFromCSV(data),
//dataPoints: [
//{ y: 21, label: "21%", indexLabel: "Video" },
//{ y: 25, label: "25%", indexLabel: "Dining" },
//{ y: 33, label: "33%", indexLabel: "Entertainment" },
//{ y: 36, label: "36%", indexLabel: "News" },
//{ y: 42, label: "42%", indexLabel: "Music" },
//{ y: 49, label: "49%", indexLabel: "Social Networking" },
//{ y: 50, label: "50%", indexLabel: "Maps/ Search" },
//{ y: 55, label: "55%", indexLabel: "Weather" },
//{ y: 61, label: "61%", indexLabel: "Games" }
//]
}
]
});
// https://canvasjs.com/forums/topic/order-by-value/
// http://jsfiddle.net/canvasjs/11nrh8u1/
function compareDataPointYAscend(dataPoint1, dataPoint2) {
return dataPoint1.y - dataPoint2.y;
}
//function compareDataPointYDescend(dataPoint1, dataPoint2) {
//return dataPoint2.y - dataPoint1.y;
//}
// ascending order:
chart.options.data[0].dataPoints.sort(compareDataPointYAscend);
// descending order:
//chart.options.data[0].dataPoints.sort(compareDataPointYDescend);
chart.render();
}, "text");
}
}
</script>
<style>
.container {
width:968px; /* (320 + 4) + (640 + 4) */
height: 282px; /* (280 + 2) */
border: 2px solid blue;
/* border: none; */
padding: 2px;
/* margin: 25px; */
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
margin-left: 25px;
}
.container > * {
display: inline-block;
vertical-align: top;
/* border: 5px solid magenta; */ /* debug purposes */
border: none;
}
</style>
</HEAD>
<BODY>
<div class="container">
<canvas id="webcam_grab" width="360" height="280"></canvas>
<div id="chartContainer" style="height: 99%; width: 61.5%;"></div>
</div>
<!-- ============================================================================== -->
<!-- SCRIPTS: -->
<!-- ============================================================================== -->
<div>
<script type="text/JavaScript">
var canvas = document.getElementById('webcam_grab');
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.src = 'frame.jpg';
imageObj.onload = function() {
context.drawImage(imageObj, 0, 0);
var d = new Date();
//context.fillStyle = 'cyan';
//context.font = "16px serif";
//context.fillText(d.toLocaleTimeString(), 220, 200);
//context.font = "16px serif";
//context.fillText("Live preview", 370, 320);
var text = d.toLocaleDateString() + " " + d.toLocaleTimeString();
var maxWidth = 200;
var x = imageObj.width-10-maxWidth;
var y = imageObj.height-10;
context.font = "20px serif";
context.fillStyle = 'cyan';
context.fillText(text, x, y, maxWidth);
};
imageObj.src = 'frame.jpg';
var myVar = setInterval(myTimer, 500);
function myTimer() {
imageObj.src = 'frame.jpg?random='+new Date().getTime();
}
</script>
</div>
</BODY>
</HTML>
Sorry: this is the desired output; numerical labels (probablities) on the vertical axis: