Matplotlib 来自脚本的Julia pyplot(非交互式)

Matplotlib 来自脚本的Julia pyplot(非交互式),matplotlib,julia,Matplotlib,Julia,我刚在茱莉亚安装了PyPlot。当我在julia的交互环境中运行它时,它工作得很好。但是当我从bash运行.jl脚本时,不会显示绘图图形 我熟悉matplotlib(pylab),其中show()命令用于查看图形。我可能不理解PyPlot的自述 可以将当前地物作为地物对象(包装器)获取 matplotlib.pyplot.Figure)调用gcf()。地物类型支持 Julia的多媒体I/O API,因此您可以使用display(图)来显示 图::PyFigure 如果我运行此脚本: using

我刚在茱莉亚安装了PyPlot。当我在julia的交互环境中运行它时,它工作得很好。但是当我从bash运行.jl脚本时,不会显示绘图图形

我熟悉matplotlib(pylab),其中show()命令用于查看图形。我可能不理解PyPlot的自述

可以将当前地物作为地物对象(包装器)获取 matplotlib.pyplot.Figure)调用gcf()。地物类型支持 Julia的多媒体I/O API,因此您可以使用display(图)来显示 图::PyFigure

如果我运行此脚本:

using PyPlot
x = linspace(0,2*pi,1000); y = sin(3*x + 4*cos(2*x));
plot(x, y, color="red", linewidth=2.0, linestyle="--")
title("A sinusoidally modulated sinusoid")
fig1 = gcf()
display(fig1)
我在屏幕上没有得到任何图形,只有带有figure对象地址的文本输出

$ julia pyplottest.jl
Loading help data...
Figure(PyObject <matplotlib.figure.Figure object at 0x761dd10>)
$julia pyplottest.jl
正在加载帮助数据。。。
图(PyObject)
我也不知道为什么要花这么长时间,以及“加载帮助数据…”是什么意思


如果我使用include(“pyplottest.jl”)从Julia evironment内部运行相同的脚本,则只有在运行支持图形I/O的环境(如IJulia)时,绘图才会显示良好的显示,但即使在那里,也不需要直接调用它(当IJulia单元完成执行时,绘图将自动显示)

您可以像在Python中一样执行
show()
。但是,PyPlot以交互模式加载Matplotlib,GUI事件循环在后台运行,因此
show()
是非阻塞的,实际上不做任何事情。一个选项是只执行以下操作

using PyPlot
x = linspace(0,2*pi,1000); y = sin(3*x + 4*cos(2*x));
plot(x, y, color="red", linewidth=2.0, linestyle="--")
title("A sinusoidally modulated sinusoid")
print("Hit <enter> to continue")
readline()
并且
show()
命令将被阻止,直到用户关闭绘图窗口


(可能我应该在非交互模式下加载。)

如果您没有处于REPL或交互模式(即像我一样使用sublime),则必须添加
plt[:show]()
才能查看绘图

我刚才问了同样的问题:

Julia v0.6.0
PyPlot v“2.3.2”
开始,从脚本调用
show()
就可以了。它等待用户关闭图形,然后优雅地退出Juila。此解决方案给我以下错误:
┌ 警告:@pyimport-foo已被弃用,取而代之的是
foo=pyimport(“foo”)
。│   调用方=_pywrap_pyimport(::PyObject)位于PyCall.jl:400└ @ PyCall~/.julia/packages/PyCall/RQjD7/src/PyCall.jl:400错误:LoadError:UndefVarError:linspace未定义Stacktrace:[1]无处的顶级作用域:0[2]包含在./boot.jl:326[内联][3]包含在./loading.jl:1038[4]包含(::模块,::字符串)在./sysimg.jl:29
using PyCall
@pyimport matplotlib.pyplot as plt
x = linspace(0,2*pi,1000); y = sin(3*x + 4*cos(2*x));
plt.plot(x, y, color="red", linewidth=2.0, linestyle="--")
plt.title("A sinusoidally modulated sinusoid")
plt.show()