PyPlot不显示绘图怎么办?

网上找的一些最小例子,运行完了也不报错,也不显示图。
using PyPlot

x=1:50
xlabel(“x”)
y=rand(50)
ylabel(“y”)
title(“base plot”)
grid(“on”)
plot(x,y)

跑完显示这个:
1-element Vector{PyCall.PyObject}:
PyObject <matplotlib.lines.Line2D object at 0x7f9c70334520>

这是因为什么?Plots模块能正常显示。

加上display(gcf())后能在jupyter中显示了,但怎么弹出窗口显示?

在本地电脑上如果直接用命令行REPL,一般不需要display也可以直接窗口显示。

1 个赞

确实,但在jupyter中怎么弹出?

那你不妨问一下,如果用Python的话在Jupyter中怎么弹出窗口,或者说,这是否可行。

以前一直在用python的matplotlib,是没问题的。

使用show()

1 个赞

加上show()后,VsCode上能弹出显示了,但jupyter还是不行,而且下面报这个:
sys:1: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
网上查了下,报这个的都是python的matplotlib。

这个警告的意思是,你当前只能使用agg这个非gui控件,你需要安装tk或者是qt5这类gui控件。怎么安装的我不清楚,百度一下应该有。

按照楼上几位朋友的帮助总结出几种处理方法:
1、加上display(gcf())后能在jupyter中显示了,但无弹出窗口,就没有放大之类的操作功能。
2、在REPL中运行,不用加display(gcf())也可以正常弹出窗口显示。
3、在VsCode中运行,加上show()可以正常弹出窗口显示。
4、下面这样也可以正常在jupyter中弹窗显示,但这么调用matplotlib,弹出窗口后程序会一直处于运行状态,并且关闭窗口时会出现卡死关不掉的BUG。

using PyCall
using PyPlot

@pyimport matplotlib as mlp
mlp.use(“TkAgg”)
x=1:50
y=rand(50)
plot(x,y)
show()

既然你都尝试到这里了我就啰嗦几句。Julia中调用Matplotlib,本质上和直接使用Python没有任何区别。之所以你说之前用Jupyter时候可以弹出窗口,是因为修改了Matplotlib的默认后端backend。Matplotlib的设计逻辑是前后分离的,backend有很多选项,比如常见的Qt, Agg, TkAgg等等。所以你的问题其实是在问如何切换Matplotlib的后端。有关PyPlot的问题,大部分都应该在Python的相关问题中找答案。

using PyPlot以后,matplotlib是直接加载的,不需要再单独通过using PyCall来调用。

1 个赞