veŽbe: vizuelizacija grafova u python-u pomoĆu … · 2020. 5. 13. · 7 3 crtanje grafa pomoću...

23
Predmet: Sistemi veštačke inteligencije VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU MATPLOTLIB-A SADRŽAJ 1 Matpotlib ............................................................................................................................ 2 2 Crtanje jednostavnih krivih u Matplotlib - u...................................................................... 4 3 Crtanje grafa pomoću Matplotlib-a.................................................................................... 7 3.1 Osnovno crtanje grafa pomoću Matplotlib-a .............................................................. 7 3.2 Različiti prikazi grafova pomoću Matplotlib-a ........................................................... 9 3.2.1 Crtanje grafa pomoću prikaza spring_layout ..................................................... 10 3.2.2 Crtanje grafa pomoću prikaza random_layout ................................................... 11 3.2.3 Crtanje grafa pomoću prikaza circular_layout ................................................... 13 3.2.4 Crtanje grafa pomoću prikaza shell_layout ....................................................... 14 4 Crtanje mreža i grafova pomoću matplotlib-a ................................................................. 16 4.1 Naredba draw ............................................................................................................ 16 4.2 Naredba draw_networkx ........................................................................................... 17 4.3 Naredba draw_networkx_nodes ................................................................................ 19 4.4 Naredba draw_networkx_edges ................................................................................ 19 4.5 Naredba draw_networkx_labels ................................................................................ 20 4.6 Naredba draw_networkx_edge_labels ...................................................................... 21 5 Mogućnosti Matplotlib-a za prikaz slika, histograma, putanja….................................... 22 6 Literatura .......................................................................................................................... 23

Upload: others

Post on 24-Mar-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

Predmet: Sistemi veštačke inteligencije

VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U

POMOĆU MATPLOTLIB-A

SADRŽAJ

1 Matpotlib ............................................................................................................................ 2

2 Crtanje jednostavnih krivih u Matplotlib - u...................................................................... 4

3 Crtanje grafa pomoću Matplotlib-a .................................................................................... 7

3.1 Osnovno crtanje grafa pomoću Matplotlib-a .............................................................. 7

3.2 Različiti prikazi grafova pomoću Matplotlib-a ........................................................... 9

3.2.1 Crtanje grafa pomoću prikaza spring_layout ..................................................... 10

3.2.2 Crtanje grafa pomoću prikaza random_layout ................................................... 11

3.2.3 Crtanje grafa pomoću prikaza circular_layout ................................................... 13

3.2.4 Crtanje grafa pomoću prikaza shell_layout ....................................................... 14

4 Crtanje mreža i grafova pomoću matplotlib-a ................................................................. 16

4.1 Naredba draw ............................................................................................................ 16

4.2 Naredba draw_networkx ........................................................................................... 17

4.3 Naredba draw_networkx_nodes ................................................................................ 19

4.4 Naredba draw_networkx_edges ................................................................................ 19

4.5 Naredba draw_networkx_labels ................................................................................ 20

4.6 Naredba draw_networkx_edge_labels ...................................................................... 21

5 Mogućnosti Matplotlib-a za prikaz slika, histograma, putanja… .................................... 22

6 Literatura .......................................................................................................................... 23

Page 2: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

2

1 Matpotlib

Python je interpretirani, interaktivni, objektno orijentisani programski jezik visokog nivoa,

koji poseduje dinamičku semantiku. Python podržava pakete koji podstiču modularnost

programa i ponovno korišćenje koda. NetworkX je Python paket za kreiranje, manipulaciju i

proučavanje strukture, dinamike i funkcija složenih mreža.

Matplotlib je Python paket za crtanje za Python programskog jezika i njegovog numeričkog

matematičkog proširenja NumPy. On pruža objektno orijentisani API za ugrađivanje parcela

u aplikacije koje koriste GUI alatke opšte namene kao što su Tkinter, vkPithon, Kt ili GTK +.

Slika 1. Matplotlib logo

NumPy je osnovni paket za naučno računarstvo sa Python-om. Sadrži između ostalog:

moćan n-dimenzionalni niz

sofisticirane (emitovane) funkcije

alati za integraciju C / C ++ i Fortran koda

korisnu linearnu algebru, Fourier-ova transformacija i mogućnosti slučajnog broja

Pored očiglednih naučnih primena, NumPy se može koristiti i kao efikasan višedimenzionalni

prikaz generičkih podataka. Mogu se definisati proizvoljni tipovi podataka. Ovo omogućava

NumPy-ju da se bez problema integriše sa širokoim spektrom baza podataka. NumPy je

licenciran pod BSD licencom, omogućavajući ponovnu upotrebu sa nekoliko ograničenja.

Slika 2. NumPy logo

Page 3: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

3

Primer korišćenja Matplotlib-a:

import matplotlib.pyplot as plt

import numpy as np

x = np.arange(0, 5, 0.1)

y = np.sin(x)

plt.plot(x, y)

Slika 3. Primer korišćenja Matplotlib-a

Page 4: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

4

2 Crtanje jednostavnih krivih u Matplotlib - u

Pristup Python laboratoriji omogućava matplotlib lakim za učenje za iskusne korisnike

MATLAB-a, što ga čini održivanom alternativom MATLAB-a kao nastavno sredstvo za

numeričke materike i obradu signala.

Neke od prednosti kombinacija Python, NumPy i Matplotlib u odnosu na MATLAB:

Potpuno opremljeni modernim objektivno-orijentisanim programskim jezikom

pogodnim za razvoj softvera velikih veličina

Besplatan, otvorenog koda, serveri bez licence

SVG podrška

Primer 1.

import matplotlib.pyplot as plt

import numpy as np

a = np.linspace(0,10,100)

b = np.exp(-a)

plt.plot(a,b)

plt.show()

Slika 4. Primer broj 1 za crtanje jednostavnih krivih

Page 5: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

5

Primer 2.

import matplotlib.pyplot as plt

import numpy as np

t = np.arange(0.0, 2.0, 0.01)

s = 1 + np.sin(2*np.pi*t)

plt.plot(t, s)

plt.xlabel('time (s)')

plt.ylabel('voltage (mV)')

plt.title('About as simple as it gets, folks')

plt.grid(True)

plt.savefig("test.png")

plt.show()

Slika 5. Primer broj 2 za crtanje jednostavnih krivih

Page 6: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

6

Primer 3.

import numpy as np

import matplotlib.pyplot as plt

X = np.linspace(-np.pi, np.pi, 256, endpoint=True)

C,S = np.cos(X), np.sin(X)

plt.plot(X,C)

plt.plot(X,S)

plt.show()

Slika 6. Primer broj 3 za crtanje jednostavnih krivih

Page 7: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

7

3 Crtanje grafa pomoću Matplotlib-a

Glavna Python biblioteka za crtanje grafova je matplotlib.

3.1 Osnovno crtanje grafa pomoću Matplotlib-a

Primer 1.

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(8)

nx.draw(G)

plt.show()

Slika 7. Primer broj 1 za crtanje grafa

Primer 2.

import networkx as nx

import matplotlib.pyplot as plt

G=nx.path_graph(4)

print("Nodes of graph: ")

print(G.nodes())

print("Edges of graph: ")

print(G.edges())

nx.draw(G)

Page 8: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

8

plt.savefig("path_graph1.png")

plt.show()

Slika 8. Primer broj 2 za crtanje grafa

Primer 3.

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(30)

nx.draw(G)

plt.show()

Page 9: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

9

Slika 9. Primer broj 3 za crtanje grafa

3.2 Različiti prikazi grafova pomoću Matplotlib-a

Postoje različite vrste Layout-a:

Bipartite layout

Circular layout

Kamada Kawai layout

Random layout

Rescale layout

Shell layout

Spring layout

Spectral layout

Page 10: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

10

3.2.1 Crtanje grafa pomoću prikaza spring_layout

Koristimo

spring_layout(G, dim=2, k=None, pos=None, fixed=None, iterations=50,

weight='weight', scale=1.0)

za pozicioniranje čvorova pomoću Fruchterman-Reingold force-directed algoritma.

Parameters

:

G : NetworkX graph

dim : int

Dimension of layout

k : float (default=None)

Optimal distance between nodes. If None the distance is set to 1/sqrt(n)

where n is the number of nodes. Increase this value to move nodes farther

apart.

pos : dict or None optional (default=None)

Initial positions for nodes as a dictionary with node as keys and values as a

list or tuple. If None, then nuse random initial positions.

fixed : list or None optional (default=None)

Nodes to keep fixed at initial position.

iterations : int optional (default=50)

Number of iterations of spring-force relaxation

weight : string or None optional (default=’weight’)

The edge attribute that holds the numerical value used for the edge weight.

If None, then all edge weights are 1.

scale : float (default=1.0)

Scale factor for positions. The nodes are positioned in a box of size

[0,scale] x [0,scale].

Returns : dict :

A dictionary of positions keyed by node

import matplotlib.pyplot as plt

import networkx as nx

G = nx.cycle_graph(24)

pos = nx.spring_layout(G, iterations=200)

nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Blues)

plt.show()

Page 11: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

11

Slika 10. Crtanje grafa pomoću spring_layout

3.2.2 Crtanje grafa pomoću prikaza random_layout

Koristimo

random_layout(G, center=None, dim=2, seed=None)

Parameters:

G (NetworkX graph or list of nodes) – A position will be assigned

to every node in G.

center (array-like or None) – Coordinate pair around which to

center the layout.

dim (int) – Dimension of layout.

seed (int, RandomState instance or None optional (default=None))

– Set the random state for deterministic node layouts. If

int, seed is the seed used by the random number generator, if

numpy.random.RandomState instance, seed is the random

number generator, if None, the random number generator is the

RandomState instance used by numpy.random.

Returns: pos – A dictionary of positions keyed by node

Return type: dict

Page 12: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

12

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(4)

pos=nx.random_layout(G)

shells = [[0], [1,2,3]]

pos = nx.shell_layout(G, shells)

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(24)

pos = nx.random_layout(G)

nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Blues)

plt.show()

Slika 11. Crtanje grafa pomoću random_layout

Page 13: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

13

3.2.3 Crtanje grafa pomoću prikaza circular_layout

Koristimo

circular_layout(G, scale=1, center=None, dim=2)

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(4)

pos=nx.circular_layout(G)

shells = [[0], [1,2,3]]

pos = nx.shell_layout(G, shells)

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(24)

pos = nx.circular_layout(G)

nx.draw(G, pos, node_color=range(24), node_size=600, cmap=plt.cm.Reds)

plt.show()

Parameters:

G (NetworkX graph or list of nodes) – A position will

be assigned to every node in G.

scale (number (default: 1)) – Scale factor for positions.

center (array-like or None) – Coordinate pair around

which to center the layout.

dim (int) – Dimension of layout. If dim>2, the

remaining dimensions are set to zero in the returned

positions. If dim<2, a ValueError is raised.

Returns: pos – A dictionary of positions keyed by node

Return type: Dict

Page 14: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

14

3.2.4 Crtanje grafa pomoću prikaza shell_layout

Koristimo

shell_layout(G, nlist=None, scale=1, center=None, dim=2)

Parameters:

G (NetworkX graph or list of nodes) – A position will be

assigned to every node in G.

nlist (list of lists) – List of node lists for each shell.

scale (number (default: 1)) – Scale factor for positions.

center (array-like or None) – Coordinate pair around which

to center the layout.

dim (int) – Dimension of layout, currently only dim=2 is

supported. Other dimension values result in a ValueError.

Returns: pos – A dictionary of positions keyed by node

Return type: dict

Slika 12. Crtanje grafa pomoću circular_layout

Page 15: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

15

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(4)

pos=nx.shell_layout(G)

shells = [[0], [1,2,3]]

pos = nx.shell_layout(G, shells)

import matplotlib.pyplot as plt

import networkx as nx

G = nx.path_graph(24)

pos = nx.shell_layout(G)

nx.draw(G, pos, node_color=range(24), node_size=1200, cmap=plt.cm.Greens)

plt.show()

Slika 13. Crtanje grafa pomoću shell_layout

Page 16: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

16

4 Crtanje mreža i grafova pomoću matplotlib-a

NetworkX pruža osnovnu funkcionalnost za vizualizaciju grafova, ali je njegov glavni cilj da

omogući analizu grafova, a ne vizualizaciju grafova. U budućnosti, funkcionalnost

vizuelizacije grafa može biti uklonjena iz NetworkX-a ili dostupna samo kao dodatni paket.

Značajni primeri posvećenih i potpuno opremljenih alata za vizuelizaciju grafova su

Citoscape, Gephi, Graphviz i, za LaTeX slaganje sloga, PGF / TikZ. Da biste koristili ove i

druge takve alate, trebali biste izvesti svoj NetworkX grafik u format koji se može pročitati

pomoću tih alata.

4.1 Naredba draw

Naredbom draw se iscrtava trenutna figura.

draw(G, pos=None, ax=None, **kwds)

Parametri:

G (graph) – NetworkX graf

Pos (rečnik) - Rečnik sa čvorovima kao ključevima i pozicijama kao vrednostima.

Ovo će se detaljno objasniti u sledećem materijalu za vežbe.

Ax(Matplotlib osni objekat) – Iscrtava graf po specifičnim Matplotlib osama

Kwds (Opcione ključne reči) – Koriste se za rad sa labelama

Page 17: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

17

4.2 Naredba draw_networkx

Slika 14. Draw_networkX

Page 18: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

18

Primer 2.

G=nx.dodecahedral_graph()

nx.draw(G)

nx.draw(G,pos=nx.spring_layout(G)) # use spring layout

>>> import matplotlib.pyplot as plt

>>> import networkx as nx

>>> G=nx.dodecahedral_graph()

>>> nx.draw(G) # networkx draw()

>>> plt.draw() # pyplot draw()

Slika 15. Primer 2 draw_netorkX

Page 19: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

19

4.3 Naredba draw_networkx_nodes

import matplotlib.pyplot as plt

from networkx import nx

G=nx.dodecahedral_graph()

nodes=nx.draw_networkx_nodes(G,pos=nx.spring_layout(G))

Slika 16. Draw_networkx_nodes

4.4 Naredba draw_networkx_edges

import matplotlib.pyplot as plt

from networkx import nx

G=nx.dodecahedral_graph()

edges=nx.draw_networkx_edges(G, pos=nx.spring_layout(G))

Page 20: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

20

Slika 17. Draw_netwotkx_edges

4.5 Naredba draw_networkx_labels

import matplotlib.pyplot as plt

import networkx as nx

G=nx.dodecahedral_graph()

labels=nx.draw_networkx_labels(G,pos=nx.spring_layout(G))

Slika 18. Draw_networkx_labels

Page 21: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

21

4.6 Naredba draw_networkx_edge_labels

import matplotlib.pyplot as plt

import networkx as nx

G=nx.dodecahedral_graph()

edge_labels=nx.draw_networkx_edge_labels(G,pos=nx.spring_layout(G))

Slika 19. Draw_networkx_edge_labels

Page 23: VEŽBE: VIZUELIZACIJA GRAFOVA U PYTHON-U POMOĆU … · 2020. 5. 13. · 7 3 Crtanje grafa pomoću Matplotlib-a Glavna Python biblioteka za crtanje grafova je matplotlib. 3.1 Osnovno

23

Reference koje se koriste za kodiranje slika

import matplotlib matplotlib.path matplotlib.path.Path matplotlib.patches matplotlib.patches.PathPatch matplotlib.patches.Circle matplotlib.axes.Axes.add_patch matplotlib.transforms matplotlib.transforms.Affine2D matplotlib.transforms.Affine2D.rotate_deg

Postoji još mnogo mogućnosti kao što su:

Three-dimensional plotting

Streamplot

Ellipses

Bar charts

Pie charts

Scatter plots

GUI widgets

Date handling

Log plots

Polar plots

Legends

6 Literatura

[1] https://www.python.org/

[2] https://networkx.github.io/documentation/stable/tutorial.html

[3] https://www.spyder-ide.org/

[4] https://realpython.com/

[5] https://matplotlib.org/2.0.2/index.html

[6] http://www.numpy.org/