Putting newline in matplotlib label with TeX in Python?
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}$')
Related videos on Youtube
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, 2020Comments
-
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 about 14 yearsYou might want to proactively double-escape LaTeX commands to make sure they are not interpreted by Python:
xlabel('$\\Sigma$')
-
aaren over 10 yearsThis answer is not correct. You either double escape the latex `` in a normal string (no r) or you follow @EOLs answer
-
Faber over 9 yearsregarding centering:
ylabel('this is vertical\ntest', multialignment='center')
from matplotlib.org/examples/pylab_examples/multiline.html -
SeanM almost 7 yearsJust 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 over 5 yearsThis 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 almost 5 yearsUnfortunately none of the proposed solutions work with the option
rcParams["text.usetex"] = True