【Matplotlib】以当前光标位置为中心放大canvas图表

代码:

import numpy as np
import matplotlib.pyplot as plt

class ScrollZoom:
    def __init__(self, ax=None, zoom_factor=1.2):
        self.ax = ax
        self.zoom_factor = zoom_factor
        self.xmin, self.xmax, self.ymin, self.ymax = ax.axis()
        if ax is not None:
            ax.figure.canvas.mpl_connect('scroll_event', self.on_scroll)

    def on_scroll(self, event):
        if event.inaxes != self.ax:
            return
        x_center = event.xdata
        y_center = event.ydata
        if event.button == 'up':
            self._zoom(1 / self.zoom_factor, x_center, y_center)
        elif event.button == 'down':
            self._zoom(self.zoom_factor, x_center, y_center)
        self.ax.figure.canvas.draw()

    def _zoom(self, scale, x_center, y_center):
        x = self.ax.get_xlim()
        y = self.ax.get_ylim()
        new_width = (x[1] - x[0]) * scale
        new_height = (y[1] - y[0]) * scale
        self.ax.set_xlim(x_center - new_width / 2, x_center + new_width / 2)
        self.ax.set_ylim(y_center - new_height / 2, y_center + new_height / 2)

# 示例数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# 创建图形和坐标轴
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Scroll to Zoom (Centered on Cursor)')

# 添加鼠标滚轮放大功能
scroll_zoom = ScrollZoom(ax)

plt.show()

你可能感兴趣的:(工具,matplotlib)