Matplotlib - 缩放窗口



在数据可视化/绘图中,缩放窗口是指调整视图以使特定对象或区域更大或更小的过程。此交互式功能在探索图形、图表或任何视觉表示时特别有用,使用户能够专注于感兴趣的特定区域或全面查看整个内容。

Matplotlib 中的缩放窗口

Matplotlib 的关键功能之一是其对事件处理的支持,它允许用户将鼠标点击等事件连接到绘图中的特定操作。在本教程中,我们将探索 Matplotlib 中的缩放窗口事件处理,重点关注button_press_event以及如何使用它来创建可缩放窗口。

示例 1

此示例创建两个图形(源和缩放)。源图形显示散点图,缩放图形显示初始的放大视图。当在源图形中单击一个点时,on_press函数通过使用button_press_event触发。此 on_press 函数调整可缩放图形的限制,以在所单击的点为中心创建缩放效果。

import matplotlib.pyplot as plt
import numpy as np

# Fixing random state for reproducibility
np.random.seed(19601)

# Create source and zoomable figures and axes
figsrc, axsrc = plt.subplots(figsize=(3.7, 3.7))
figzoom, axzoom = plt.subplots(figsize=(3.7, 3.7))

# Set initial limits and titles for both axes
axsrc.set(xlim=(0, 1), ylim=(0, 1), autoscale_on=False, title='Click to zoom')
axzoom.set(xlim=(0.45, 0.55), ylim=(0.4, 0.6), autoscale_on=False, title='Zoom window')

# Generate random data for scatter plots
x, y, s, c = np.random.rand(4, 100)
s *= 200

# Plot the scatter plots on both axes
axsrc.scatter(x, y, s, c)
axzoom.scatter(x, y, s, c)

# Define the event handling function
def on_press(event):
   if event.button != 1:
      return
   x, y = event.xdata, event.ydata
   axzoom.set_xlim(x - 0.1, x + 0.1)
   axzoom.set_ylim(y - 0.1, y + 0.1)
   figzoom.canvas.draw()

# Connect the event handler to the source figure
figsrc.canvas.mpl_connect('button_press_event', on_press)

# Show the plots
plt.show()

输出

执行上述程序后,您将获得以下输出:

zoom_window_ex1

观看下面的视频以观察缩放窗口功能在此处的运作方式。

Zoom_Window gif

示例 2

让我们再创建一个使用 Matplotlib 创建缩放窗口的示例。在此示例中,一个简单的正弦波绘制在主轴上,并使用plt.axes()方法创建了一个较小的可缩放窗口。当您单击主图中的一个点时,on_press 函数将被触发,调整缩放窗口的限制,以在所单击的点为中心创建缩放效果。

import matplotlib.pyplot as plt
import numpy as np

# Generate data
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Create a figure and axis
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y, label='Sin(x)')
ax.set_title('Zoom Window Example')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.legend()

# Create a zoomable window
zoomed_ax = plt.axes([0.55, 0.25, 0.3, 0.3], facecolor='lightgoldenrodyellow')
zoomed_ax.plot(x, y, label='Sin(x)')
zoomed_ax.set_title('Zoomed Window')
zoomed_ax.set_xlim(2, 4)
zoomed_ax.set_ylim(0.5, 1)

def on_press(event):
   if event.button != 1:
      return
   x, y = event.xdata, event.ydata
   zoomed_ax.set_xlim(x - 1, x + 1)
   zoomed_ax.set_ylim(y - 0.2, y + 0.2)
   fig.canvas.draw()

# Connect the event handler to the figure
fig.canvas.mpl_connect('button_press_event', on_press)

plt.show()

输出

执行上述程序后,您将获得以下输出:

zoom_window_ex2

观看下面的视频以观察缩放窗口功能在此处的运作方式。

zoom_window_ex2 gif
广告