2015-11-29 4 views
1

Я пытаюсь создать граф, используя python с networkx, который имеет множество узлов, которые могут быть интерактивно исследованы. Я хочу иметь возможность щелкнуть или навести над узлом и показать ярлык, который в противном случае не показан.Интерактивные метки на узлах с использованием python и networkx

D3 кажется способным делать это хорошо, и есть несколько реализаций питона

mpld3

и

Drew Conway's Networkx fork

mpld3 прекрасно работает для графиков рассеяния, но я не знаю, как заставить его делать то, что я хочу для графика ...

i mplementing example code от Дрю Conway:

import networkx as nx 
from networkx.readwrite import d3_js 

дает

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: cannot import name d3_js 

Это выглядит как ошибка, которая могла бы в результате, если раздвоенный NetworkX пакет не был помещен в системном пути питона .... Тем не менее, я проверил содержимое пути sys и найдено networkx ... поэтому я в тупике.

+0

У вас установлена ​​«networkx» как в качестве вилки, так и в качестве стандартного пакета? Вилка должна быть первой в пути python - но> 1 версия пакета, вероятно, нуждается в особом уходе (см., Например, http://stackoverflow.com/q/6570635) – Bonlenfum

ответ

2

Похоже, что mpld3 будет работать. Вы можете получить данные о рассеянии, вызвав draw_networkx_nodes(), который является только оберткой для scatter().

import matplotlib.pyplot as plt 
import numpy as np 
import mpld3 

import networkx as nx 
G = nx.path_graph(4) 
pos = nx.spring_layout(G) 

fig, ax = plt.subplots(subplot_kw=dict(axisbg='#EEEEEE')) 
scatter = nx.draw_networkx_nodes(G, pos, ax=ax) 
nx.draw_networkx_edges(G, pos, ax=ax) 

labels = G.nodes() 
tooltip = mpld3.plugins.PointLabelTooltip(scatter, labels=labels) 
mpld3.plugins.connect(fig, tooltip) 

mpld3.show() 
+0

[Работает для меня] (http: // nbviewer .ipython.org/Сущность/aflaxman/612ba0293714f2e5f3f9). Так круто. Теперь, если у него была d3js [force layout] (https://github.com/mbostock/d3/wiki/Force-Layout) поверх этого, это было бы действительно что-то! –

+0

Это работает! Спасибо за помощь!! – user1278616

 Смежные вопросы

  • Нет связанных вопросов^_^