matplotlib 交互式绘图(在图表上手动绘制线条)

2024-03-11

我已经使用 matplotlib 成功绘制了一组日期排序数据(X 轴是日期)。但是,我希望能够manually在绘制的图表上从一个 (date1, y1) 到另一个 (date2, y2) 绘制线条。

我似乎找不到任何例子来说明如何做到这一点 - 或者实际上是否可行。

总而言之,这就是我想做的:

  1. 在绘制的图表上绘制一组线
  2. 将手动绘制的线条数据保存到文件中
  3. 从文件加载手动绘制的线条数据(以重新创建图形)
  4. 理想情况下,我想存储有关绘制线条的“元数据”(例如颜色、线宽等)

有人可以发布一个骨架片段(最好带有更多信息的链接),以展示我如何开始实现这个(主要要求是能够在图表上手动绘制线条,然后将线条保存/加载到图中) )。

Note:通过“手动”,我的意思是能够通过单击一个点,然后单击绘制的图表中的另一个点来绘制线条。在两点之间画一条线(或者简单地单击一个点,然后在绘制的图表上的另一个点上拖动并释放鼠标)

[[更新]]

dawe,非常感谢您提供的片段。这允许我做我想做的事情 - 但是,一旦在画布上绘制线条(第二次单击鼠标后),GUI 就会崩溃,并且我在控制台上收到此警告消息:

/usr/local/lib/python2.6/dist-packages/matplotlib/backend_bases.py:2192: DeprecationWarning: Using default event loop until function specific to this GUI is implemented
  warnings.warn(str,DeprecationWarning)

您知道是什么原因导致此警告和程序突然终止吗?

另外,是否可以在图表上绘制多条线? (我猜这将涉及编写某种事件处理程序来实例化 linedrawer 变量)。目前,我有机会在“应用程序”突然终止之前只画一条线。


我会写这样的东西:

import matplotlib.pyplot as plt
class LineDrawer(object):
    lines = []
    def draw_line(self):
        ax = plt.gca()
        xy = plt.ginput(2)

        x = [p[0] for p in xy]
        y = [p[1] for p in xy]
        line = plt.plot(x,y)
        ax.figure.canvas.draw()

        self.lines.append(line)

Using ginput()您可以避免更复杂的事件处理。它“工作”的方式是你绘制一些东西:

plt.plot([1,2,3,4,5])
ld = LineDrawer()
ld.draw_line() # here you click on the plot

为了将行数据保存/加载到文件中,您可以使用以下方法轻松实现方法pickle or shelve。您还可以通过该方法传递必要的元数据draw_line()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib 交互式绘图(在图表上手动绘制线条) 的相关文章

随机推荐

  • jQuery 事件未触发

    我一直在努力让它发挥作用 基本上我有一个搜索框 其中有一个默认字符串 即搜索 当用户单击输入字段时它应该消失 这是代码 HTML
  • 构建 MAUI Android 失败

    我创建了一个全新的 MAUI 应用程序 我必须创建一个新应用程序 因为当我升级 Visual Studio 预览版时 我使用预览版本创建的先前应用程序无法工作 这个应用程序使用 prism maui 这应该没有任何区别 我还使用使用预览版本
  • 即使明确设置,PreparedStatement 也不会超时

    我正在尝试模拟一个场景 其中我的服务失去与数据库的连接并且无法执行INSERT通过阻止与 iptables 的连接 但我无法使executeQuery 方法超时 我所做的是为PreparedStatement设置一个超时 如下所示state
  • 如何复制cmake目标

    我正在我的 cmake 项目中编写函数 该函数需要从一个目标创建两个目标 并稍微更改其中之一 option BORG STRIP TEST BINARIES OFF Strip symbols from test binaries to r
  • 从旧的 Subversion 备份中恢复文件

    我有一个来自旧的颠覆服务器的 tar 备份 该服务器早已失效 该服务器管理的所有源代码都是遗留代码 永远不会再需要 除了这个项目 tar 文件充满了小目录 如 conf dav db 有没有办法从这个备份中提取单个项目的最终源代码 您只需从
  • 在 Laravel 中如何在查询中不带参数的 groupBy Url

    下面的查询包含大量连接表和 DB raw 查询 它按预期工作 我想 groupBy 一个 landing 它是表中存储 URL 的字段 但我想对不带参数的 URL 进行分组 我怎样才能实现这个目标 下面的查询尝试使用 SUBSTRING I
  • 如何在反应导航6中分别处理两个抽屉?

    我创建了两个抽屉导航器 const MenuDrawerRight createDrawerNavigator const MenuDrawerLeft createDrawerNavigator function RightDrawerS
  • FluentNHibernate 和枚举

    我有一个名为 Permissions 的枚举 可以为用户分配权限 或者可以将权限分配给角色并为用户指定角色 用户和角色都有这样的属性 public virtual IList
  • Python SQLite - 慢速更新记录

    我有一个脚本 可以将数据库中存储的日期从 Unix 时间 纪元 转换为人类可读的格式 有30 000条记录 从数据库中提取数据 转换数据并将其打印到屏幕上的速度非常快 然而 从数据库中提取数据 转换数据并执行 更新 语句来更新记录的速度非常
  • 序列化为 json 响应时避免 hibernate 延迟初始化异常的更好方法

    这是参考中的我一个月前问的一个问题 https stackoverflow com questions 13354766 avoid hibernate lazy initialization exception 在这个问题中 https
  • 使用 Laravel 邮件类时如何设置 SwifMailer 插件?

    Laravel 不会返回任何有用的信息来显示电子邮件失败的原因 斯威夫邮递员记录器插件 http swiftmailer org docs plugins html logger plugin有助于发送过程中的调试 当通过 Laravel
  • 赋值运算符真的“只是”一个运算符吗?

    我的问题是由this https stackoverflow com questions 63228851 does assignment precede logical operator in ruby 63230036 noredire
  • 驱动程序如何成为操作系统的一部分?

    我知道操作系统内核是由驱动程序组成的 但是驱动程序是如何成为操作系统的一部分的 是内核自己反编译 然后添加驱动程序并重新编译自己吗 或者驱动程序是内核的插件 有人告诉我 对于大多数操作系统 驱动程序实际上成为内核的一部分 但是每当我编译c程
  • pycharm看不到python3.7解释器

    我在 Linux Mint 19 Tara Xfce 上使用 Pycharm Community 2018 1 4 它与 Python 3 5 解释器配合良好 我安装了 Python 3 7 作为系统上默认的 Python 解释器 pyth
  • 修改LD_LIBRARY_PATH

    在 UNIX 中 我正在尝试修改LD LIBRARY PATH为了使其包含一些库 我无法添加到系统的常规库中 我没有根权限 它是大学服务器 此时我已经使用了很多我在网络上找到的方法执行此操作但无法修改它 我也看不到是什么PATH 我尝试过使
  • 反转 ResourceManager

    如果执行 ResourceManager GetString Key 则可以获得资源中项目的值 有没有办法进行反向查找以从给定值的资源中获取密钥 本质上是反翻译 您应该能够获取 ResourceSet 并迭代它的值 如果它们相等则返回键 请
  • CUDA 标量和 SIMD 视频指令的效率

    SIMD指令的吞吐量低于32位整数运算 如果是 SM2 0 仅标量指令版本 则低 2 倍 如果是 SM3 0 则低 6 倍 什么情况下适合使用它们 如果您的数据已经以 SIMD 视频指令本机处理的格式打包 则需要多个步骤对其进行解包 以便可
  • 如何让树视图重新考虑是否需要水平滚动条?

    考虑以下非常简单的单元 Unit1 pas unit Unit1 interface uses Windows Classes Controls Forms ComCtrls type TForm1 class TForm TreeView
  • 使用内部/外部传播包

    我想在我的模拟中放置一个 系统 组件 类似于Modelica Fluid System and Modelica Mechanics MultiBody World 所有其他组件都可以从中访问Medium包 以便在整个流程图中仅设置一次工作
  • matplotlib 交互式绘图(在图表上手动绘制线条)

    我已经使用 matplotlib 成功绘制了一组日期排序数据 X 轴是日期 但是 我希望能够manually在绘制的图表上从一个 date1 y1 到另一个 date2 y2 绘制线条 我似乎找不到任何例子来说明如何做到这一点 或者实际上是