Saya memiliki beberapa node yang berasal dari skrip yang ingin saya petakan menjadi grafik. Di bawah ini, saya ingin menggunakan Panah untuk beralih dari A ke D dan mungkin memiliki tepi yang diwarnai juga (merah atau sesuatu).
Ini pada dasarnya, seperti jalur dari A ke D ketika semua node lain ada. Anda dapat membayangkan setiap node sebagai kota dan perjalanan dari A ke D membutuhkan arah (dengan kepala panah).
Kode di bawah ini membangun grafik
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()
tapi saya ingin sesuatu seperti yang ditunjukkan pada gambar.
Kepala panah gambar pertama dan tepi berwarna merah ke gambar kedua.
(C, E)
bukan merah karena saya memilih tepinyared_edges
ketika saya masih bekerja dengan grafik tidak terarah Anda, hanya memilih secara acak dari tepi yang dikembalikan olehG.edges()
. Seharusnya begitured_edges = [('A', 'C'), ('E', 'C')]
.draw_networkx_edges()
. Saya telah membersihkan kode dan memperbaiki masalah DiGraph.Saya hanya memasukkan ini untuk kelengkapan. Saya telah belajar banyak dari marius dan mdml. Berikut adalah bobot tepi. Maaf tentang panahnya. Sepertinya saya bukan satu-satunya yang mengatakan itu tidak bisa membantu. Saya tidak dapat membuat ini dengan notebook ipython. Saya harus langsung dari python yang merupakan masalah dengan mendapatkan bobot tepi saya lebih cepat.
sumber
node_labels = {node:node for node in G.nodes()}; nx.draw_networkx_labels(G, pos, labels=node_labels)
.G.add_edges_from()
garis tanpa harus memasukkan titik awal dan akhir secara manual? Mungkin menambahkan tepi daridict
?Alih-alih nx.draw biasa, Anda mungkin ingin menggunakan:
Sebagai contoh:
Anda dapat menambahkan opsi dengan menginisialisasi variabel ** seperti ini:
Juga beberapa fungsi mendukung
directed=True parameter
Dalam hal ini status ini adalah yang default:Referensi networkx ditemukan di sini .
sumber
Anda perlu menggunakan grafik berarah daripada grafik, mis
Kemudian, buat daftar warna tepi yang ingin Anda gunakan dan teruskan ke
nx.draw
(seperti yang ditunjukkan oleh @Marius).Menyatukan ini semua, saya mendapatkan gambar di bawah ini. Masih belum cukup dengan gambar lain yang Anda tunjukkan (saya tidak tahu dari mana bobot tepi Anda berasal), tetapi lebih dekat! Jika Anda ingin lebih mengontrol bagaimana grafik output Anda terlihat (misalnya mendapatkan panah yang terlihat seperti panah), saya akan memeriksa NetworkX dengan Graphviz .
sumber
Ini hanyalah cara sederhana menggambar grafik berarah menggunakan python 3.x menggunakan networkx. hanya representasi sederhana dan dapat dimodifikasi dan diwarnai dll. Lihat grafik yang dihasilkan di sini .
Catatan: Ini hanya representasi sederhana. Tepi Tertimbang dapat ditambahkan seperti
dan karenanya diplot lagi.
sumber
sumber