Matplotlib - Keypress Event



In computer programming, the detection and handling of keypress events are fundamental for capturing user input and enabling various functionalities within applications. Whether it's navigating through menus, entering text, triggering actions, or controlling interactive elements, keypress events play a crucial role in user interaction.

Matplotlib provides the tools for handling the keypress events, allowing you to capture and respond to keyboard inputs during interactive plotting sessions. When a key is pressed, Matplotlib triggers the key_press_event, allowing users to define custom actions based on the pressed keys.

The library attaches some keypress callbacks by default for enhanced interactivity. These default callbacks are documented in the Navigation keyboard shortcuts section of the Matplotlib documentation.

Example

Let's see this basic example, which demonstrates the default keypress events in Matplotlib.

import numpy as np
import matplotlib.pyplot as plt

# Define a function to handle keypress events
def press(event):
   print('You pressed:', event.key)

# Create a Matplotlib figure and axis
fig, ax = plt.subplots()

# Connect the keypress event handler to the figure canvas
cid = fig.canvas.mpl_connect('key_press_event', press)

# Plot sin wave	
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))

# Display the plot
plt.show()

Output

On executing the above program you will get the following figure, and press any key to observe the working of this example −

keypress_event_ex1
You pressed: tab
You pressed: caps_lock
You pressed: shift
You pressed: control
You pressed: alt
You pressed: meta
You pressed: a
You pressed: b
You pressed: c
You pressed: d
You pressed: s
You pressed: g
You pressed: g
You pressed: g
You pressed: g
You pressed: k
You pressed: k
You pressed: k
You pressed: k
You pressed: k
You pressed: k
You pressed: l
You pressed: l
You pressed: p
You pressed: p
You pressed: q

Watch the video below to observe how this keypress event feature works here.

keypress_event_ex1 gif

From the above output, you can observe the working of some of the default keys like 'g' (toggling the grid), 's' (saving the figure), 'q' (closing the figure), and more.

Creating a Custom Keypress Event Function

To handle keypress events to specific needs, you can create a custom function and connect it to the key_press_event using the mpl_connect method.

Example

The following example demonstrates a simple keypress event function that toggles the visibility of an xlabel when the 'x' key is pressed.

import sys
import matplotlib.pyplot as plt
import numpy as np

def on_press(event):
   print('Pressed key:', event.key)
   sys.stdout.flush()

   # Toggle visibility of xlabel when 'x' key is pressed
   if event.key == 'x':
      visible = xl.get_visible()
      xl.set_visible(not visible)
      fig.canvas.draw()

fig, ax = plt.subplots()
fig.canvas.mpl_connect('key_press_event', on_press)

# Plot random data points
ax.plot(np.random.rand(12), np.random.rand(12), 'go')
xl = ax.set_xlabel('Toggle this label  when the "x" key is pressed', 
   fontsize=16, color='red')
ax.set_title('Press x key')

plt.show()

Output

On executing the above program you will get the following figure, and press any key to observe the working of this example −

keypress_event_ex2
Pressed key: x
Pressed key: x
Pressed key: x
Pressed key: x
Pressed key: a
Pressed key: enter

Watch the video below to observe how this keypress event feature works here.

keypress_event_ex2 gif

Example

Here is another example that demonstrates how to add the escape key to exit the figure in addition to the "q" key and also it calculates the how many number of times the enter key is pressed.

import numpy as np
import matplotlib.pyplot as plt

# Define a function to handle keypress events
def press(event):
   print('Pressed key:', event.key)
    
   # If the 'enter' key is pressed, append 1 to the count list
   if event.key == 'enter':
      cnt.append(1)
    
   # If the 'escape' key is pressed, close the plot
   if event.key == "escape":
      plt.close()

cnt = []

# Create a figure 
fig, ax = plt.subplots()

# Connect the keypress event handler to the figure canvas
fig.canvas.mpl_connect('key_press_event', press)
ax.plot(np.random.rand(12), np.random.rand(12), 'go')
plt.show()

# Calculate and print the sum of counts
result = sum(cnt)
print(result, cnt)

Output

On executing the above program you will get the following figure, and press any key to observe the working of this example −

keypress_event_ex3
Pressed key: b
Pressed key: enter
Pressed key: enter
Pressed key: caps_lock
Pressed key: caps_lock
Pressed key: enter
Pressed key: escape
3 [1, 1, 1]
keypress_event_ex3 gif
Advertisements