【问题标题】:How to display the Plots by executing the file from command line如何通过从命令行执行文件来显示绘图
【发布时间】:2018-08-22 22:33:49
【问题描述】:

我正在尝试执行以下显示绘图的代码:

using Plots, Measures
pyplot()

data = [rand(100), rand(100)];

histogram(data, layout = 2,
          title = ["Dataset A" "Dataset B"], legend = false,
          ylabel = "ylabel", margin = 5mm)

从命令行执行后,我没有得到任何输出!!

知道我以 3 种不同的方式尝试了它并且它有效(Jupyter、Juni、Julia 会话),但我对它在 Juno 中的工作方式感到困惑,请参阅下面的观察:

Jupyter 运行良好:

使用 Juno,我必须两次运行文件!第一次看起来是为了编译,第二次是为了执行,也许!! 如果我关闭了情节,我必须关闭 Julia 会话,重新启动它,然后重新执行文件 TWICE!有时什么都没有出现!

使用 Julia session,第一次执行需要一些时间,然后如果我关闭情节并再次运行它,它就会顺利出现。

【问题讨论】:

  • 不要在多个论坛上发布相同的问题,至少要交叉链接:discourse.julialang.org/t/…
  • @fredrikekre 多个平台可能有不同的受众,
  • 是的,但正如我所说,至少在它们之间发布链接,并公开你在其他地方问过同样的问题。否则,人们会浪费时间回答其他地方已经回答过的问题。
  • 我看到我的朋友,@fredrikekre 从你的反馈中大家会明白它已经在其他地方得到了回答,而实际上在任何平台上都没有提供答案。

标签: julia


【解决方案1】:

histogramplot 等命令通常不会为用户显示绘图,它们只会生成并返回绘图。 显示绘图的实际上是 Julia 中的显示系统。 当 Julia 处于交互式使用状态时,例如在 REPL、Jupyter 和 Juno 中,将使用不以“;”结尾的命令自动调用显示系统。这就是为什么您会在 REPL、Jupyter 和 Juno 中看到绘图的原因。 但是从命令行执行文件时,显示系统不会自动激活。所以你首先必须像这样自己调用display

using Plots, Measures
pyplot()

data = [rand(100), rand(100)];

h = histogram(data, layout = 2,
              title = ["Dataset A" "Dataset B"], legend = false,
              ylabel = "ylabel", margin = 5mm)
display(h)

但即使这样也不会给你图片,而只是情节的文本表示。这是因为在命令行 julia 中,只有一个非常简单的文本显示系统,它没有“完全”支持来自Plots 的绘图。要显示绘图,你必须编写自己的显示机制并将其推送到 Julia 显示系统,这并不难,但有点繁琐。有时间我再举个例子。

顺便说一句,如果你只想从命令行生成绘图,另一种方法是将其保存到文件中,这比自己制作显示机制更直接。

更新

这是一个简单的显示,它模仿了 Julia REPL 中使用的显示系统。这里的代码适用于 Julia 0.7/1.0。

const output = IOBuffer()
using REPL
const out_terminal = REPL.Terminals.TerminalBuffer(output)
const basic_repl = REPL.BasicREPL(out_terminal)
const basic_display = REPL.REPLDisplay(basic_repl)
Base.pushdisplay(basic_display)

在前面的代码之前使用它会显示情节。请注意,Plots 使用pyplot() 后端,其默认是打开一个新窗口并在窗口中显示绘图,但是当 julia 在命令行中完成执行时,它将关闭绘图窗口。为了解决这个问题,我们可以改变默认显示的方式,或者使用另一个后端来显示绘图,例如,plotly() 后端将通过 html 显示绘图。完整的代码可能如下所示:

const output = IOBuffer()

using REPL

const out_terminal = REPL.Terminals.TerminalBuffer(output)

const basic_repl = REPL.BasicREPL(out_terminal)

const basic_display = REPL.REPLDisplay(basic_repl)

Base.pushdisplay(basic_display)

using Plots, Measures
plotly()

data = [rand(100), rand(100)];

h = histogram(data, layout = 2,
          title = ["Dataset A" "Dataset B"], legend = false,
          ylabel = "ylabel", margin = 5mm)

display(h)

【讨论】:

  • 谢谢,plotly() 的选项工作得很好,对于我尝试使用gr() 的第一个选项然后GKS 图标出现在菜单栏中,但对话框没有显示,我将您的答案链接到 Julia community discourse.julialang.org/t/…
  • 如何保存生成的输出 - html 文件?
  • plotly()生成的html文件应该有一个可以保存图片的菜单栏。整个 html 本身应该在某个临时文件夹中,如果需要,您可以将 html 作为 html 保存到其他地方,例如,在 chrome 中,它可以通过右键单击 -> 另存为.....
  • gr() 为我工作。它只是打开另一个窗口,显示情节,然后关闭窗口,朱莉娅完成执行。整个过程可能很短......我在mac上。可能是平台不同、GR的配置或者GR的安装问题造成的。
  • 我也在Mac,我把所有的窗口都最小化了,注意到执行,它关闭的非常快,有没有办法延迟窗口关闭!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多