I often see charts produced using matplotlib or plotly - often you can tell based on the colour schemes used. For example, the bar chart at the bottom of this paper looks like it was made with plotly. I think the reason for such variance in the style of charts is largely due to the flexibility frameworks such as matplotlib provide: you can control basically every aspect of a chart and use any number of predefined or custom stylesheets to change the look and feel.
I'm pretty happy with the scanning feature of Evernote, and I think there are some other nice apps in the Android app store, but my goal is to have a solution that is not captive (either to a specific vendor or to a SaaS solution).
From the Wikipedia article, "Otsu's method performs badly in case of heavy noise, small objects size, inhomogeneous lighting and larger intra-class than inter-class variance." (Emphasis mine.)
Right now my solution is at the stage of local thresholds with a configurable block size.
Thanks to your pointer, I know now that my next steps will be to review the Niblack or the Bernsen algorithms. (Or just integrate ImageJ.)
[1] https://excalidraw.com/