Guida completa: matplotlib.pyplot.plot
Full docs (numpy è parte della suite scipy) numpy Per chi viene da matlab: numpy for matlab users
Caricare i moduli definendo una breve stringa di caratteri per richiamarli in tutto il programma. Tipicamente si usa np e plt
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
numpy è comodo perché permette l'immediata lettura di dati salvati in un file di testo (txt, csv, xml, json...) Ad esempio usiamo un file dati.txt che contiene 1000 righe, 3 colonne:
...
0 37.345762335799044 10.814401918949596 21.528309346739572
1 34.009163092868654 10.241431907380798 21.796692783309577
2 34.571711986088836 9.01934152076184 19.011643862413628
3 38.968212062235196 10.629117455512583 21.383705396142606
4 35.72296385364186 9.143071326735619 18.57193741856059
...
(generato con genera_dati_a_caso)
a, b, c, d = np.loadtxt('./files/dati.txt', unpack=True) # unpack perché loadtxt in output restituisce il dato diviso per righe
plt.plot(a,b, label='flat random')
plt.plot(a,c, label='gaus1')
plt.plot(a,d, label='gaus2')
plt.legend() # <--- note the default location "best"
plt.show()
Istogrammi
plt.hist(b)
plt.title('flat random')
plt.show()
plt.hist(c)
plt.title('gaus')
plt.show()
plt.hist(c, 100)
plt.hist(d, 100)
plt.title('gaus')
plt.show()
Colori
plt.hist(c, 100, color='r')
plt.hist(d, 100, color='y', ec='r')
plt.title('gaus')
plt.show()
Solo bordi, utile per sovrapposizioni
plt.hist(c, 100, histtype='step')
plt.hist(d, 100, histtype='step')
plt.hist(d-8, 100, histtype='step')
plt.title('gaus')
plt.show()
Statistiche istogrammi accessibili dagli array di dati che li generano (e le funzioni del modulo numpy max, min, mean, std) Esempio:
media = a.mean()
stdev = a.std()
massimo = a.max()
minimo = a.min()
integrale = a.sum()
print('Serie di dati a:')
print(' max: ', massimo)
print(' min: ', minimo)
print(' integrale: ', integrale)
print(' media: ', media)
Per tutti i valori (for loop su una lista, stampa formattata)
for x in [b,c,d]:
print('Tot dati: %10d, media %.2f, deviazione standard %.2f' % (len(x), x.mean(), x.std()))
Scrivere nel plot con plt.text()
plt.hist(c, 100, histtype='step')
plt.hist(d, 100, histtype='step')
plt.hist(d-8, 100, histtype='step')
plt.text(20,200,'Entries: %d\nMean: %.1f\nStdev: %.1f' % (len(c), c.mean(),c.std()))
Un po' di cosmesi:
colori = ['red', 'blue', 'green']
histos = [c,d,d-8]
for i in range(3):
plt.hist(histos[i], 100, histtype='step', color=colori[i], label='mean = %.1f'%histos[i].mean())
plt.legend()
plt.show()
Istogrammi bidimensionali
plt.hist2d(c,d,)
plt.show()
Binning, palette, ...
plt.hist2d(c,d,100) # same for x and y
plt.show()
plt.hist2d(c,d,[50,200]) # 50 for x, 200 for y
plt.colorbar()
plt.show()
Vedere anche matplotlib: choosing color maps
import matplotlib.colors as colors
palettes=['viridis', 'plasma', 'Blues', 'Spectral', 'PuBu_r', 'summer', 'RdBu', 'RdYlBu']
plt.figure(figsize=(12,6))
for i in range(8):
plt.subplot(241+i)
plt.hist2d(c,d,100, cmap=palettes[i])
plt.show()