| 60 | |
| 61 | // functions to update display |
| 62 | function plotAccuracyPerClass(accPerClass) { |
| 63 | document.getElementById('table').style.display = 'block'; |
| 64 | document.getElementById('waiting-msg').style.display = 'none'; |
| 65 | |
| 66 | const table = document.getElementById('table-rows'); |
| 67 | table.innerHTML = ''; |
| 68 | |
| 69 | // Sort class names before displaying. |
| 70 | const sortedClasses = Object.keys(accPerClass).sort(); |
| 71 | sortedClasses.forEach(label => { |
| 72 | const scores = accPerClass[label]; |
| 73 | // Row. |
| 74 | const rowDiv = document.createElement('div'); |
| 75 | rowDiv.className = 'row'; |
| 76 | table.appendChild(rowDiv); |
| 77 | |
| 78 | // Label. |
| 79 | const labelDiv = document.createElement('div'); |
| 80 | labelDiv.innerText = label; |
| 81 | labelDiv.className = 'label'; |
| 82 | rowDiv.appendChild(labelDiv); |
| 83 | |
| 84 | // Score. |
| 85 | const scoreContainer = document.createElement('div'); |
| 86 | scoreContainer.className = 'score-container'; |
| 87 | scoreContainer.style.width = BAR_WIDTH_PX + 'px'; |
| 88 | rowDiv.appendChild(scoreContainer); |
| 89 | |
| 90 | plotScoreBar(scores.training, scoreContainer); |
| 91 | if (scores.validation) { |
| 92 | plotScoreBar(scores.validation, scoreContainer, 'validation'); |
| 93 | } |
| 94 | }); |
| 95 | } |
| 96 | |
| 97 | function plotScoreBar(score, container, className = '') { |
| 98 | const scoreDiv = document.createElement('div'); |