Netlogo 在 Python 绘图后暂停,需要关闭绘图才能继续
Netlogo pauses after plotting in Python, need to close plot to continue
我的代码在 python 绘图后暂停,直到我关闭绘图才会继续。
我正在使用 matplotlib 绘图。
to plot-in-python
(py:run
"import matplotlib.pyplot as plt"
"time = [0, 1, 2, 3]"
"position = [0, 100, 200, 300]"
"plt.plot(time, position)"
"plt.xlabel('Time (hr)')"
"plt.ylabel('Position (km)')"
"plt.show()"
)
end
Q :
" My code pauses after plotting in python, and won't continue until I close the plot. "
一个:
结果是自然产物,因为 matplotlib
进入 .show()
方法,该方法阻塞(直到关闭)并且整个 Python 解释器生态系统停止,直到发生这种情况。如果不使用这种“交互式”-(Python-blocking) 模式中的绘图,而是将最终生成的 graph-scene 存储到 PDF 或其他格式的文件中,稍后可以使用 non-blocking 查看器进行检查,整个 ( py:run ... )
-scope 将按预期终止,没有“挂起”-Python 阻塞并且 NetLogo-world 可以继续其 evolution-flow 进一步。
Q :
" I was hoping to have the figure remain up and update with each loop of Netlogo (this is because the figures in Netlogo are not great). I understand that .ion()
is supposed to create interactive plots (i.e., updatable plots), but for whatever reason it does not work for me... Am I foolish to try and use Python in this way with Netlogo? – belief-desire-intent 2 hours ago "
一个:
好吧,我不会认为让 live-graphs 有一刻是愚蠢的。关键是,如何实现这一点。
在 70 年代后期,帕洛阿尔托研究中心(及其 spin-offs 之类的 PARCplace 系统)内部形成的“正偏差岛”涌现出许多奇妙的发明。我们非常感谢这些聪明的人,他们当时受雇为施乐研究机构工作。模块化交互式 GUI 的概念、word-processing 软件、Smalltalk 语言、计算机鼠标和许多其他发明都诞生于此。
GUI 概念,具有 many-actors,其中一些是 machine-driven,其中一些反映了 man-machine 交互,-就像您希望让 NetLogo 生成 live-graphs,生活在 Python-matplotlib 外系统中的东西确实很难编程,直到 PARCplace 的人们将主要职责分离的有条不紊的概念引入 MVC-system :
where
M代表MODEL:保持state-full代表Problem-under-Review,
V的部分代表 VISUAL:生成 PuR-state 视觉表示的部分,
C 代表 CONTROLLER:收集 Man-Machine-Interactions 的部分和所有其他“传感器”,PuR-state(模型)持续更新(好吧,以某种离散的 time-ordered 事件收集和 reflective-processing 方式)更新。
这必须先说,以便现在能够声称,您的愿望正在导致 MVC-model 的所谓“分布式”形式,其中 NetLogo 正在做 M-模型部分,驱动PuR-state的multi-agent进化,并命令“远程”-GUI-V- isual 部分并且必须从再次“远程”-GUI-C-ontroller.
接收输入(如果有的话)
这可能听起来很糟糕,但还算不上丑陋,如果我们尝试以一些不那么统一和 time-proven 的方式来实现相同的需求,那么与一团糟相比。
鉴于 NetLogo 的强大功能,我们可以使用 ( py:run ... )
-scope(s) 为这种“分布式”-GUI-MVC 系统实际提供所有需要的 glue-logic。
我们可以
(a) 使用(最好只有一个)non-blocking ( py:run ... )
-scope 注入 NetLogo M-模型更新,
(b) 在我们的本地主机上或什至在某些远程网络主机上保留一个(或多个,如果需要)Python 解释器作为 V-isual 处理程序,显示图形,并且
(c) 在我们的本地主机或远程网络主机上保留一个(或多个,如果需要)Python 解释器( s) 作为 C-控制器,反馈另一个 NetLogo non-blocking ( py:run ... )
-范围,接收“远程”-输入(如果需要)在 NetLogo M-模型更新循环中使用它们。
无论这听起来多么复杂,它都会起作用,使用任何可用的 localhost
位于 Python 口译员 single-session 或 multi-Python 口译员会议,无论是他们所有 localhost
并置,甚至 network-distributed,使用 distributed-computing tools that we can just plug-in, be it pynng, pyzmq 提供新型智能 transport-services 以允许其他自治节点设置“macro-scale”distributed-MVC 并顺利沟通所有需要的更改,组成消息。
如果更专业一点,还有其他 NetLogo 本机工具可以更好更流畅(不太容易出现断断续续 stick-slick-stick-slick control-loop )如何实现“远程”/“分布式”co-integrated GUI-s。只是提到一个 built-in HubNet 模型,一个轻量级 Java / Scala-extension 可以更好和更顺畅地服务于 M-模型到 V- isual (semi-persistent)-links ( 没有 ( py:run ... )
-scope(s)' 依赖和限制的弱点 Python 解释器(本地|远程)-process & IPC management ( control-loop 如果 MVC-loop 从而失去其循环的更多“紧密度”)
,则延迟 + 抖动可能会令人烦恼并产生影响
我的代码在 python 绘图后暂停,直到我关闭绘图才会继续。
我正在使用 matplotlib 绘图。
to plot-in-python
(py:run
"import matplotlib.pyplot as plt"
"time = [0, 1, 2, 3]"
"position = [0, 100, 200, 300]"
"plt.plot(time, position)"
"plt.xlabel('Time (hr)')"
"plt.ylabel('Position (km)')"
"plt.show()"
)
end
Q :
" My code pauses after plotting in python, and won't continue until I close the plot. "
一个:
结果是自然产物,因为 matplotlib
进入 .show()
方法,该方法阻塞(直到关闭)并且整个 Python 解释器生态系统停止,直到发生这种情况。如果不使用这种“交互式”-(Python-blocking) 模式中的绘图,而是将最终生成的 graph-scene 存储到 PDF 或其他格式的文件中,稍后可以使用 non-blocking 查看器进行检查,整个 ( py:run ... )
-scope 将按预期终止,没有“挂起”-Python 阻塞并且 NetLogo-world 可以继续其 evolution-flow 进一步。
Q :
" I was hoping to have the figure remain up and update with each loop of Netlogo (this is because the figures in Netlogo are not great). I understand that.ion()
is supposed to create interactive plots (i.e., updatable plots), but for whatever reason it does not work for me... Am I foolish to try and use Python in this way with Netlogo? – belief-desire-intent 2 hours ago "
一个:
好吧,我不会认为让 live-graphs 有一刻是愚蠢的。关键是,如何实现这一点。
在 70 年代后期,帕洛阿尔托研究中心(及其 spin-offs 之类的 PARCplace 系统)内部形成的“正偏差岛”涌现出许多奇妙的发明。我们非常感谢这些聪明的人,他们当时受雇为施乐研究机构工作。模块化交互式 GUI 的概念、word-processing 软件、Smalltalk 语言、计算机鼠标和许多其他发明都诞生于此。
GUI 概念,具有 many-actors,其中一些是 machine-driven,其中一些反映了 man-machine 交互,-就像您希望让 NetLogo 生成 live-graphs,生活在 Python-matplotlib 外系统中的东西确实很难编程,直到 PARCplace 的人们将主要职责分离的有条不紊的概念引入 MVC-system :
where
M代表MODEL:保持state-full代表Problem-under-Review,
V的部分代表 VISUAL:生成 PuR-state 视觉表示的部分,
C 代表 CONTROLLER:收集 Man-Machine-Interactions 的部分和所有其他“传感器”,PuR-state(模型)持续更新(好吧,以某种离散的 time-ordered 事件收集和 reflective-processing 方式)更新。
这必须先说,以便现在能够声称,您的愿望正在导致 MVC-model 的所谓“分布式”形式,其中 NetLogo 正在做 M-模型部分,驱动PuR-state的multi-agent进化,并命令“远程”-GUI-V- isual 部分并且必须从再次“远程”-GUI-C-ontroller.
接收输入(如果有的话)这可能听起来很糟糕,但还算不上丑陋,如果我们尝试以一些不那么统一和 time-proven 的方式来实现相同的需求,那么与一团糟相比。
鉴于 NetLogo 的强大功能,我们可以使用 ( py:run ... )
-scope(s) 为这种“分布式”-GUI-MVC 系统实际提供所有需要的 glue-logic。
我们可以
(a) 使用(最好只有一个)non-blocking ( py:run ... )
-scope 注入 NetLogo M-模型更新,
(b) 在我们的本地主机上或什至在某些远程网络主机上保留一个(或多个,如果需要)Python 解释器作为 V-isual 处理程序,显示图形,并且
(c) 在我们的本地主机或远程网络主机上保留一个(或多个,如果需要)Python 解释器( s) 作为 C-控制器,反馈另一个 NetLogo non-blocking ( py:run ... )
-范围,接收“远程”-输入(如果需要)在 NetLogo M-模型更新循环中使用它们。
无论这听起来多么复杂,它都会起作用,使用任何可用的 localhost
位于 Python 口译员 single-session 或 multi-Python 口译员会议,无论是他们所有 localhost
并置,甚至 network-distributed,使用 distributed-computing tools that we can just plug-in, be it pynng, pyzmq 提供新型智能 transport-services 以允许其他自治节点设置“macro-scale”distributed-MVC 并顺利沟通所有需要的更改,组成消息。
如果更专业一点,还有其他 NetLogo 本机工具可以更好更流畅(不太容易出现断断续续 stick-slick-stick-slick control-loop )如何实现“远程”/“分布式”co-integrated GUI-s。只是提到一个 built-in HubNet 模型,一个轻量级 Java / Scala-extension 可以更好和更顺畅地服务于 M-模型到 V- isual (semi-persistent)-links ( 没有 ( py:run ... )
-scope(s)' 依赖和限制的弱点 Python 解释器(本地|远程)-process & IPC management ( control-loop 如果 MVC-loop 从而失去其循环的更多“紧密度”)