Suggerimenti su Matplotlib per migliorare istantaneamente le tue visualizzazioni dei dati – Secondo Storytelling with Data

Matplotlib tips to instantly improve your data visualizations - from Storytelling with Data

Ricreare le lezioni apprese dal libro di Cole Nussbaumer Knaflic in Python utilizzando Matplotlib

Saper comunicare efficacemente con i dati è una competenza che è rilevante per chiunque lavori con i dati e non solo per i data scientist e gli analisti dei dati.

Uno dei miei libri preferiti su questo argomento è “Storytelling with Data” di Cole Nussbaumer Knaflic. È ricco di esempi pratici su come migliorare le tue visualizzazioni dei dati.

Storytelling with Data: una guida alla visualizzazione dei dati per i professionisti del business

Storytelling with Data: una guida alla visualizzazione dei dati per i professionisti del business [Nussbaumer Knaflic, Cole] su Amazon.com…

www.amazon.com

L’unico aspetto sfortunato del libro, a mio parere, è che i suoi esempi sono creati utilizzando Microsoft Excel.

Alza la mano se conosci un ingegnere che ama creare visualizzazioni dei dati in Excel – Sì, neanche io.

“Potresti essere un ingegnere, ma non dovrebbe essere necessario avere una laurea in ingegneria per capire il tuo grafico.” — Cole Nussbaumer Knaflic in “Storytelling with Data”

Ecco perché questo articolo coprirà i frammenti di codice di Matplotlib che ho usato di più dopo aver letto “Storytelling with Data” di Nussbaumer Knaflic.

import matplotlib.pyplot as plt

Questo articolo assume che tu conosca già le basi delle visualizzazioni dei dati con Matplotlib e Seaborn, come la creazione di grafici a barre, grafici a linee o grafici a dispersione, la modifica di palette di colori e l’aggiunta di etichette fondamentali. Questo articolo assume anche che tu sappia quando utilizzare quale tipo di grafico.

Invece di coprire le basi di Matplotlib, questo articolo si concentra su trucchi meno conosciuti, come:

  • Come rimuovere il bordo superiore e destro di un grafico di Matplotlib
  • Come rimuovere le tacche da un grafico di Matplotlib
  • Come personalizzare i colori delle singole barre in un grafico di Matplotlib
  • Come cambiare il colore dell’asse x e y in un grafico di Matplotlib
  • Come aggiungere annotazioni di testo a un grafico di Matplotlib
  • Come aggiungere valori a un grafico a barre in un grafico di Matplotlib
  • Come rendere tutto o parte del testo in grassetto nell’annotazione di Matplotlib
  • Come colorare il testo nell’annotazione di Matplotlib

Cominciamo con un esempio semplice. I dati seguenti sono finti per consentirci di concentrarci sulle tecniche di visualizzazione dei dati:

import pandas as pd# Definisci il dataframe di esempiof = pd.DataFrame(          {'caratteristica 1' : ['gatto 1', 'gatto 2', 'gatto 3', 'gatto 4'],           'caratteristica 2' : [400, 300, 200, 100]          })

Creiamo un semplice grafico a barre monocromatico utilizzando Seaborn con un titolo come punto di partenza:

import seaborn as sns# Crea un grafico a barre di base dal dataframe di esempiofig, ax = plt.subplots(1,1, figsize = (6, 4))sns.barplot(data =  f,             x = 'caratteristica 1',             y = 'caratteristica 2',             color = 'tan')# Aggiungi il titoloax.set_title('Titolo significativo')plt.show()

Rimuovere il disordine

Nel capitolo “Il disordine è il tuo nemico!” Nussbaumer Knaflic parla di come identificare ed eliminare il disordine visivo dalla tua visualizzazione dei dati – questa sezione ti mostrerà come rimuovere il disordine visivo nei grafici di Matplotlib.

“[…] ogni singolo elemento aggiunge carico cognitivo per il tuo pubblico.” — Cole Nussbaumer Knaflic in “Storytelling with Data”

Come rimuovere il bordo superiore e destro di un grafico Matplotlib

Di default, i grafici Matplotlib hanno una scatola di cosiddette spine intorno ai bordi della figura. Soprattutto le spine superiori e destre possono ingombrare la visualizzazione dei dati e quindi dovrebbero essere rimosse.

Puoi semplicemente rimuovere le spine non pertinenti con il seguente frammento di codice:

# Rimuovere le spine superiori e destreax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)

Utilizza 'bottom' e 'left' se vuoi rimuovere anche le altre spine. E se vuoi rimuovere il bordo, compreso l’intero asse x e y, puoi utilizzare ax.axis('off').

Come rimuovere i ticks da un grafico Matplotlib

I ticks di solito non vengono considerati ingombranti. Ma in alcuni casi, come in questo esempio, i ticks dell’asse x di un grafico a barre sono ridondanti.

# Rimuovere i ticks sull'assi xax.tick_params(bottom = False)

Utilizza left = False se vuoi rimuovere anche i ticks dell’asse y.

Ora, l’esempio con la rimozione dell’ingombro appare come segue:

Prima e dopo la rimozione dell'ingombro in un grafico Matplotlib.

Non ti dà la nuova visualizzazione una sensazione molto più calma grazie all’eliminazione dell’ingombro visivo?

De-emphasize

Nel capitolo “Pensa come un designer”, Nussbaumer Knaflic ci mostra come attenuare le informazioni necessarie ma rilevanti. Questa sezione ti mostra come cambiare i colori delle parti meno importanti di un grafico Matplotlib.

“Metti gli elementi necessari ma non impattanti sullo sfondo. […] Il grigio chiaro funziona bene per questo.” – Cole Nussbaumer Knaflic in “Storytelling with Data”

Come personalizzare i colori delle singole barre in un grafico Matplotlib

Sostituisci il parametro color del metodo sns.barplot con il parametro palette per controllare il colore di ogni barra. In questo modo, puoi utilizzare il grigio chiaro per attenuare le barre meno importanti e evidenziare solo la barra rilevante con il colore principale.

# Definisci i colori delle singole barrecustom_colors = ['grigio chiaro', 'tan', 'grigio chiaro', 'grigio chiaro']# Attenua le barre meno importantisns.barplot(data =  df,             x = 'feature 1',             y = 'feature 2',             palette = custom_colors) 

Come cambiare il colore dell’asse x e y in un grafico Matplotlib

Successivamente, vogliamo anche attenuare i colori dell’asse x e y. Per farlo, dobbiamo attenuare il colore della spina, dei ticks e delle etichette dell’asse:

# Attenua i colori delle spineax.spines['left'].set_color('grigio')   ax.spines['bottom'].set_color('grigio')# Attenua i colori dei ticksax.tick_params(colors = 'grigio')# Attenua i colori delle etichetteax.set_xlabel('feature 1', color = 'grigio')ax.set_ylabel('feature 2', color = 'grigio')

Ora, l’esempio con le informazioni meno importanti attenuate appare come segue:

Prima e dopo l'attenuazione delle informazioni meno importanti nel grafico Matplotlib.

Il testo è il tuo amico: aggiunta di annotazioni

Nussbaumer Knaflic evidenzia che dovresti aggiungere del testo alle tue visualizzazioni dei dati per evidenziare i concetti chiave. In questa sezione, vedremo il metodo ax.annotate() per aggiungere del testo ai grafici di Matplotlib.

“Se c’è una conclusione a cui vuoi che il tuo pubblico arrivi, esprimila con le parole.” — Cole Nussbaumer Knaflic in “Storytelling with Data”

Come aggiungere note di testo a un grafico di Matplotlib

Per aggiungere del testo ad una figura di Matplotlib, puoi utilizzare il metodo ax.annotate(), che accetta come argomenti il testo e la sua posizione nel grafico. Inoltre, puoi specificare aspetti come l’allineamento orizzontale (ha) o verticale (va) o la dimensione del font.

# Aggiungi note di testoax.annotate('Guarda il "gatto 2". \nQuesto è importante!',             xy = (1.5, 360),               ha = 'center',              fontsize = 11,           )

Se vuoi avere una freccia aggiuntiva per indicare qualcosa, devi utilizzare i seguenti parametri:

  • xy: il punto da annotare, ovvero dove la freccia punterà
  • xytext: dove posizionare il testo (e dove termina la freccia)
  • arrowprops = {'arrowstyle' : '->'}: come deve apparire la freccia

Come aggiungere i valori a un grafico a barre in un grafico di Matplotlib

Per aggiungere il valore ad ogni barra individuale, dobbiamo iterare sulle ax.patches. Per ogni bar, puoi utilizzare i metodi get_height(), get_width() e get_x() per posizionare il valore sopra la barra.

# Annota il grafico a barre con i valorifor bar in ax.patches:    ax.annotate(int(bar.get_height()),                xy = (bar.get_x() + bar.get_width() / 2, bar.get_height()),                 ha = 'center',                 va = 'center',                xytext = (0, 8),                textcoords = 'offset points'                )

Adesso, l’esempio con note di testo aggiunte appare come segue:

Prima e dopo l'aggiunta di note di testo nel grafico di Matplotlib.

Evidenziare

Nel capitolo “Focalizza l’attenzione del pubblico”, Nussbaumer Knaflic parla di come sfruttare gli attributi preattentivi per indirizzare l’attenzione del pubblico su ciò che vuoi far loro vedere. In questa sezione, discuteremo alcune semplici modifiche che puoi apportare alle note di testo nei grafici di Matplotlib per sfruttare gli attributi preattentivi nel testo.

“[…] se usiamo gli attributi preattentivi in modo strategico, possono aiutarci a far vedere al nostro pubblico ciò che vogliamo far loro vedere prima ancora che lo sappiano.” — Cole Nussbaumer Knaflic in “Storytelling with Data”

Come rendere il testo intero o parti di esso in grassetto nell’annotazione Matplotlib

Utilizzare il testo in grassetto può aiutare a evidenziare le parti importanti della visualizzazione dei dati. Se vuoi evidenziare solo una parte della tua annotazione, puoi utilizzare $\\bf{}$ nella tua stringa e inserire il testo da enfatizzare tra le parentesi graffe. Se vuoi evidenziare l’intera annotazione, aggiungi semplicemente il parametro fontweight = 'bold'.

# Rendi solo una parte del testo in grassettoax.annotate('Guarda il "gatto 2". \nQuesto è $\\bf{importante}$!',             #...           )# Rendi tutto il testo in grassettoax.annotate('Guarda il "gatto 2". \nQuesto è importante!',             #...            fontweight='bold',           )

Come colorare il testo in Matplotlib annotation

Per associare testi specifici ad elementi specifici nella visualizzazione dei dati, puoi sfruttare l’associazione dello stesso colore. Per dare un colore all’annotazione del testo, basta aggiungere il parametro color al metodo ax.annotate().

# Rimuovi le tacche sull'asse xax.tick_params(bottom = False)# Aggiungi un importante takeaway al grafico ax.annotate('Guarda "gatto 2". \nQuesto è $\\bf{importante}$!', # Evidenzia i termini importanti            xy = (1.5, 360),             ha = 'center',            color = 'tan',             fontsize = 11,           )

Ora, l’esempio con informazioni importanti evidenziate appare come segue:

Prima e dopo l'enfasi delle informazioni importanti nel grafico Matplotlib.

Riassunto

Puoi vedere la differenza che questi piccoli trucchi di Matplotlib apportano alla visualizzazione dei dati. Semplicemente rimuovendo la confusione, aggiungendo annotazioni di testo e de-emphasizing meno informazioni importanti e invece enfatizzando informazioni importanti, puoi vedere immediatamente una forte differenza nella leggibilità della visualizzazione dei dati di esempio.

Prima e dopo l'applicazione di informazioni importanti nel grafico Matplotlib.

Puoi vedere il codice che crea la visualizzazione finale dei dati qui sotto.

import matplotlib.pyplot as pltimport seaborn as sns# Definisci la palette di colorihighlight_color = 'tan'muted_color = 'dimgrey'muted_color2 = 'lightgrey'custom_colors = [muted_color2, 'tan', muted_color2, muted_color2]# Crea un grafico a barre di base dal dataframe di esempiofig, ax = plt.subplots(1,1, figsize = (6, 4))sns.barplot(data =  df,             x = 'feature 1',             y = 'feature 2',             palette = custom_colors) # De-emphasize less important bars# Aggiungi il titoloax.set_title('Titolo significativo')# Muta i colori delle etichetteax.set_xlabel('feature 1', color = muted_color)ax.set_ylabel('feature 2', color = muted_color)# Rimuovi le spine non importanti e muta il colore delle spine rimanentiax.spines['right'].set_visible(False)      # Rimuovi le spine in alto e a destraax.spines['top'].set_visible(False)        # Rimuovi le spine in alto e a destra ax.spines['left'].set_color(muted_color)   # Muta i colori delle spineax.spines['bottom'].set_color(muted_color) # Muta i colori delle spine# Rimuovi le tacche sull'asse x e mura i colori delle taccheax.tick_params(bottom = False,        # Rimuovi le tacche sull'asse x    colors = muted_color,             # Muta i colori delle tacche)# Annota il grafico a barre con i valori per ogni barrafor i, bar in enumerate(ax.patches):    ax.annotate(int(bar.get_height()),    xy = (bar.get_x() + bar.get_width() / 2, bar.get_height()),     ha = 'center',     va = 'center',    xytext = (0, 8),    textcoords = 'offset points',    color = custom_colors[i])# Aggiungi un importante takeaway al grafico ax.annotate('Guarda "gatto 2". \nQuesto è $\\bf{importante}$!', # Evidenzia i termini importanti            xy = (1.5, 360),             ha = 'center',            color = highlight_color,             fontsize = 11,           )     plt.show()

“Storytelling with Data” di Cole Nussbaumer Knaflic è uno dei miei libri preferiti sulle visualizzazioni dei dati. Se sei interessato a come portare le tue visualizzazioni dei dati al livello successivo, ti consiglio vivamente questo libro.

Se sei interessato ad altri trucchi di Matplotlib, in questo repository, Andre Gaskov ha ricreato molte visualizzazioni del libro in Python utilizzando Matplotlib:

GitHub – empathy87/storytelling-with-data: Plots from the book “Storytelling with data”…

Grafici dal libro “Storytelling con i dati” implementazione usando Python e matplotlib – GitHub …

github.com

Ti è piaciuta questa storia?

Iscriviti gratuitamente per ricevere una notifica quando pubblico una nuova storia.

Vuoi leggere più di 3 storie gratuite al mese? – Diventa un membro Nisoo per 5$/mese. Puoi supportarmi utilizzando il mio link di riferimento quando ti registri. Riceverò una commissione senza alcun costo aggiuntivo per te.

Come membro di Nisoo, una parte della tua quota di iscrizione va agli scrittori che leggi, e hai accesso completo a ogni storia…

Nisoo.com

Trovami su LinkedIn, Twitter e Kaggle!

Riferimenti

Riferimenti Immagine

Se non diversamente indicato, tutte le immagini sono state create dall’autore.

Web & Letteratura

Knaflic, Cole. Storytelling With Data: A Data Visualization Guide for Business Professionals, Wiley, © 2015.