代码之家  ›  专栏  ›  技术社区  ›  Hasan A Yousef Michael Benjamin

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

  •  0
  • Hasan A Yousef Michael Benjamin  · 技术社区  · 6 年前

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

    使用绘图、测量 倍数() 数据=[兰特(100),兰特(100)] 柱状图(数据,布局=2, title=[“数据集A”“数据集B”],Legend=false, ylabel=“ylabel”,边缘=5mm) < /代码>

    一旦我从命令行执行它,就不会得到任何输出!

    我知道我以3种不同的方式尝试了它,而且它可以工作(Jupyter、Juni、Julia Session),尽管我对它在 juno中的工作方式感到困惑,Kinldy请参见下面的观察:

    有了 jupyter it is working perfectly:。

    有了朱诺,我要运行两次文件!!第一次可能是编译,第二次可能是执行!! 如果我关闭了情节,我必须关闭Julia会话,重新启动它,然后重新执行文件两次!!有时候什么都没有出现!

    在Julia会话中,第一次执行需要一些时间,然后如果我关闭绘图并再次运行它,它将平滑显示。

    =

    一旦我从命令行执行它,就不会得到任何输出!!

    enter image description here

    我知道我用了3种不同的方法来尝试它,并且它是有效的(Jupyter,Juni,Julia会话),尽管我对它在 Juno ,Kinldy,我的观察结果如下:

    Jupyter 它运行良好:

    有了朱诺,我要运行两次文件!!第一次可能是编译,第二次可能是执行!! 如果我关闭了情节,我必须关闭Julia会话,重新启动它,然后重新执行文件两次!!有时什么都没有出现!!

    在Julia会话中,第一次执行需要一些时间,然后如果我关闭该情节并再次运行它,它就会平滑地出现。

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  2
  •   Consistency    6 年前

    命令如下 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显示系统,这并不困难,但有点乏味。当我有更多的时间时,我会举个例子。

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

    更新

    这里是一个简单的显示,它模仿了JuliaRepl中使用的显示系统。这里的代码是针对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() 后端 情节 ,其默认值是打开一个新窗口并在窗口中显示绘图,但当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)