2014-09-23 36 views
0

我試圖從matplotlib網站使用Julia的PyPlot包重現this example。據我所知,PyPlot是essentialy的matplotlib.pyplot模塊,所以進口matplotlib我需要的其他模塊(與@pyimport宏):茱利亞的PathPatch對象與PyPlot

using PyCall

@pyimport matplotlib.path as mpath

@pyimport matplotlib.patches as mpatches

然後我前進到限定的路徑對象:

Path = mpath.Path

但後來我得到:

fn (generic function with 1 method)

就好像我已經定義了一個函數。此外,當我分配path_data我得到以下錯誤:

ERROR: type Function has no field MOVETO

當然,這是由於路徑,這朱莉婭試圖爲一個函數,而不是作爲一種或類似的東西。正如您可能猜到的,當我嘗試定義變量補丁時會發生同樣的情況。

因此,由於預期的對象(類型)被視爲函數,所以matplotlib中的模塊與Julia的pyplot不相容。如果它不同,PyPlot.jl文件就不需要了,這種行爲是可以預料的。

我的問題是:

-Am我做錯了什麼?

- 是否有一個簡單的方法可以使它工作?

- 您是否知道Julia的另一個軟件包,我可以在其中定義補丁並以類似於matplotlib的方式工作?

我記住要做this kind of animations

感謝您的想法。

回答

1

您需要獲取Path的「原始」Python對象。默認情況下,PyCall將Python類型對象轉換爲函數(調用相應的構造函數),但是不能訪問該類的靜態成員。

而是,例如, Path = mpath.pymember(「Path」)獲取「原始」PyObject,然後你可以通過Path [「MOVETO」]或Path [:MOVETO]訪問MOVETO成員。

(這種困難將有望走在茱莉亞0.4一旦像https://github.com/JuliaLang/julia/pull/8008被合併(這樣我們就可以讓PyObjects直接調用。)

+0

感謝ansering,我明白了!只是出於好奇,你知道爲什麼我們使用方括號來訪問PyObject的方法嗎?我認爲這個點也是茱莉亞的標準(如Python) – dapias 2014-09-23 18:24:15

+0

這是我最後一次評論的答案:https://github.com/stevengj/PyCall .jl – dapias 2014-09-23 18:55:14

+0

我已經進階了,但是我被困在這裏了,我定義了一個變量圓:'@pyimport matplotlib.patches as patch','circle = patch.py​​member(「Circle」)'。但是當我嘗試'circle [:set_radius](1.0)'我得到了一個錯誤,我也試過'set!(circle,radius,1.0)' – dapias 2014-09-23 20:08:10