I use Matplotlib for my publications written in latex. Matplotlib can also render via a latex backend, which gives you then matching fonts and symbols in the text and figure by using something as simple as:<p>rc('text', usetex=True)
matplotlib.rcParams['text.latex.preamble'] = ['\\usepackage{siunitx}']<p>Here is an example from my own publication, with 100% Matplotlib and latex:<p><a href="http://scitation.aip.org/content/aip/journal/apl/104/9/10.1063/1.4867908" rel="nofollow">http://scitation.aip.org/content/aip/journal/apl/104/9/10.10...</a><p>A clear advantage using Matplotlib is reusability as opposed to the time needed to set the plotting parameters right for every single figure over and over. I would really recommend this kind of workflow to anyone in academic publishing.
Seaborn is now my goto plotting library for python. It's built on Matplotlib but with default themes and colour palettes that are much better out of the box and rarely require modification.<p>It plays nicely with pandas dataframes and has a number of useful built-in plots.<p><a href="http://stanford.edu/~mwaskom/software/seaborn/" rel="nofollow">http://stanford.edu/~mwaskom/software/seaborn/</a>
<a href="http://stanford.edu/~mwaskom/software/seaborn/tutorial/plotting_distributions.html" rel="nofollow">http://stanford.edu/~mwaskom/software/seaborn/tutorial/plott...</a>
<a href="http://stanford.edu/~mwaskom/software/seaborn/tutorial/timeseries_plots.html" rel="nofollow">http://stanford.edu/~mwaskom/software/seaborn/tutorial/times...</a>
Matplotlib is awesome. I just wish the API was cleaner:<p><pre><code> figure.set_frameon()
axis.set_frame_on()
pyplot.xlim()
axis.set_xlim()
</code></pre>
This is really pain to deal with when you convert a plot into a subplot and have to switch to the different axis API. Some of this is damage from copying Matlab's legacy but it could use a polish. If you don't use an editor with IntelliSense you have to constantly look up methods in the docs to find the right spelling.