comparison env/share/doc/networkx-2.5/examples/graph/plot_napoleon_russian_campaign.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 """
2 =========================
3 Napoleon Russian Campaign
4 =========================
5
6 Minard's data from Napoleon's 1812-1813 Russian Campaign.
7 http://www.math.yorku.ca/SCS/Gallery/minard/minard.txt
8
9 """
10
11 import matplotlib.pyplot as plt
12 import networkx as nx
13
14
15 def minard_graph():
16 data1 = """\
17 24.0,54.9,340000,A,1
18 24.5,55.0,340000,A,1
19 25.5,54.5,340000,A,1
20 26.0,54.7,320000,A,1
21 27.0,54.8,300000,A,1
22 28.0,54.9,280000,A,1
23 28.5,55.0,240000,A,1
24 29.0,55.1,210000,A,1
25 30.0,55.2,180000,A,1
26 30.3,55.3,175000,A,1
27 32.0,54.8,145000,A,1
28 33.2,54.9,140000,A,1
29 34.4,55.5,127100,A,1
30 35.5,55.4,100000,A,1
31 36.0,55.5,100000,A,1
32 37.6,55.8,100000,A,1
33 37.7,55.7,100000,R,1
34 37.5,55.7,98000,R,1
35 37.0,55.0,97000,R,1
36 36.8,55.0,96000,R,1
37 35.4,55.3,87000,R,1
38 34.3,55.2,55000,R,1
39 33.3,54.8,37000,R,1
40 32.0,54.6,24000,R,1
41 30.4,54.4,20000,R,1
42 29.2,54.3,20000,R,1
43 28.5,54.2,20000,R,1
44 28.3,54.3,20000,R,1
45 27.5,54.5,20000,R,1
46 26.8,54.3,12000,R,1
47 26.4,54.4,14000,R,1
48 25.0,54.4,8000,R,1
49 24.4,54.4,4000,R,1
50 24.2,54.4,4000,R,1
51 24.1,54.4,4000,R,1"""
52 data2 = """\
53 24.0,55.1,60000,A,2
54 24.5,55.2,60000,A,2
55 25.5,54.7,60000,A,2
56 26.6,55.7,40000,A,2
57 27.4,55.6,33000,A,2
58 28.7,55.5,33000,R,2
59 29.2,54.2,30000,R,2
60 28.5,54.1,30000,R,2
61 28.3,54.2,28000,R,2"""
62 data3 = """\
63 24.0,55.2,22000,A,3
64 24.5,55.3,22000,A,3
65 24.6,55.8,6000,A,3
66 24.6,55.8,6000,R,3
67 24.2,54.4,6000,R,3
68 24.1,54.4,6000,R,3"""
69 cities = """\
70 24.0,55.0,Kowno
71 25.3,54.7,Wilna
72 26.4,54.4,Smorgoni
73 26.8,54.3,Moiodexno
74 27.7,55.2,Gloubokoe
75 27.6,53.9,Minsk
76 28.5,54.3,Studienska
77 28.7,55.5,Polotzk
78 29.2,54.4,Bobr
79 30.2,55.3,Witebsk
80 30.4,54.5,Orscha
81 30.4,53.9,Mohilow
82 32.0,54.8,Smolensk
83 33.2,54.9,Dorogobouge
84 34.3,55.2,Wixma
85 34.4,55.5,Chjat
86 36.0,55.5,Mojaisk
87 37.6,55.8,Moscou
88 36.6,55.3,Tarantino
89 36.5,55.0,Malo-Jarosewii"""
90
91 c = {}
92 for line in cities.split("\n"):
93 x, y, name = line.split(",")
94 c[name] = (float(x), float(y))
95
96 g = []
97
98 for data in [data1, data2, data3]:
99 G = nx.Graph()
100 i = 0
101 G.pos = {} # location
102 G.pop = {} # size
103 last = None
104 for line in data.split("\n"):
105 x, y, p, r, n = line.split(",")
106 G.pos[i] = (float(x), float(y))
107 G.pop[i] = int(p)
108 if last is None:
109 last = i
110 else:
111 G.add_edge(i, last, **{r: int(n)})
112 last = i
113 i = i + 1
114 g.append(G)
115
116 return g, c
117
118
119 (g, city) = minard_graph()
120
121 plt.figure(1, figsize=(11, 5))
122 plt.clf()
123 colors = ["b", "g", "r"]
124 for G in g:
125 c = colors.pop(0)
126 node_size = [int(G.pop[n] / 300.0) for n in G]
127 nx.draw_networkx_edges(G, G.pos, edge_color=c, width=4, alpha=0.5)
128 nx.draw_networkx_nodes(G, G.pos, node_size=node_size, node_color=c, alpha=0.5)
129 nx.draw_networkx_nodes(G, G.pos, node_size=5, node_color="k")
130
131 for c in city:
132 x, y = city[c]
133 plt.text(x, y + 0.1, c)
134 plt.show()