Diagnostics
A graph assembled from real data is not always well formed. Rather than throwing, the canvas reports what it found through OnError and carries on drawing what it can - each distinct problem once, not on every render. Break the graph with the buttons and watch the log.