Scientific software skills make up for minimal artistic talent

A computer is a better artist than I am. If I can tell it what to draw, it will produce attractive results. To make a nice schematic, the hardest part is to tell the computer what I want to draw. Fortunately for us so-called left-brain types prevalent throughout the sciences, a familiarity with scientific software can overcome a lack of artistic talent, allow rapid iteration of a design, and even provide creative inspiration.

Invoking my scientific software skills, I am able to produce elegant figures:

Now, compare that with my initial sketch…

The figure was created using three different software applications: a numerical ocean model to simulate the scenario, Python’s Matplotlib, to draw the contours and arrows in three dimensions, and Inkscape to organise it all and add the finishing touches.

Invoking all three software applications is vital. Without the ocean model, I would likely have made poor guesses of important details like the shapes of contours or the vertical variation of the arrows. (A sense of realism can be important even for a schematic.) Without Matplotlib, I would struggle to project the arrows in three-dimensions, which is the main point of this figure. And without Inkscape, it would be a nightmare to test out various alignments and distributions of the different components and annotations.

These are three applications that work for me. What works for you may include Matlab, R, or Excel, and probably not a numerical ocean model. Inkscape, however, should be part of any scientist’s workflow.

But where to start?

The tool that I’ve only barely alluded to so far is the pen or pencil. To get started on a schematic, you’ll need an initial sketch. Sketching can be a way to clarify your thinking and to work out logical errors. But, if you’re like me, sketching only gets you a vague idea of the final product. Other than image searches, a lot of my inspiration actually comes from either (i) options presented by the software or (ii) trial and error that wouldn’t be possible with pen and paper. Take the velocity vectors, for example:

The obvious choice to denote a vector is an arrow, and that was my initial plan. That is, until the software presented me with a better option I hadn’t thought of, a wedge. Wedges still imply a direction, but let me do away with the busyness of the repeated arrowheads. The next improvement comes from being able to quickly iterate through different spacings. Because the arrows were generated by a script, not by hand, it’s no effort at all to try a range of options to arrive at the optimal number of arrows in each direction. Getting this right is important because figures need attention to detail.

Time for another example

Internal tides in a high-latitude channel

Again, Matplotlib and Inkscape were both invoked to make this figure. (A numerical ocean model wasn’t explicitly used this time, but it did inspire what’s shown.) For this particular example, there was never even a sketch, simply a concept. I knew the mathematical expression for the wavy surface and that I wanted to plot it in three dimensions. But after that, I relied on software. For example, I wasn’t sure how I would imply that the waves are moving until I started experimenting with different combinations of plots in Matplotlib.

Know which tool to use

Regardless of the specific tools you use, a familiarity with more than one piece of software is certainly going to help. If all you have is a hammer, everything looks like a nail. If all you have is Matplotlib or Matlab, you might think you have to design the whole schematic in code. If all you have is Inkscape, you might think you have to add every component of the figure manually.

I certainly don’t miss the days when all I knew was Matlab and Microsoft Paint.

Author: Ken Hughes

Post-doctoral research scientist in physical oceanography

3 thoughts on “Scientific software skills make up for minimal artistic talent”

1. Zac says:

Hello,
May I ask how you produced the wavy photon arrows in the first figure?
I would like to use such objects in a Matplotlib energy level diagram, but I am not sure how to start.
Thanks

1. I created those arrows from scratch in Inkscape. To do it in Matplotlib would require a lot of work and I’m not sure what the best way to do it would be.