Scientific papers are built by taking existing ideas, applying them in new ways, adapting them to fit new situations, and improving them over time. Yet when it comes to drawing a schematic, many people start from scratch or never even start. Instead, start with an image search, let Inkscape do the hard work, and refine the best parts of other schematics.
I will use a figure of mine as a case study:
1. Choose a concept
Image searches are an obvious source of inspiration when creating a schematic. To suggest this could be condescending. I want to point out, however, that I did not discover any helpful figures by using simple search terms like “three-dimensional channel” or “ocean strait”. Instead, I considered analogous settings.
I had a vague idea that a three-dimensional isometric approach may work. Once I paired isometric with tunnel in my search phrase, I found the following inspiration:
Tip: Filter by “Line Drawing” (Tools → Type → Line Drawing) in Google Image Search to provide images that are more conducive to creating schematics.
2. Copy others
Incorporating components of figures from other papers is perfectly acceptable (see, for example, Fair Use on Wikipedia). In my figure, the topographically induced eddy is copied from a figure in Warner and MacCready (2009).
“Imitation is the sincerest form of flattery that mediocrity can pay to greatness” – Oscar Wilde
3. Don’t draw the tricky parts yourself
The wave field, the sea surface, and shaded downstream extension of the channel were all created with strong help from software.
Use built-in tools
In many cases, Inkscape’s Trace Bitmap tool (Path → Trace Bitmap, Shift + Alt + B) can stylise a photo to give an appropriate result. Alternatively, there are numerous Extensions or Filters that may help.
The shaded channel surface was the most difficult. Here I turned to Python’s Matplotlib. Alternatively, MatLab and other similar languages likely have similar tools. Creating a surface plot is a feasible approach for those comfortable with coding. For example, to create the arbitrary shaded surface below requires six lines of code plus some imports and comments (code after image).
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D # Create an arbitrary smooth surface Z(X, Y) X, Y = np.mgrid[0:6.28:0.1, 0:6.28:0.1] Z = (np.sin(X)*np.cos(Y/3) + np.sin(1.5*X) + np.exp(-Y)) # Set up axis fig = plt.figure() ax = Axes3D(fig) ax.set_axis_off() # Do the plotting surf = ax.plot_surface( X, Y, Z, cmap='Blues',shade=True, linewidth=0, antialiased=False)