脚本中的Julia pyplot(不是交互式的)

时间:2014-02-26 12:30:50

标签: matplotlib julia

我刚在Julia安装了PyPlot。当我从julia的互动环境中运行它时,它工作正常。但是当我从bash运行.jl脚本时,不会显示绘图图形。

我熟悉matplotlib(pylab),其中 show()命令用于查看数字。我可能不会在这里查看PyPlot的自述文件https://github.com/stevengj/PyPlot.jl

  

你可以把当前的数字作为一个Figure对象(一个包装器)   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)

我在屏幕上没有图形,只是带有图形对象地址的文本输出

$ julia pyplottest.jl
Loading help data...
Figure(PyObject <matplotlib.figure.Figure object at 0x761dd10>)

我也不确定为什么需要这么长的时间以及“加载帮助数据...... ”的意思

如果我使用 include(“pyplottest.jl”)从Julia环境内部运行相同的脚本,那么情节确实显示

2 个答案:

答案 0 :(得分:4)

display仅在您运行支持图形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()

暂停。

如果您只想进行非交互式Matplotlib,则根本不需要PyPlot包。你可以这样做:

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()

并且show()命令将阻塞,直到用户关闭绘图窗口。

(可能我应该add an option to PyPlot以非交互模式加载它。)

答案 1 :(得分:2)

如果您不处于REPL或交互模式(即使用像我这样的崇高),那么您必须添加plt[:show]()才能看到该情节。

我刚才问了同样的问题: https://groups.google.com/forum/#!topic/julia-users/A2JbZMvMJhY