Skip to main content

Best Practices for Plotting with Matplotlib

Creating effective visualizations is crucial for communicating insights from your data. While Matplotlib provides powerful tools for plotting, adhering to best practices ensures that your plots are not only visually appealing but also clear and informative. In this article, we’ll explore some of the best practices for plotting with Matplotlib.


1. Keep It Simple

Simplicity is key to effective visualization. Avoid cluttering your plots with unnecessary elements.

1.1 Focus on Key Data

Only include data that is essential to the story you want to tell.

import matplotlib.pyplot as plt

# Sample data
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 35]

# Creating a simple line plot
plt.plot(x, y)
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.show()

1.2 Avoid Chart Junk

Remove unnecessary gridlines, tick marks, or excessive use of colors and annotations that can distract from the data.

# Simplifying the plot by removing unnecessary elements
plt.plot(x, y)
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.grid(False) # Removing gridlines
plt.show()

2. Use Consistent Styles and Formats

Consistency in styles and formats helps in making your plots easier to understand and compare.

2.1 Use a Consistent Color Palette

Stick to a consistent color palette across multiple plots.

# Using a consistent color palette
colors = ['#1f77b4', '#ff7f0e']

# Sample data for two plots
y2 = [15, 25, 30, 35, 40]

plt.plot(x, y, color=colors[0], label='Product A')
plt.plot(x, y2, color=colors[1], label='Product B')
plt.title('Sales Comparison')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.legend()
plt.show()

2.2 Standardize Fonts and Sizes

Use consistent font styles and sizes for titles, labels, and annotations.

# Standardizing font styles and sizes
plt.plot(x, y, color=colors[0], label='Product A')
plt.title('Yearly Sales', fontsize=14, fontweight='bold')
plt.xlabel('Year', fontsize=12)
plt.ylabel('Sales', fontsize=12)
plt.legend(fontsize=10)
plt.show()

3. Label Clearly and Accurately

Labels are crucial for understanding your plots. Ensure all axes, legends, and data points are clearly labeled.

3.1 Use Descriptive Titles and Labels

Make sure titles and labels are descriptive and provide enough context.

# Adding descriptive labels
plt.plot(x, y)
plt.title('Yearly Sales (in $1000)')
plt.xlabel('Year')
plt.ylabel('Sales ($1000)')
plt.show()

3.2 Add Legends Where Necessary

Legends help identify different data series, especially in plots with multiple lines or categories.

# Adding a legend to distinguish between data series
plt.plot(x, y, color=colors[0], label='Product A')
plt.plot(x, y2, color=colors[1], label='Product B')
plt.title('Sales Comparison')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.legend()
plt.show()

4. Consider the Audience

Your audience should dictate the complexity and depth of your visualizations.

4.1 Adjust for Different Audiences

For technical audiences, include more detailed information. For general audiences, simplify the plot and focus on key insights.

# Simplified plot for a general audience
plt.plot(x, y)
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.show()

# Detailed plot for a technical audience
plt.plot(x, y, label='Sales Trend')
plt.fill_between(x, y, color='lightblue', alpha=0.5)
plt.title('Yearly Sales with Variability')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.legend()
plt.show()

5. Test and Refine Your Plots

Before finalizing your plot, review it to ensure it communicates the intended message clearly.

5.1 Test for Readability

Ensure that all elements of the plot are easily readable, especially when viewed at different sizes or on different devices.

5.2 Refine Based on Feedback

If possible, gather feedback on your visualizations and refine them accordingly.


6. Make Use of Plot Annotations

Annotations can help clarify key points in your plot and draw attention to important data.

6.1 Highlight Key Data Points

Use annotations to highlight significant points or trends.

# Highlighting the peak sales year
plt.plot(x, y)
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales')

# Adding annotation
plt.annotate('Peak Sales', xy=(5, 35), xytext=(4, 30),
arrowprops=dict(facecolor='black', shrink=0.05))
plt.show()

6.2 Add Contextual Information

Annotations can also add context that might not be immediately obvious from the data alone.

# Adding context with annotations
plt.plot(x, y)
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales')

# Adding annotation with context
plt.annotate('Economic downturn', xy=(3, 25), xytext=(1, 20),
arrowprops=dict(facecolor='red', shrink=0.05),
fontsize=12, color='red')
plt.show()

7. Consider Export Formats and Quality

The format and quality in which you save your plot can affect its readability and usability in reports or presentations.

7.1 Choose the Right Format

Choose the appropriate format (PNG, PDF, SVG) depending on how the plot will be used.

7.2 Ensure High Resolution

For plots intended for print or large displays, ensure they are saved at a high resolution.

# Saving a high-resolution plot for print
plt.plot(x, y)
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.savefig('yearly_sales_high_res.png', dpi=300)

8. Conclusion

By following these best practices, you can create plots in Matplotlib that are not only visually appealing but also effective in communicating your data insights. Consistent, clear, and well-labeled plots are more likely to be understood and appreciated by your audience, regardless of their background. As you continue to refine your plotting skills, these best practices will help you produce professional-grade visualizations.