- 积分
- 39329
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2019-5-13
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 一大碗年糕 于 2025-1-20 00:29 编辑
1.20更新:建议还是直接使用NCL,PyNGL移植的不够完全,很多bug
前段时间研究了下python中的弯曲箭头,几个公众号也给出了各自的解决办法,详见http://bbs.06climate.com/forum.php?mod=viewthread&tid=110776
但是用来用去还是感觉NCL原版的好,无奈重新捡起NCL(几乎已经忘光了泪目),想用PyNGL画画看。
问题一:
在Juypter Notebook中运行包含PyNGL的脚本会遇到一个bug,即第一次运行可以出图,但是修改代码后运行就无法出图(报错如下)必须重启内核才能再次出图,貌似是ngl.end()无法删除内存
- fatal:["Error.c":405]:ErrorInitialize:Only one instance of ErrorClass is supported
- fatal:Unable to initialize layer-Can't Create
- fatal:Error Creating ErrorClass object
- fatal:Unable to initialize layer-Can't Create
- fatal:Unable to initialize layer-Can't Create
- fatal:_NhlCreate:Unable to access "default" App object
- fatal:_NhlCreate:Unable to access "default" App object
- fatal:_NhlCreate:Invalid Parent id #-4
- fatal:NhlGetValues:PID #-4 is invalid
- fatal:PID #-4 can't be found in NhlSetValues
- warning:maximize_plots: Invalid workstation. No plot maximization can take place.
- fatal:NhlDraw: Invalid Layer Id: -4
- fatal:Unable to update Workstation with PID#-4
- fatal:Unable to clear Workstation with PID#-4
- fatal:Unable to Destroy (Bad PID#418152145)
复制代码 研究了一下,感觉问题可能在Ngl.end() 引发的资源释放问题。Ngl.end() 尝试关闭图形的操作在Jupyter的交互式环境中,这种操作可能被干扰。
解决办法:一开始在代码中就不要调用Ngl.end()!
问题二:
使用PyNGL连续出图到一定数量报错,报错如下
- fatal:WorkstationInitialize: Limit reached for number of simultaneous GKS Workstations
复制代码 解决办法:在最后加上Ngl.destroy(wks)
https://www.pyngl.ucar.edu/User_forum/Archives/2006/0041.html
另外对于图像显示可以采用IPython.display交互
from IPython.display import Image, display
...
...
display(Image(filename="vector_plot.png"))
p.s.感觉NCL之所以被逐步淘汰主要是在数据处理的便捷性上与python相差太多,至于绘图部分个人感觉NCL的许多模板确实还是很好看的。在GeoCAT等库复原不了原NCL风格的情况下,将PyNGL的绘图和python的数据处理相结合,重拾PyNGL或许的确是个不错的选择
|
|