我正在尝试执行以下显示情节的代码:
using Plots, Measures
pyplot()
data = [rand(100), rand(100)];
histogram(data, layout = 2,
title = ["Dataset A" "Dataset B"], legend = false,
ylabel = "ylabel", margin = 5mm)
从命令行执行输出后,我什么也没得到!
尽管我对它在Juno
中的工作方式感到困惑,但知道我以3种不同的方式对其进行了尝试(Jupyter,Juni,Julia会议),请看下面的观察结果:>
使用Jupyter
可以正常运行:
使用Juno,我必须运行TWICE文件!!第一次看起来是为了编译,第二次看起来是为了执行! 如果我关闭了该图,则必须关闭Julia会话,重新启动它,然后重新执行TWICE文件!有时什么也没出现!
在Julia会话中,第一次执行需要花费一些时间,然后如果我关闭该图并再次运行它,则它看起来很平滑。
答案 0 :(得分:2)
诸如histogram
或plot
之类的命令通常不为用户显示绘图,它们仅生成并返回绘图。
显示情节的实际上是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()