How to plot an image with non-linear Y-axis with Matplotlib using imshow?

To plot an image with a non-linear Y-axis using Matplotlib's imshow() method, you need to customize the Y-axis tick positions while displaying your 2D data. This technique is useful when you want specific spacing or values on your Y-axis that don't follow a linear pattern.

Step-by-Step Approach

The process involves the following steps:

  • Set the figure size and adjust the padding between and around the subplots
  • Add a subplot to the current figure
  • Set non-linear Y-axis ticks using custom positions
  • Create or prepare your 2D data array
  • Display the data as an image using imshow()
  • Display the figure using show()

Example

Here's a complete example that creates a random 2D array and displays it with custom Y-axis ticks ?

import matplotlib.pyplot as plt
import numpy as np

# Set figure size and enable automatic layout
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# Create subplot
ax = plt.subplot(111)

# Set non-linear Y-axis ticks (custom positions)
ax.yaxis.set_ticks([0, 2, 4, 8])

# Create random 2D data
data = np.random.randn(5, 5)

# Display the data as an image
plt.imshow(data, cmap='copper')

# Add colorbar for reference
plt.colorbar()

# Show the plot
plt.show()

Customizing Non-Linear Scales

You can create more complex non-linear Y-axis configurations by setting custom tick positions and labels ?

import matplotlib.pyplot as plt
import numpy as np

# Create figure and subplot
fig, ax = plt.subplots(figsize=(8, 6))

# Create sample data
data = np.random.rand(10, 10) * 100

# Set custom non-linear Y-axis ticks and labels
tick_positions = [0, 1, 3, 7, 9]
tick_labels = ['0', '10', '50', '200', '500']

ax.set_yticks(tick_positions)
ax.set_yticklabels(tick_labels)

# Display the image
im = ax.imshow(data, cmap='viridis', aspect='auto')

# Add colorbar and labels
plt.colorbar(im, ax=ax)
plt.xlabel('X-axis')
plt.ylabel('Custom Y-axis (Non-linear)')
plt.title('Image with Non-Linear Y-axis')

plt.show()

Key Parameters

Parameter Description Example
set_ticks() Sets tick positions [0, 2, 4, 8]
set_ticklabels() Sets custom tick labels ['Low', 'Med', 'High']
cmap Colormap for the image 'copper', 'viridis'
aspect Controls image aspect ratio 'auto', 'equal'

Conclusion

Use set_ticks() to create non-linear Y-axis spacing with imshow(). Combine with set_ticklabels() for custom labels that represent your actual data values. This approach is particularly useful for scientific data visualization where linear scaling isn't appropriate.

Updated on: 2026-03-25T23:54:05+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements