【Python matplotlib】鼠标右键移动画布

在 Matplotlib 中,鼠标右键移动画布的功能通常是通过设置交互模式来实现的,例如使用 mpl_connect 方法。以下是一个示例代码,展示如何在 Matplotlib 中使用 mpl_connect 方法来实现鼠标右键移动画布的功能:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.use('TkAgg')

class PanCanvas:
    def __init__(self, ax):
        self.ax = ax
        self.press = None
        self.x0 = None
        self.y0 = None

        self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press)
        self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release)
        self.ax.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)

    def on_press(self, event):
        if event.button == 3:  # Right mouse button
            self.press = event.xdata, event.ydata
            self.x0 = self.ax.get_xlim()
            self.y0 = self.ax.get_ylim()

    def on_release(self, event):
        if self.press is not None:
            self.press = None
            self.ax.figure.canvas.draw()

    def on_motion(self, event):
        if self.press is None:
            return
        if event.button == 3:  # Right mouse button
            x_press, y_press = self.press
            dx = event.xdata - x_press
            dy = event.ydata - y_press
            self.ax.set_xlim(self.x0[0] - dx, self.x0[1] - dx)
            self.ax.set_ylim(self.y0[0] - dy, self.y0[1] - dy)
            self.ax.figure.canvas.draw()

def main():
    # 创建一个绘图窗口和一个子图
    fig, ax = plt.subplots()
    ax.set_xlim(0, 10)
    ax.set_ylim(0, 10)

    # 绘制一些示例数据
    x = np.linspace(0, 10, 100)
    y = np.sin(x)
    line, = ax.plot(x, y)

    # 创建 PanCanvas 对象
    pan_canvas = PanCanvas(ax)

    plt.show()

if __name__ == "__main__":
    main()
相关推荐
巴啦啦小魔仙变身3 分钟前
Django-ORM-select_related
数据库·python·django·sqlite
cdut_suye8 分钟前
全面剖析 Linux 进程管理与 PCB 机制
java·linux·运维·服务器·c++·人工智能·python
寻月隐君25 分钟前
Python 数据结构与算法:课程笔记与实战解析
后端·python·github
红队it41 分钟前
【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
python·数据分析·spark·汽车·大屏端
蹦蹦跳跳真可爱5891 小时前
Python----计算机视觉处理(opencv:图片灰度化)
人工智能·python·opencv·计算机视觉
不爱学习的小枫1 小时前
scala的集合
开发语言·scala
梦醒沉醉1 小时前
Scala的初步使用
开发语言·后端·scala
小白学大数据1 小时前
Fuel 爬虫:Scala 中的图片数据采集与分析
开发语言·爬虫·scala
贩卖纯净水.1 小时前
《React 属性与状态江湖:从验证到表单受控的实战探险》
开发语言·前端·javascript·react.js
JouJz2 小时前
Java基础系列:深入解析反射机制与代理模式及避坑指南
java·开发语言·代理模式