5 Best Ways to Superscript in Python Plots

Rate this post

πŸ’‘ Problem Formulation: When presenting scientific data, it’s often necessary to use superscript notation for exponents, chemical compounds or to indicate ordinal numbers in labels, titles, or annotations on plots. The input would be a standard plot element in Python where the desired output is the inclusion of superscript text within the plot. This article will show how to add superscript text to plots in Python using various methods.

Method 1: Matplotlib’s text() and annotate() Functions

Matplotlib, a popular plotting library in Python, provides text() and annotate() functions that allow for customization of text properties using a subset of TeX markup. Superscript can be added by using the ** syntax or \textsuperscript{} command within these functions.

Here’s an example:

import matplotlib.pyplot as plt

plt.plot([0, 1], [0, 1])
plt.text(0.5, 0.5, 'Text with superscript $x^{2}$')
plt.annotate('Annotation with superscript', xy=(0.5, 0.5), xytext=(0.3, 0.7), 
             arrowprops=dict(facecolor='black', shrink=0.05),
             textcoords='axes fraction')

Output: A plot with a text “Text with superscript xΒ²” and an annotated text with an arrow and “Annotation with superscript”.

This code snippet shows text being added to a plot at coordinates (0.5, 0.5) with “x” in superscript using the $x^{2}$ markup. An annotation is also added, with an arrow pointing from the text to the point on the plot.

Method 2: Using rcParams for Consistent Superscript Style

For consistent styling across an entire plot or all plots within a session, you can change the default Matplotlib parameters using rcParams. The superscript styling will automatically apply to all text elements (including labels and titles) without specifying the markup each time.

Here’s an example:

import matplotlib.pyplot as plt

plt.rcParams['text.usetex'] = True

plt.title('Graph of $x^{3}$')
plt.plot([0, 1, 2], [0, 1, 8])

Output: A plot with title ‘Graph of xΒ³’, labeled axes, and a line plot.

This code snippet sets the 'text.usetex' parameter to True using rcParams, which allows using LaTeX markup globally, making all the texts, including the title, follow LaTeX syntax for superscript by default.

Method 3: Object Oriented API for Fine Control

The object-oriented API provided by Matplotlib offers finer control over text properties by creating Text objects. This method is especially useful for complex plots where individual control is necessary over each text element.

Here’s an example:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 9])
text_obj = ax.text(1, 8, 'Point $(2, 4^{2})$', fontsize=14, color='blue')

Output: A plot with a blue colored text “Point (2, 4Β²)” at coordinates (1, 8).

In this code snippet, we create a Text object by calling the text method on the Axes object ax. This adds a text at the specified coordinates with a custom font size and color and includes superscript notation using LaTeX syntax.

Method 4: Formatting Strings with Unicode Characters

Python strings support Unicode characters, allowing for the use of superscript numbers and certain letters directly in the text without relying on TeX or LaTeX markup. This method is helpful when the full LaTeX system is not needed or desired.

Here’s an example:

import matplotlib.pyplot as plt

plt.plot([0, 1], [0, 1])
plt.title('Plot of f(x) = x\u00B2 + x\u00B3')

Output: A plot with title “Plot of f(x) = xΒ² + xΒ³”.

The code snippet demonstrates using Unicode superscript characters (\u00B2 for “Β²” and \u00B3 for “Β³”) directly in the plot title. While this method works great for commonly used superscript characters, it’s limited to the characters available in Unicode.

Bonus One-Liner Method 5: Using pyplot Functions Directly

For quick and simple plots, you can directly use the pyplot functions with TeX markup for superscripts. This method is ideal for interactive sessions or scripts where simplicity and speed are priorities.

Here’s an example:

import matplotlib.pyplot as plt

plt.plot([0, 1], [1, 4], label='x\u2074')

Output: A plot with a labeled line that reads “x⁴” in the legend.

This snippet adds a legend to the plot where the label uses a Unicode superscript character for the number 4 (“\u2074” for “⁴”). This one-liner approach is quick, but similar to method 4, it only works with a limited set of superscript characters available in Unicode.


  • Method 1: Matplotlib’s text() and annotate() Functions. Flexible and widely used. TeX markup may be cumbersome for simple needs.
  • Method 2: Using rcParams. Consistent styling for all text. Requires initial setup and familiarity with LaTeX.
  • Method 3: Object Oriented API. Great for complex plotting needs. More verbose and requires understanding of object-oriented approach.
  • Method 4: Formatting Strings with Unicode Characters. Easy to use without additional libraries. Limited to available Unicode superscript characters.
  • Bonus Method 5: Using pyplot Functions Directly. Quick and easy one-liners. Shared limitations with method 4 due to Unicode usage.