NetworkX и Matplotlib - ошибка осей - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть Networkx 1.6 и Matplotlib 1.1.0 на Windows, это мой код:

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 ]

2 голосов
/ 07 июня 2012

Для matplotlib 1.0+ не используйте Figure (), используйте pyplot.figure ().Figure () создает Figure, но не регистрирует его в figManager внутри pyplot, pyplot.figure () делает.

В функциях draw они получают рисунок, вызывая gcf (), а gcf () возвращаеттекущая фигура или создает новую единицу, если ее нет.

Позже вызов sci () попытается, вызвав gca (), проверить, какие позиции (коллекции) выпримененная к функции рисования действительно уже зарегистрирована с осью, но поскольку у вас есть новая фигура, и, следовательно, нет оси, это вызовет исключение.

Я назову это matplotlibошибка.

Я не читал заметки об изменениях для matplotlib, это может быть описано там.Я выяснил это путем отладки кода matplotlib.

1 голос
/ 13 января 2012

Есть ли способ закрепить / вставить команду pyplot.show () в панель tkinter / главное окно?Или он всегда появляется в своем собственном окне?

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()
1 голос
/ 06 мая 2012

@ Карел, надеюсь, ты нашел то, что искал. Если нет, вот пример того, как встраивать график networkx в холст Tkinter:

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")
0 голосов
/ 27 декабря 2011

Я не уверен, что именно вы хотите нарисовать точно, но вы получаете график выполнения вашего узла:

    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.Кажется, это работает на MPL 0,99, но не в MPL 1,0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...