Tenho alguns nós provenientes de um script que desejo mapear em um gráfico. Abaixo, quero usar a seta para ir de A para D e provavelmente ter a borda colorida também (vermelha ou algo assim).
É basicamente como um caminho de A a D quando todos os outros nós estão presentes. você pode imaginar cada nó como cidades e viajar de A para D requer direções (com pontas de flechas).
Este código abaixo constrói o gráfico
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from(
[('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),
('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])
val_map = {'A': 1.0,
'D': 0.5714285714285714,
'H': 0.0}
values = [val_map.get(node, 0.25) for node in G.nodes()]
nx.draw(G, cmap = plt.get_cmap('jet'), node_color = values)
plt.show()
mas eu quero algo como mostrado na imagem.
Pontas de seta da primeira imagem e as bordas em cor vermelha na segunda imagem.
(C, E)
não é vermelho porque eu escolhi as arestas parared_edges
quando eu ainda estava trabalhando com seu gráfico não direcionado, apenas escolhendo aleatoriamente das arestas retornadas porG.edges()
. Deve serred_edges = [('A', 'C'), ('E', 'C')]
.draw_networkx_edges()
. Limpei o código e consertei os problemas do DiGraph.Eu só coloquei isso para ser completo. Aprendi muito com o marius e o mdml. Aqui estão os pesos das arestas. Desculpe pelas flechas. Parece que não sou o único a dizer que não há nada a fazer. Não consegui renderizar isso com o notebook ipython. Tive que ir direto do python, que era o problema em obter meus pesos de borda mais cedo.
fonte
node_labels = {node:node for node in G.nodes()}; nx.draw_networkx_labels(G, pos, labels=node_labels)
.G.add_edges_from()
linha sem ter que inserir manualmente o ponto inicial e final? Talvez adicionando arestas de umdict
?Em vez de nx.draw regular, você pode querer usar:
Por exemplo:
Você pode adicionar opções inicializando essa ** variável assim:
Além disso, algumas funções suportam o
directed=True parameter
Neste caso, este estado é o padrão:A referência networkx é encontrada aqui .
fonte
Você precisa usar um gráfico direcionado em vez de um gráfico, ou seja,
Em seguida, crie uma lista das cores das bordas que deseja usar e passe-as para
nx.draw
(como mostrado por @Marius).Juntando tudo isso, obtenho a imagem abaixo. Ainda não é exatamente a outra imagem que você mostra (não sei de onde vêm seus pesos de aresta), mas muito mais perto! Se você quiser mais controle da aparência do seu gráfico de saída (por exemplo, obter pontas de flechas que se parecem com setas), eu verificaria NetworkX com Graphviz .
fonte
É simples desenhar um gráfico direcionado usando python 3.x usando networkx. apenas representação simples e pode ser modificada e colorida etc. Veja o gráfico gerado aqui .
Nota: é apenas uma representação simples. Bordas ponderadas podem ser adicionadas como
e, portanto, plotado novamente.
fonte
fonte