# 5 Best Ways to Put Text Outside Python Plots

π‘ Problem Formulation: When visualizing data with Python plots, there are occasions where adding text outside the axes can enhance the understanding of the data or provide additional context. Whether it’s annotating the data points, offering a title, or giving a detailed description, positioning this text properly is crucial. This article discusses five effective methods for placing text outside plots in Python, ensuring clarity and readability in the presentation of data visualizations.

## Method 1: Adjusting Figure Space with `subplots_adjust()`

To place text outside a plot, we can adjust the surrounding space of the figure to make room for the text. The `subplots_adjust()` function in matplotlib is a useful way to manipulate the subplot parameters, such as bottom, top, right, and left margins.

Here’s an example:

```import matplotlib.pyplot as plt

# Sample plot
plt.plot([0, 1], [0, 1])
plt.title("Sample Plot")

# Adjust subplot parameters to make room for text

# Place text outside below the plot
plt.text(0, -0.1, 'Text outside the plot', ha='left')

plt.show()```

The output is a plot with text placed below the x-axis, outside the main plot area.

This code snippet creates a simple line plot and then calls `subplots_adjust()` to ensure there’s enough space below the plot. The `plt.text()` function is then used to position the text by specifying coordinates relative to the axes, with the text horizontally aligned to the left.

## Method 2: Using `annotate()` with Axes Coordinates

The `annotate()` function in matplotlib allows for more precise placement of text using axes coordinates, where (0, 0) is the bottom left of the plot and (1, 1) is the top right. This method is perfect for adding annotations near or outside the edges of the plot.

Here’s an example:

```import matplotlib.pyplot as plt

# Sample plot
plt.plot([1, 2], [3, 4])
plt.title("Simple Line Plot")

# Annotate with axes coordinates
plt.annotate('Outside Text', xy=(1, 1), xycoords='axes fraction', xytext=(1.02, 1), textcoords='axes fraction', ha='left', va='top')

plt.show()```

The output displays a line plot with text placed just to the right outside of the plot.

This example utilizes the `annotate()` method to place text outside the right edge of the plot, using axes fraction coordinates for positioning. The parameters `xy` and `xytext` allow for specific placement relative to the axes.

## Method 3: Tweaking Axis Limits

Another approach for placing text outside a plot is to adjust the axis limits using the `set_ylim()` or `set_xlim()` methods from the axes object. By extending the limits of the current axes, we create additional space for the text.

Here’s an example:

```import matplotlib.pyplot as plt

fig, ax = plt.subplots()

# Sample plot
ax.plot([10, 20], [30, 40])

# Extend the y-axis to make room for text
ax.set_ylim(25, 45)

# Place text outside above the plot
ax.text(10, 42, 'Text above the plot', ha='left')

plt.show()```

The output is a plot with text placed above the top y-axis limit.

In this snippet, the y-axis limits are extended using `set_ylim()` to create space for text above the plot. The text is added via the `text()` method on the axes object.

## Method 4: Exploiting Legend Space

If a plot has a legend, we can place text in the region normally reserved for the legend by manipulating the legend’s bounding box. This workaround utilizes empty legend entries or additional functionality available in matplotlib to use that space effectively for text.

Here’s an example:

```import matplotlib.pyplot as plt

# Sample plot
plt.plot([5, 15], [10, 20], label="Sample Line")

# Create a legend, with a handle-less entry for text
plt.legend(handles=[plt.Line2D([], [], color='none', label='Additional text:')])

plt.show()```

The output shows a plot with text disguised as a legend entry below the actual legend.

This code snippet creatively adds a fake legend entry with no associated handle by specifying a color of ‘none’. This places our additional text where a second legend entry would normally appear.

## Bonus One-Liner Method 5: Using `fig.text()`

For a quick one-liner solution, the `fig.text()` method allows adding text at an arbitrary location on the figure using figure coordinates, where (0, 0) is the bottom left corner and (1, 1) is the top right corner.

Here’s an example:

```import matplotlib.pyplot as plt

# Sample plot
fig = plt.figure()
plt.plot([10, 20], [30, 40])

# Add text at figure level coordinates
fig.text(0.1, 0.9, 'One-liner text outside the plot')

plt.show()```

The output places text within the top left margin of the entire figure space.

This brief code segment uses `fig.text()` to add text at the figure level rather than the axes, providing the freedom to place it near the top margin of the page, outside the plot-axis system.

## Summary/Discussion

• Method 1: Using `subplots_adjust()`. Strengths: Straightforward and easy for beginners. Weaknesses: Can require trial and error to get spacing right.
• Method 2: `annotate()` Function. Strengths: High precision. Weaknesses: Slightly complex for new users, but versatile.
• Method 3: Adjusting Axis Limits. Strengths: Gives additional control over axes. Weaknesses: May distort the scale or aspect ratio of the plot.
• Method 4: Legend Space Utilization. Strengths: Creative use of existing plot elements. Weaknesses: Can be confusing, as it mimics legend formatting.
• Bonus Method 5: `fig.text()` One-Liner. Strengths: Extremely quick and straightforward. Weaknesses: Less intuitive coordinate system for positioning text.