如何通过从命令行执行文件来显示图

时间:2018-08-21 11:41:55

标签: julia

我正在尝试执行以下显示情节的代码:

using Plots, Measures
pyplot()

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

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

从命令行执行输出后,我什么也没得到!

enter image description here

尽管我对它在Juno中的工作方式感到困惑,但知道我以3种不同的方式对其进行了尝试(Jupyter,Juni,Julia会议),请看下面的观察结果:

使用Jupyter可以正常运行:

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

在Julia会话中,第一次执行需要花费一些时间,然后如果我关闭该图并再次运行它,则它看起来很平滑。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

诸如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)

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

plotly()