Putting newline in matplotlib label with TeX in Python?

109,064

Solution 1

Your example is exactly how it's done, you use \n. You need to take off the r prefix though so python doesn't treat it as a raw string

Solution 2

You can have the best of both worlds: automatic "escaping" of LaTeX commands and newlines:

plt.ylabel(r"My long label with unescaped {\LaTeX} $\Sigma_{C}$ math"
           "\n"  # Newline: the backslash is interpreted as usual
           r"continues here with $\pi$")

(instead of using three lines, separating the strings by single spaces is another option).

In fact, Python automatically concatenates string literals that follow each other, and you can mix raw strings (r"…") and strings with character interpolation ("\n").

Solution 3

plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here")

Just concatenate the strings with a newline that isn't in raw string form.

Solution 4

The following matplotlib python script creates text with new line

ax.text(10, 70, 'shock size \n $n-n_{fd}$')

The following does not have new line. Notice the r before the text

ax.text(10, 70, r'shock size \n $n-n_{fd}$')
Share:
109,064

Related videos on Youtube

BrechtDeMan
Author by

BrechtDeMan

Audio researcher. I make things using Python, C++, JavaScript, soldering irons, wood, and pressure waves (sometimes a combination). I like helping people. See my website for some of my work.

Updated on July 02, 2020

Comments

  • BrechtDeMan
    BrechtDeMan almost 4 years

    How can I add a newline to a plot's label (e.g. xlabel or ylabel) in matplotlib? For example,

    plt.bar([1, 2], [4, 5])
    plt.xlabel("My x label")
    plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here") 
    

    Ideally I'd like the y-labeled to be centered too. Is there a way to do this? It's important that the label have both TeX (enclosed in '$') and the newline.

  • Benjamin Bannier
    Benjamin Bannier about 14 years
    You might want to proactively double-escape LaTeX commands to make sure they are not interpreted by Python: xlabel('$\\Sigma$')
  • aaren
    aaren over 10 years
    This answer is not correct. You either double escape the latex `` in a normal string (no r) or you follow @EOLs answer
  • Faber
    Faber over 9 years
    regarding centering: ylabel('this is vertical\ntest', multialignment='center') from matplotlib.org/examples/pylab_examples/multiline.html
  • SeanM
    SeanM almost 7 years
    Just a quick comment--this was the perfect solution for an easy way to label subplots with an (a), (b), etc. when that label should be below the plot and centered with the xlabel. This way plt.tight_layout() also sees the whole label and adjusts accordingly.
  • berkelem
    berkelem over 5 years
    This should be the accepted answer. Also note that it works with Python string formatting, e.g. r"$\alpha$ : {0} " "\n" r"$\beta$ : {1}".format(a, b)
  • Samuel
    Samuel almost 5 years
    Unfortunately none of the proposed solutions work with the option rcParams["text.usetex"] = True