Netwokx csomag használata
Networkx osztályú típusú önhurkok megengedettek. Párhuzamos élek megengedettek
Graph nem irányytott Igen Nem
DiGraph irányított Igen Nem
MultiGraph nem irányítot Igen Igen
MultiDiGraph irányított Igen Igen
## Minta 1:
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#$plt.subplot(126)
nx.draw(G)
print('-------1-------')
G = nx.DiGraph()
G = nx.path_graph(4)
G =G.subgraph([0, 1, 2])
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(121)
nx.draw(G)
#G.clear()
print('-------2-------')
G = nx.MultiGraph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(122)
nx.draw(G)
G.clear()
print('-------3-------')
G = nx.MultiDiGraph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(123)
nx.draw(G)
G.clear()
g = nx.Graph()
g.add_edge('a','b',weight=0.1)
g.add_edge('b','c',weight=1.5)
g.add_edge('a','c',weight=1.0)
g.add_edge('c','d',weight=2.2)
print('----------11--------')
print (nx.shortest_path(g,'b','d')) ## [’b’, ’c’, ’d’]
print('---------12---------')
print (nx.shortest_path(g,'b','d', weight='weight')) ## sulytényező figyelembe vétele
nx.draw(g)
G1 = nx.DiGraph()
G1.add_edges_from([("A","B"), ("B","C"), ("C","A"), ("C","D")])
nx.draw(G1, with_labels=True)
info='''
# small famous graphs
petersen=nx.petersen_graph()
tutte=nx.tutte_graph()
maze=nx.sedgewick_maze_graph()
tet=nx.tetrahedral_graph()
# classic graphs
K_5=nx.complete_graph(5)
K_3_5=nx.complete_bipartite_graph(3,5)
barbell=nx.barbell_graph(10,10)
lollipop=nx.lollipop_graph(10,20)
# random graphs
er=nx.erdos_renyi_graph(100,0.15)
ws=nx.watts_strogatz_graph(30,3,0.1)
ba=nx.barabasi_albert_graph(100,5)
red=nx.random_lobster(100,0.9,0.9)
----
import pylab as plt #import Matplotlib plotting interface
g = nx.erdos_renyi_graph(100,0.15)
nx.draw(g)
nx.draw_random(g)
nx.draw_circular(g)
nx.draw_spectral(g)
plt.savefig(‘graph.png’)
---
from IPython.display import SVG
A = nx.nx_agraph.to_agraph(G)
A.draw("out.svg", prog="circo")
SVG("out.svg")
----
G1 = nx.cycle_graph(6)
>>> G2 = nx.wheel_graph(7)
>>> nx.graph_edit_distance(G1, G2)
7.0
### Minta 2
import networkx as nx
G = nx.Graph() # Ez az osztály nem irányított gráfot valósít meg. Nem veszi figyelembe a két csomópont közötti több élt. Megengedi az önhurokat élek egy csomópont és önmaga között.
G = nx.DiGraph() # Irányított grafikonok, azaz grafikonok irányított élekkel. Közös műveleteket biztosít a irányított gráfokhoz, (a a grafikon alosztálya).
G = nx.MultiGraph() # Rugalmas grafikonosztály, amely több irányítatalan élt tesz lehetővé a csomópontok között. A kiegészítő
a rugalmasság a teljesítmény bizonyos mértékű romlásához vezet, bár általában nem jelentős.
G = nx.MultiDiGraph() # A MultiGraph irányított változata.
### Minta 3
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
## csomopontok betöltése
G.add_node(1) ## csomopont hozzáadása / létrehozása
G.add_node(7) ## csomopont hozzáadása / létrehozása
G.add_nodes_from([12, 13, 14, 15]) ## csomopontok létrehozása tömbből
G.add_nodes_from(range(100, 110)) ## csompopontok léttrehozása tartományből
H = nx.path_graph(10) ## 10 csomopont otvonal létrehozás (egy vonal)
print('---------0---------')
for n in H: ## csomopontok listája
print(n)
G.add_nodes_from(H) ## csomopontok átadása/feltöltése
G.add_node(H)
## élek betöltése
[n for n in G if n < 3] # iterate through nodes
for n in G : ## iterate through nodes
if n < 3 :
print('N értéke:',n)
for n, nbrsdict in G.adjacency():
for nbr, eattr in nbrsdict.items():
if 'weight' in eattr:
pass
for u, v, weight in G.edges.data('weight'):
if weight is not None:
pass
G.add_edge(1, 2) # él létrehozása default edge data=1
G.add_edge(2, 3, weight=0.9) # specify edge data
for n in G: ## csomopontok listája
print(n)
print('---------1---------')
for nbr in G[2]: ## Szomszéd csomopontok listája
print(nbr)
print('---------2---------')
print(G.adj) ## csomopontok listája atributomokkal
G.add_edges_from([(21, 22), (21, 23)]) ## élek betöltése tulip-ből
G.add_edges_from(H.edges) ## élek objektumok betöltése
#G = nx.cubical_graph()
plt.subplot(121)
nx.draw(G) # default spring_layout
G.add_edge(4, 5, color='blue', weight=0.84, size=300)
print(G[4][5]['size']) ## -> 300
print(G.edges[4, 5]['color']) ## -> red
print('Hossz : ', len(G))
plt.subplot(122)
nx.draw(G, pos=nx.circular_layout(G), node_color='b', edge_color='g') ## formázott megjelenítés
##-- törlés, módosítás
helpem='''
Graph.remove_edge(u, v) ## Remove the edge between u and v.
Graph.remove_edges_from(ebunch) ## Remove all edges specified in ebunch.
Graph.update([edges, nodes]) ## Update the graph using nodes/edges/graphs as input.
Graph.clear() ## Remove all nodes and edges from the graph.
Graph.clear_edges() ## Remove all edges from the graph.
-----
import networkx as nx
G = nx.Graph() # Ez az osztály nem irányított gráfot valósít meg. Nem veszi figyelembe a két csomópont közötti több élt. Megengedi az önhurokat élek egy csomópont és önmaga között.
G = nx.DiGraph() # Irányított grafikonok, azaz grafikonok irányított élekkel. Közös műveleteket biztosít a irányított gráfokhoz, (a
a grafikon alosztálya).
G = nx.MultiGraph() # Rugalmas grafikonosztály, amely több irányítatalan élt tesz lehetővé a csomópontok között. A kiegészítő
a rugalmasság a teljesítmény bizonyos mértékű romlásához vezet, bár általában nem jelentős.
G = nx.MultiDiGraph() # A MultiGraph irányított változata.
##-------------------------------------
import networkx as nx
## csomopontok generálása
#K = nx.complete_bipartite_graph(3,3)
#K = nx.complete_graph(6)
K = nx.path_graph(6)
## másolása
#K33 = K.copy()
#pozició beállítása
positions = {0:[-1,1], 1:[0,1], 2:[1,3], 3:[-1,-1], 4:[0,-1], 5:[1,-1]}
K33.to_undirected() ## Returns an undirected copy of the graph.
#K33.to_directed() ## Returns a directed representation of the graph.
#K33.subgraph(nodes) ##Returns a SubGraph view of the subgraph induced
#ax = plt.figure().gca()
#ax.set_axis_off()
options = {'node_size' : 500, 'node_color' : 'r'}
nx.draw_networkx(K33, positions, with_labels=True, **options)
plt.show()
G=nx.DiGraph()
G.add_node(1,pos=(1,1))
G.add_node(2,pos=(2,2))
G.add_edge(1,2)
options = {'node_size' : 300, 'node_color' : 'b'}
pos=nx.get_node_attributes(G,'pos')
nodes = nx.draw_networkx_nodes(G, pos, node_size=300, node_color='green', with_labels=True)
edges = nx.draw_networkx_edges(G, pos, node_size=300, arrowstyle='-|>', ## -> -|>
arrowsize=100, edge_color='blue',
width=2)
nyilhegy = '''
Curve - None
CurveB -> head_length=0.4, head_width=0.2
BracketB -[ widthB=1.0, lengthB=0.2, angleB=None
CurveFilledB -|> head_length=0.4, head_width=0.2
CurveA <- head_length=0.4, head_width=0.2
CurveAB <-> head_length=0.4, head_width=0.2
CurveFilledA <|- head_length=0.4, head_width=0.2
CurveFilledAB <|-|> head_length=0.4, head_width=0.2
BracketA ]- widthA=1.0, lengthA=0.2, angleA=None
BracketAB ]-[ widthA=1.0, lengthA=0.2, angleA=None, widthB=1.0, lengthB=0.2, angleB=None
Fancy fancy head_length=0.4, head_width=0.4, tail_width=0.4
Simple simple head_length=0.5, head_width=0.5, tail_width=0.2
Wedge wedge tail_width=0.3, shrink_factor=0.5
BarAB |-| widthA=1.0, angleA=None, widthB=1.0, angleB=None
'''
# nx.draw(G,pos, with_labels=True)
nx.draw(G,pos, with_labels=True, **options)
plt.show()
Egy kis összefoglaló:
Minták:
Megjegyzések
Megjegyzés küldése