当前位置: 首页 > 面试题库 >

Matplotlib ion()和子过程

萧萧迟
2023-03-14
问题内容

我正在尝试弹出一个图,以便用户可以确认拟合是否起作用,但不会挂断这样做的整个过程。但是,当窗口出现时,窗口中什么也没有,它是“无响应”。我怀疑与子流程功能之间的交互不良,因为此代码是前端代码,并且数据的处理都在C
++中运行。

import subprocess
import numpy as np
from matplotlib import pyplot as mpl
...
mpl.ion()
fig = mpl.figure()
ax = fig.add_subplot(1,1,1)
ax.grid(True)
ax.plot(x, y, 'g')
ax.scatter(X, Y, c='b')
ax.scatter(min_tilt, min_energy, c='r')
mpl.draw()
...
subprocess.call(prog)

下列子过程确实打开。如果我删除ion()呼叫并使用mpl.show(),则绘图可以正常工作,但是整个过程将一直持续到关闭窗口。当用户查看图形时,我需要继续执行该过程。有没有办法做到这一点?


问题答案:

这可能是徒劳的,但是由于没有人有更好的解决方案,因此我去了线程模块,它起作用了。如果有人有更简单的方法来进行此操作,请告诉我。

import subprocess
import threading
from matplotlib import pyplot as mpl
...
class Graph(threading.Thread):
   def __init__(self,X,Y,min_tilt, min_energy):
       self.X = X
       self.Y = Y
       self.min_tilt = min_tilt
       self.min_energy = min_energy
       threading.Thread.__init__(self)

   def run(self):
       X = self.X
       Y = self.Y
       dx = (X.max()-X.min())/30.0
       x = np.arange(X.min(),X.max()+dx,dx)
       y = quad(x,fit)
       fig = mpl.figure()
       ax = fig.add_subplot(1,1,1)
       ax.grid(True)
       ax.plot(x, y, 'g')
       ax.scatter(X, Y, c='b')
       ax.scatter(self.min_tilt, self.min_energy, c='r')
       mpl.show()
thread = Graph(X,Y,min_tilt,min_energy)
thread.start()


 类似资料:
  • 问题内容: 我试图从通话中抢夺,尽管我可以通过以下方式轻松实现此目标: 我想“实时”抓取。使用上述方法,PIPE等待获取所有内容,然后返回。 因此,出于日志记录目的,这不符合我的要求(例如,“查看”发生的情况)。 在运行时,有没有办法逐行获取?或者这是(必须等到关闭)的限制。 编辑 如果我切换为我只得到(不理想)的最后一行: 问题答案: 您的解释器正在缓冲。在打印语句后,添加对sys.stdout

  • 象其他的语言一样,Perl 也支持自定义的子过程.(注:我们也把它们叫做函数,不过 函数和子过程在 Perl 里是一样的东西.有时候我们甚至叫它们方法,方法和函数或 子过程是同样的方式定义的,只是调用方式不同.)这些子过程可以在主程序中的任何地方 定义,也可以用 do,require 或 use 关键字从其他文件中加载.或者直接使用 eval 在 运行的时候产生.你甚至可以使用第十章"包"中"自动

  • 为什么我的console.log不显示在我非常简单的electron应用程序的devTools中? > I console.log到渲染器进程electron加载的js文件中。 如果我console.log主过程电子,我可以在命令行中查看结果 我可以看到js文件是由渲染器进程加载到devTools中的 index.js: index.html文件: midi-test.js文件: > 我不想使用电

  • 问题内容: 我们需要能够在某些环境中跳过子模块。 有问题的模块包含集成测试,并且需要半小时才能运行。因此,我们希望在CI服务器上进行构建时将其包括在内,但是当开发人员在本地进行构建(并运行测试)时,我们希望跳过该模块。 有没有办法通过配置文件设置来做到这一点?我已经进行了一些谷歌搜索,并在这里查看了其他问题/答案,但没有找到一个好的解决方案。 我想一个选择是从父级中完全删除该子模块,然后在CI服务

  • WeX5用的都是标准技术,连基本框架也只用主流。开发者会发现WeX5用的所有基本技术和框架,都是业界的标准和主流: 一、UI技术:WeX5的UI技术和标准是html+js+css,框架是jquery、require js和bootstrap,都是主流的不能再主流,标准得不能在标准的东西了。 二、本机apiframe work:WeX5采用了codova/phonegap,也是最主流的了,MS的vi

  • WeX5用的都是标准技术,连基本框架也只用主流。开发者会发现WeX5用的所有基本技术和框架,都是业界的标准和主流: 一、UI技术:WeX5的UI技术和标准是html+js+css,框架是jquery、require js和bootstrap,都是主流的不能再主流,标准得不能在标准的东西了。 二、本机apiframe work:WeX5采用了codova/phonegap,也是最主流的了,MS的vi