2

私はWindows上にNetworkx1.6とMatplotlib1.1.0を持っています。これは私のコードです:

self.figure = Figure()
self.axes = self.figure.add_subplot(1,1,1)
self.canvas = FigureCanvas(self, -1, self.figure)
G = nx.Graph()
G.add_node(6)
pos = nx.spring_layout(G)
nx.draw(G, pos, ax = self.axes)

そして、私はエラーを受け取ります:

File "C:\Python27\lib\site-packages\matplotlib\axes.py, line 1374, in _sci
"Argument must be an image, collection, or ContourSet in this Axes"
ValueError: Argument must be an image, collection, or ContourSet in this Axes

誰かがそれを修正する方法を知っていますか?

4

4 に答える 4

2

matplotlib 1.0+ の場合、Figure() を使用しないでください。pyplot.figure() を使用してください。Figure() は Figure を作成しますが、pyplot 内の figManager に登録しません。pyplot.figure() は登録します。

描画関数では、gcf() を呼び出して Figure を取得し、gcf() は現在の Figure を返すか、存在しない場合は新しいFigure を作成します。

後で sci() を呼び出すと、gca() を呼び出して、描画関数に適用した位置 (コレクション) が実際に軸に既に登録されていることを確認しようとしますが、新しい図があるため、軸がないためです。 、例外が発生します。

これを matplotlib バグと呼びます。

matplotlib の変更点を読んでいませんが、そこに記載されている可能性があります。matplotlib コードをデバッグすることでわかりました。

于 2012-06-07T02:27:03.077 に答える
1

tkinter パネル/メイン ウィンドウに pyplot.show() コマンドをドッキング/埋め込む方法はありますか? それとも、常に独自のウィンドウにポップアップしますか?

def Embedded_Graph(Parent, G):
 Parent.figure = Figure()
 Parent.axe = Parent.figure.add_subplot(1,1,1)
 pos = nx.spring_layout(G)
 nx.draw(G, pos)
 pyplot.show()
于 2012-01-13T10:31:40.500 に答える
1

@Carel、あなたが探しているものが見つかったことを願っています。そうでない場合は、Tkinter キャンバスに networkx グラフを埋め込む方法の例を次に示します。

def embed_graph(G):
    pos = nx.spring_layout(G)
    nx.draw(G, pos)
    canvas = FigureCanvasTkAgg(plt.figure(1), master=self)
    canvas.show()
    canvas.get_tk_widget().pack(side="top")
于 2012-05-06T13:06:11.937 に答える
0

何を描きたいのか正確にはわかりませんが、ノードのプロットが表示されます。

    self.figure = Figure()
    self.axe = self.figure.add_subplot(1,1,1)
    G = nx.Graph()
    G.add_node(6)
    pos = nx.spring_layout(G)
    nx.draw(G, pos)
    pyplot.show()

したがって、明らかに正しい ax パラメータを削除すると、図形を描画できます。ax パラメータに関連する同じエラーを示す投稿が見つかりました。mpl 0.99 では動作していたようですが、mpl 1.0 では動作していないようです

于 2011-12-27T17:23:30.390 に答える