Nel precedente articolo è stata introdotta la libreria antimait come strumento per l’acquisizione di dati da dispositivi come Arduino. In questo articolo l’attenzione si sposterà su come utilizzare questi dati per generare rappresentazioni grafiche dei fenomeni osservati.
Quando si lavora con dati che devono essere presentati per via grafica, se si è in ambiente Python la via maestra è rappresentata dall’utilizzo della libreria matplotlib, che offre una miriade di strumenti a riguardo.
Per installarla, utilizzando pip basterà eseguire:
$ pip3 install matplotlib
Il sito ufficiale della libreria riporta altre modalità di installazione a seconda delle diverse necessità inerenti la propria piattaforma, che possono essere approfondite al seguente link.
La maniera più semplice di utilizzare matplotlib è quella di sfruttare il modulo matplotlib.pyplot, pubblicizzato dagli stessi sviluppatori come il modulo adatto ad un uso interattivo e semplice della libreria.
Partendo da una list di Python, si può facilmente rappresentare tramite pyplot il suo contenuto utilizzandola funzione plot. Questa funzione ha la seguente firma:
def plot(*args, scalex=True, scaley=True, data=None, **kwargs)
e ritorna un oggetto di tipo matplotlib.lines.Line2D, un’astrazione che rappresenta una curva in due dimensioni; la curva può essere poi visualizzata tramite il plotter interattivo della libreria utilizzando il metodo show.
Un semplice script che genera una lista di valori inerenti alla funzione f(t) = t2 e lo visualizza è riportato di seguito:
import matplotlib.pyplot as plt
data = [t*t for t in range(-10, 11)] # Lista di valori di f(t) in [-10, 10] con step di un'unità
plt.plot(data)
plt.show()
Nel caso in cui si abbia a che fare con dati per cui sia necessario generare un grafico a barre, si può utilizzare la funzione bar al posto di plot; un caso d’uso per questa funzione potrebbe essere quello in cui si è interessati nella frequenza dei caratteri alfabetici (per semplicità senza differenziare maiuscole/minuscole) di una pagina web, ad esempio la homepage di antima.it:
import matplotlib.pyplot as plt
# Libreria per effettuare richieste http, installabile tramite pip3 install requests
import requests
page = requests.get("http://antima.it")
char_freq = {}
for char in page.text:
if char.isalpha():
char = char.lower()
if char not in char_freq:
char_freq[char] = 1
else:
char_freq[char] += 1
plt.bar(char_freq.keys(), char_freq.values())
plt.show()
Grafico a barre che illustra la frequenza dei caratteri alfabetici sulla home di antima.it
Un’altra caratteristica molto comoda di matplotlib.pyplot è data dalla possibilità di potere salvare i grafici realizzati, utilizzando la funzione savefig. Qui di seguito viene utilizzata la libreria pathlib con il suo oggetto Path per specificare il percorso in cui salvare l’immagine:
import matplotlib.pyplot as plt
from pathlib import Path
data = [t*t for t in range(-10, 11)]
plt.plot(data)
# Path.cwd ritorna il percorso della cartella attualmente in uso
# in cui verrà salvata l'immagine con il nome "test_grafico.png"
img_path = Path(Path.cwd(), "test_grafico")
plt.savefig(img_path)
Nel prossimo articolo, la discussione proseguirà sul come queste funzionalità vengono implementate all’interno del modulo antimait.plotting seguendo lo schema base Source/Receiver del nostro mini-framework.
Acquisizione ed elaborazione dati con Arduino – Il modulo antimait.plotting →