2016-01-27 6 views
-2

Я новичок в Python, и я пытаюсь нарисовать график с помощью:«модуль» объект не имеет атрибута «Dot»

`nx.write_dot(G, "%s.dot"%(image))` 

в определенной функции. Когда я преобразование приложений программы, я получаю эту ошибку:

Файл "sim.py", строка 31, в основные()

Файл "sim.py", строка 30, в главном золе .run()

Файл "C: \ python27 \ Мои сим \ Solution.py", строка 221, в перспективе self.drawGraph (G, "solution1")

Файл «C: \ python27 \ My sim \ Solution.py ", строка 227, в drawGraph nx.write_dot (G,"% s.dot "% (изображение))

Файл "", строка 2, в write_dot

Файл "C: \ python27 \ Lib \ сайт-пакеты \ NetworkX \ Utils \ decorators.py", строка 220, в _open_file

результат = FUNC (* new_args, ** kwargs)

Файл "C: \ python27 \ Lib \ сайт-пакеты \ NetworkX \ рисунок \ nx_pydot.py", строка 58, в write_dot

P = to_pydot (G)

Файл "C: \ Python27 \ lib \ site-packages \ networkx \ drawing \ nx_pydot.py", строка 197, в to_pydot

P = pydot.Dot (graph_type = graph_type, строгий = строгий, ** graph_defaults) AttributeError: 'модуль' объект не имеет атрибута 'Dot'

Это кажется, что это проблема ОС Windows (Я на win7), потому что мой коллега может запустить тот же скрипт на своей машине ubuntu без каких-либо ошибок.

Спасибо за любую помощь!

+0

Вы можете использовать dir (P), чтобы просмотреть методы/свойства переменной. –

+0

Кажется, что команды File начинаются с кавычек, но не заканчиваются на них последовательно; это просто ошибка ввода вручную? – MathBio

+0

@MichelKeijzers: Расскажите, как я могу это сделать? (Я начинаю с python) – Betty

ответ

0

Вы делаете учебник Рисование графиков Право?

здесь, как это работает:

import networkx as nx 
import matplotlib.pyplot as plt 

G=nx.Graph() 
G.add_edges_from([(1,2),(1,3)]) 
nx.draw(G) 
plt.show() 

Edit: если вы не установили Matplotlib, просто откройте командную строку и введите следующую команду:

pip install matplotlib 

Matplotlib является необязательным, он не поставляются с networkx, вы должны установить его.

также для сохранения .дот файл просто добавьте следующую строку:

nx.write_dot(G,'C:/file.dot') 

Edit: без Matplotlib будет выглядеть примерно так:

import networkx as nx 

G=nx.Graph() 
G.add_edges_from([(1,2),(1,3)]) 
nx.draw(G) 
nx.write_dot(G,'C:/file.dot') 

Я замечаю в своем коде nx.write_dot(G, "%s.dot"%(image)) вы не определили image и G, ошибка должна быть из одного из них.

, но если вы хотите установить компилятор C++, я предлагаю загрузить Visual C++ Compiler 33mb или Microsoft visual studio community, они бесплатны.

+0

Я пробовал этот метод, но когда я хотел установить matplotlib, он потерпел неудачу, потому что для этого требуется визуальный C++, если я помню wellans. У меня не так много места на моей машине для установки новых программ; поэтому я имею дело с проблемой my_dot. Благодаря! – Betty

+0

@Betty я вижу ... вы можете просто игнорировать 'plt' на 2-й и 7-й строках. – Bear

+0

G и изображение являются моими атрибутами функции, поэтому, когда я вызываю эту функцию, возникает ошибка. Я использовал ваш последний пропозиторий кода, но он имеет ошибку: ImportError: Matplotlib требуется для draw(). Думаю, я попытаюсь освободить место и установить visual C++. Спасибо за ваше взаимодействие! – Betty