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

Pro*_*ala 6 matplotlib julia

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

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

您可以通过调用gcf()将当前数字作为Figure对象(matplotlib.pyplot.Figure的包装器)获取.图类型支持Julia的多媒体I/O API,因此您可以使用display(fig)来显示fig :: 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)
Run Code Online (Sandbox Code Playgroud)

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

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

我也不确定为什么需要这么长时间以及" 加载帮助数据...... "的含义

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

Ste*_*son 4

display仅当您运行支持图形 I/O 的环境(如 IJulia)时才有效,但即使在那里,您也不需要直接调用它(当 IJulia 单元完成执行时,绘图会自动显示)。

show()你可以像在 Python 中那样做。然而,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()
Run Code Online (Sandbox Code Playgroud)

暂停。

如果您只想进行非交互式 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()
Run Code Online (Sandbox Code Playgroud)

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

(也许我应该向 PyPlot 添加一个选项,以非交互模式加载它。)