我尝试使用PyPlot包为Julia从matplotlib网站重现this example。据我所知,PyPlot本质上是matplotlib.pyplot模块,因此我导入了我需要的matplotlib的其他模块(使用@pyimport宏):
使用PyCall
@pyimport matplotlib.path as mpath
@pyimport matplotlib.patches as mpatches
然后我继续定义路径对象:
Path = mpath.Path
然后我得到:
fn (generic function with 1 method)
。
好像我已经定义了一个函数。此外,当我分配path_data时,我收到以下错误:
错误:类型函数没有字段MOVETO
当然,这是由于Path,Julia尝试将其作为一种功能而不是类型或类似的东西。正如您可能猜到的那样,当我尝试定义变量补丁时也是如此。
因此,由于预期的对象(类型)被视为函数,因此matplotlib的模块与Julia的pyplot不兼容。如果不同的话,可以预期这种行为不需要PyPlot.jl文件。
我的问题是:
- 我做错了什么?
- 有一种简单的方法可以使它有效吗?
- 你知道Julia的另一个软件包,我可以在其中定义补丁并以与matplotlib类似的方式工作吗?
感谢您的想法。
答案 0 :(得分:1)
你需要得到" raw" Path的Python对象。默认情况下,PyCall将Python类型对象转换为函数(调用相应的构造函数),但是您无法访问该类的静态成员。
相反,例如Path = mpath.pymember(" Path")获取" raw" PyObject,然后你可以做Path [" MOVETO"]或Path [:MOVETO]来访问MOVETO成员。
(一旦像https://github.com/JuliaLang/julia/pull/8008这样的东西被合并,这个难度将在Julia 0.4中消失(这样我们就可以直接调用PyObjects了。)