How to show mouse release event coordinates with Matplotlib?

To show mouse release event coordinates with Matplotlib, you can capture and display the x, y coordinates whenever the user releases a mouse button on the plot.

Basic Mouse Release Event Handler

First, let's create a simple event handler that prints coordinates when you release the mouse button ?

import matplotlib.pyplot as plt

# Configure matplotlib for interactive use
plt.rcParams['backend'] = 'TkAgg'
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

def onclick(event):
    if event.xdata is not None and event.ydata is not None:
        print(f"Mouse released at: x={event.xdata:.2f}, y={event.ydata:.2f}")
        print(f"Button: {event.button}")

# Create figure and plot
fig, ax = plt.subplots()
ax.plot(range(10))
ax.set_title("Click and release mouse to see coordinates")
ax.grid(True)

# Connect the event handler
fig.canvas.mpl_connect('button_release_event', onclick)
plt.show()

The output shows coordinates each time you release the mouse button ?

Mouse released at: x=4.96, y=1.66
Button: MouseButton.LEFT
Mouse released at: x=6.78, y=3.70
Button: MouseButton.LEFT
Mouse released at: x=2.99, y=7.18
Button: MouseButton.LEFT

Enhanced Version with Visual Feedback

Here's an improved version that marks clicked points on the plot ?

import matplotlib.pyplot as plt

plt.rcParams['backend'] = 'TkAgg'
plt.rcParams["figure.figsize"] = [8, 6]

class ClickTracker:
    def __init__(self, ax):
        self.ax = ax
        self.points = []
    
    def on_release(self, event):
        if event.inaxes != self.ax:
            return
        
        if event.xdata is not None and event.ydata is not None:
            x, y = event.xdata, event.ydata
            self.points.append((x, y))
            
            # Mark the point on the plot
            self.ax.plot(x, y, 'ro', markersize=8)
            self.ax.annotate(f'({x:.1f}, {y:.1f})', 
                           xy=(x, y), xytext=(10, 10), 
                           textcoords='offset points',
                           bbox=dict(boxstyle='round,pad=0.3', facecolor='yellow'))
            
            print(f"Point {len(self.points)}: x={x:.2f}, y={y:.2f}")
            plt.draw()

# Create the plot
fig, ax = plt.subplots()
ax.plot(range(10), [x**0.5 for x in range(10)], 'b-', linewidth=2)
ax.set_title("Mouse Release Event Tracker\nClick anywhere to mark points")
ax.grid(True, alpha=0.3)
ax.set_xlabel("X Coordinate")
ax.set_ylabel("Y Coordinate")

# Create tracker and connect event
tracker = ClickTracker(ax)
fig.canvas.mpl_connect('button_release_event', tracker.on_release)

plt.show()

This enhanced version marks each clicked point and displays the coordinates as annotations on the plot.

Key Components

Component Purpose Description
button_release_event Event type Triggered when mouse button is released
event.xdata X coordinate Mouse position in data coordinates
event.ydata Y coordinate Mouse position in data coordinates
event.button Button info Which mouse button was released

Important Notes

Always check if event.xdata and event.ydata are not None before using them. They become None when clicking outside the plot area. Use event.inaxes to ensure the click is within the desired axes.

Conclusion

Mouse release events in Matplotlib provide precise coordinate tracking for interactive plots. Use mpl_connect('button_release_event', handler) to capture coordinates and create responsive data visualization applications.

Updated on: 2026-03-25T20:13:41+05:30

591 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements