【问题标题】:How to update a Julia plot?如何更新 Julia 图?
【发布时间】:2019-03-07 05:57:25
【问题描述】:

在Julia中更新图形时,如何在绘图窗口不抓住焦点的情况下进行?

假设我有以下代码:

using Plots

pyplot()

n = 100
x = collect(range(0, pi, length = n))

for i = 1:30
    y = sin.(x) .+ 0.1 * randn(100)

    plot(x, y, show=true)
    sleep(0)
end

运行时,显示情节的窗口会在每次情节更新时获取焦点,阻止我做任何有用的事情。

如何在不激活窗口的情况下更新绘图?例如,这将用于在后台监控程序。

【问题讨论】:

  • 我不是 Plots.jl 专家,但也许你可以试试 plot!

标签: julia


【解决方案1】:

简单的解决方案是打开一个空的图形窗口,以您想要的方式将其排列在桌面上,然后将其重新用于下一个绘图。 Plots.jl 中默认重用同一个图形窗口。解决方案如下所示。

using Plots
pyplot() # or another backend

plot() # this will open the plot window app and steal the focus once
# arrange the window however the way you want, put it in another monitor etc.

for i = 1:30
   plot(rand(3,3), show=true, reuse=true) # reuse=true is not necessary since it is already the default
   sleep(0.1)
end

由于将再次使用相同的应用程序窗口,绘图窗口将不再窃取焦点。

据我所知,第一个窗口会抢走焦点(我认为这在您的用例中并不是真正的问题),因为它是由另一个应用程序进程创建的。这是大多数桌面环境中的默认行为。某些桌面环境可能允许更改此默认设置。

附带说明一下,您可以在 Julia 中使用 Timer 事件,而不是使用 for 循环来定期更新您的情节,这使事情变得更容易并且可能更高效。

【讨论】:

  • 这仍然将焦点转移到 macOS v10.14.3 和 Julia v1.1.0。
  • 这将焦点转移到带有 Julia v1.1.0 的 Ubuntu 16.04 上。
  • 那是一个 pyplot 错误
  • 有几个用户在 matplotlib repo 上报告了类似的问题。尽管它在我的带有 Gnome 3.30 和 matplotlib 2.2.2 的计算机上按预期工作。你可以试试GR 后端吗?你能检查一下你的matplotlib是什么版本吗?
  • @hckr - 谢谢,有了GR 后端,它不会窃取焦点。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多