2014-02-26 64 views
5

我刚刚在Julia安装了PyPlot。当我从julia的交互式环境中运行时,它工作正常。但是,当我使用bash运行.jl脚本时,不会显示剧情图形。Julia pyplot脚本(不是交互式)

我与matplotlib(pylab)家庭在哪里显示()命令是用来查看数字。我可能不PyPlot已了解的自述这里https://github.com/stevengj/PyPlot.jl

你可以通过调用GCF目前的数字为图对象(约 matplotlib.pyplot.Figure包装)()。该图类型支持 Julia的多媒体I/O API,以便您可以使用显示器(图)展现出 图:: 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>) 

我也不知道为什么要花这么长的时间,什么“加载帮助数据...“确实意味着

,如果我使用包括朱莉娅环境现状的内部运行相同的脚本(” pyplottest.jl“)情节确实显示精细

回答

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将其加载到非交互模式。)

+0

作为'朱莉娅v0.6.0'和'PyPlot V “2.3.2”','调用显示()'从脚本很好用。它等待用户关闭该数字,然后优雅地退出Juila。 – NHDaly