使用Julia进行实时绘图

4
我将尝试使用Julia绘制实时演变的函数。为此,我发现可以在Julia中使用GR包,当我尝试应用这里给出的示例时:
import GR
GR.inline("mov")
x = [0:0.01:2*pi]

    for i = 1:200
    GR.plot(x, sin.(x + i / 10.0))
    end

GR.show()

执行循环部分时,我遇到以下错误消息:
期望实数或复数
在#plot_args#12(:: Symbol,:: Function,:: Tuple {Array {FloatRange {Float64},1},Array {Array {Float64,1},1}})中的/ Users / myname / .julia / v0.5 / GR / src / jlgr.jl:936 ....
我在互联网上查找了一些信息,并发现这个,其中有人似乎遇到了类似的问题,但我真的不理解答案和我应该做什么才能使它正常工作。
我也可以找到另一种实时绘图的方法(在循环内)。
请有人帮忙吗?
提前感谢您。

什么是 x?-- 20个字符 - Michael K. Borregaard
请参见 https://discourse.julialang.org/t/juno-and-interactive-plot/3989/2 - Michael K. Borregaard
抱歉。我刚刚写了链接1中提供的代码步骤,但它不起作用。 - ChrlTsr
1
如果您提供一个可粘贴的最小工作示例,而不是一些无法正常运行的代码,那么回答您的问题将变得容易得多。实际上,如果没有提供最小工作示例,通常在这里您不太可能得到答案。我已使用从您的链接中获取的代码进行了回复。 - Michael K. Borregaard
1
是的,这是真的,很抱歉,我想让问题更简洁。我编辑了问题以使其更清晰。 - ChrlTsr
1个回答

5
这里有一个解决方案,使用Plots将图绘制到GR。我相信这也可以直接在GR中完成,但不确定你的示例有什么问题。
using Plots
gr(show = true) # in IJulia this would be: gr(show = :ijulia)
x = 0:0.01:2*pi
for i in 1:200 
    display(plot(x, sin.(x + i / 10.0)))
end

请注意,此示例是实时的(根据问题),因此可能会有一些滞后。在示例中的代码中,创建了一个gif,然后将其显示到ijulia中。

这个有效。我认为“gr(show = :ijulia)”是必要的!谢谢。 - ChrlTsr
抱歉...第一次它工作了,但现在有时候它能工作,有时候我直接得到所有曲线在循环结束时,它并不总是实时工作,即使使用完全相同的代码。你有什么想法发生了什么? - ChrlTsr
我认为这与Jupyter笔记本的更新方式有关,实时绘图可能不是最佳环境。也许可以尝试在上面链接的讨论主题中发布(discourse.julialang.org/t/juno-and-interactive-plot/3989/2),那里的Josef Heinen是GR的创建者,很可能是原始笔记本的作者。 - Michael K. Borregaard
我已经添加了“display”,这使得答案更加通用,但在ijulia中并不是严格必要的。 - Michael K. Borregaard
谢谢。我在提供的链接上发布了我的问题,希望能得到解决。 根据您的建议添加了"display",但每次循环都会给我返回这样的结果:"1-element Array{Any,1}: PyObject <matplotlib.lines.Line2D object at 0x32ecf0090>",但是图形没有变化。这正常吗? - ChrlTsr
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接