问题标签 [makie.jl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
67 浏览

visual-studio-code - 循环实时更新 Julia 情节

我是 Julia (v1.7.1) 的新手,我一直在使用 VSCode 作为 IDE。在 VSCode (v1.64) 中,我安装了 Julia Extension (v1.5.10)。在 VSCode 中绘图时,绘图默认显示在绘图窗格中。我正在使用 Plots (v1.25.7) 包和“gr”后端,因为它是“更快”选项之一。

我正在尝试制作一个“实时”时间序列图,其中该系列在循环中更新。这似乎是一个流行的问题,因为有很多问题可以解决这个问题,但我还没有找到“干净”的解决方案。我要强调的是,我并不是要制作动画,它是在循环终止时制作的。我想在循环运行时更新绘图。我看过SmoothLivePlot,但我认为这需要我事先知道系列大小,而我的应用程序并非如此。再说一次,也许我误解了这个包。

我将介绍我到目前为止所做的工作,希望能有所改进。我首先创建了一个绘图功能

然后我初始化了情节

然后调用我的循环(注意:本文中显示的所有代码都包装在一个函数中并在 RPEL 中运行,因此变量不需要在while循环内用“全局”定义。这是由于 Julia 的优化和范围设计...从我读到的内容。有关示例,请参见另一个讨论)。

我遇到了一些问题。首先,我不知道这是否只是 VSCode 的问题,或者指向谁,但是将函数放入display(p)函数内部以更新 VSCode 绘图窗格中的绘图最终会为循环中的每次迭代创建一个新绘图。显然这不是本意。我发现如果我关闭“在窗格中绘图”选项(文件 > 首选项 > 设置 > 扩展 > Julia),则会创建一个绘图窗口。我不确定“在窗格中创建新绘图”是预期的还是问题(再次,我是新手)。然而,当在 VSCode 之外绘图时,上面的代码按我的预期工作。

对于下一个问题,我认为这里最重要的是,在绘图函数内部,调用plot!将新向量添加到p,同时保存前一个向量。换句话说,p并没有随着新系列更新,而是通过附加一个全新的向量来增长。这一点很明显,因为经过多次迭代后绘图就停止了。此外,如果您删除“颜色”属性,您会看到线在每次迭代时都会改变颜色。实际上,正在绘制的是许多线,全部重叠。

然后我深入p研究正在发生的事情并对绘图功能进行了一些更改

上面,而不是创建一个新的series_list(如 w/ 之前的情况plot!),我现在正在更新带有新数据的系列。这比以前工作得更好,并且表现如预期。虽然只是轻微的改进,但我通过传递标量而不是 vecotr 进一步修改了函数和函数调用

函数调用现在在其中plt_update(p,run_time,timestep)。正如你所看到的,我随机睡了一段时间,然后将其除以 10,我发现在它失去“近乎实时”的吸引力之前,我可以承受尽可能多的延迟。例如,除以 100 会导致相当明显的滞后。

所以我的问题是......有没有办法改善这一点,减少滞后?作为 Julia 的新手,我不知道所有绘图选项或如何访问“胆量”以自行改进。

编辑:

我刚刚开始了解“Makie”和“Observables”。我将对那些做更多的研究,看看这是否能改善延迟。

编辑2:

在我的研究中,我发现了一种更简洁的方式来表达最后一个功能(另请参见此处以进一步确认该方法