Come Creare Grafici a Violino di Seaborn in Stile Cyberpunk con un Codice Python Minimale

Create Cyberpunk Style Seaborn Violin Plots with Minimal Python Code.

Un semplice tutorial su come migliorare facilmente i tuoi grafici a violino Seaborn

Grafici a violino Seaborn cyberpunked che mostrano variazioni di densità per diverse litologie incontrate all'interno di un pozzo. Immagine dell'autore.

I grafici a violino sono una comune visualizzazione dei dati che combina la potenza di un boxplot e un grafico di densità in un singolo grafico. Ciò ci consente di visualizzare più informazioni all’interno di una singola figura. Ad esempio, possiamo visualizzare le statistiche di base dal boxplot, identificare possibili valori anomali e visualizzare la distribuzione di quei dati. Ciò può aiutarci a capire se i dati sono distorti o contengono distribuzioni multimodali.

All’interno della mia ultima serie di articoli, ho esplorato modi per migliorare e potenziare le figure di base di matplotlib utilizzando vari temi, tra cui uno stile cyberpunk. Questo stile fornisce un aspetto futuristico e neon ai grafici e richiede solo un paio di righe di codice per essere applicato alle figure di matplotlib e seaborn.

Se vuoi saperne di più, puoi vedere come l’ho applicato alle figure di matplotlib nel seguente articolo.

Cyberpunking Your Matplotlib Figures

Portare le tue figure di Matplotlib da noiose ad interessanti con poche righe di codice

towardsdatascience.com

In questo breve tutorial, prenderemo il grafico a violino Seaborn di base e lo cyberpunkeremo.

Importazione delle librerie e caricamento dei dati

Inizieremo importando le librerie con cui lavoreremo in questo tutorial.

Queste sono matplotlib e seaborn per visualizzare i nostri dati, pandas per caricare e memorizzare i nostri dati e mplcyberpunk per applicare il tema cyberpunk alla grafico seaborn.

import matplotlib.pyplot as pltimport pandas as pdimport mplcyberpunkimport seaborn as sns

Dopo aver importato le librerie necessarie, il passo successivo che dobbiamo eseguire è caricare i nostri dati. Ciò viene fatto utilizzando la funzione read_csv() di pandas e passando la posizione del file di dati.

I dati che utilizzeremo sono un sottoinsieme della competizione combinata di Machine Learning XEEK e Force 2020 che aveva lo scopo di prevedere la litologia dalle misurazioni del registro di pozzo. Ulteriori dettagli di questo dataset possono essere trovati alla fine dell’articolo.

df = pd.read_csv('data/Xeek_Well_15-9-15.csv')
Dataframe di Pandas contenente le misurazioni del registro di pozzo per il pozzo 15/19-15. Immagine dell'autore.

Quando visualizziamo il dataframe (df) otteniamo l’immagine sopra. Possiamo vedere che abbiamo i dati di un singolo pozzo che si estendono da 485m a 3200m.

Creazione dei grafici a violino Seaborn

Dal dataframe, utilizzeremo due colonne. La colonna RHOB, che contiene le misurazioni della densità volumica, e la colonna LITH, che contiene le descrizioni litologiche.

Possiamo chiamare il seguente codice per creare il grafico a violino di base.

Prima impostiamo la dimensione della figura su 10 x 5, che ci darà una figura di dimensioni decenti da visualizzare, e poi chiamiamo sns.violinplot() e passiamo i parametri richiesti.

plt.figure(figsize=(10,5))sns.violinplot(x='LITH', y='RHOB', data=df)

Quando eseguiamo il codice sopra, otteniamo il seguente grafico.

Grafico a violino di seaborn di base che mostra la variazione della densità di massa volumica (RHOB) con ogni litologia. Immagine dell'autore.

A prima vista, il grafico restituito sembra buono e utilizzabile, tuttavia, possiamo migliorare lo stile utilizzando la libreria mplcyberpunk.

Applicazione dello stile cyberpunk alle figure di Seaborn

Per applicare lo stile cyberpunk al nostro grafico, tutto ciò che dobbiamo fare è aggiungere una linea extra al codice. Questa riga di codice utilizza uno statement with e poi chiama plt.style.context e ci consente di applicare lo stile solo al grafico che viene chiamato sotto questa linea anziché cambiare lo stile globale per tutti i grafici.

with plt.style.context('cyberpunk'):    plt.figure(figsize=(10,5))    sns.violinplot(x='LITH', y='RHOB', data=df)

Quando eseguiamo il codice sopra, otteniamo il seguente grafico a violino che ha applicato quasi tutto il tema cyberpunk.

Grafico a violino Seaborn dopo l'applicazione del tema mplcyberpunk. Immagine dell'autore.

Uno dei processi che dovrebbe fare la libreria mplcyberpunk è cambiare i colori dei violini. Tuttavia, nel nostro caso, questo non è stato applicato. Ma può essere facilmente corretto.

Dobbiamo creare una lista dei colori cyberpunk per correggerlo. Questi colori sono stati estratti dal codice sorgente mplcyberpunk, ma possono essere cambiati con qualsiasi colore desideri. Ricorda, se stai cercando uno stile cyberpunk, probabilmente userai colori neon brillanti.

Oltre alla creazione di una lista di colori, possiamo anche ordinare l’ordine dei violini in modo che siano in ordine alfabetico. Questo è un passaggio facoltativo, ma buono, soprattutto quando si confrontano più set di dati con le stesse categorie.

my_pal=['#08F7FE', '#FE53BB', '#F5D300', '#00ff41', 'r', '#9467bd', '#de014f']lith_order = df['LITH'].sort_values().unique()

Per applicare i colori ai file, possiamo passare my_pal al parametro della palette per il grafico a violino.

Tuttavia, per applicare lo stesso colore ai bordi/linee dei grafici, dobbiamo accedere alle collections, che memorizzano un elenco di tutte le parti del grafico a violino.

In questo elenco, ogni due elementi consecutivi corrispondono a un violino: il primo è il corpo del violino e il secondo è il mini box plot.

Quindi dobbiamo tenere conto di questo nel nostro ciclo for.

with plt.style.context('cyberpunk'):    plt.figure(figsize=(15,10))    g=sns.violinplot(x='LITH', y='RHOB', data=df, palette=my_pal,                     order=lith_order)        for i in range(len(g.collections)//2):          # divide by 2 because collections include both violin         # bodies and the mini box plots        g.collections[i*2].set_edgecolor(my_pal[i])        g.collections[i*2].set_alpha(0.8)

Quando eseguiamo il codice sopra, otteniamo il seguente grafico con i nostri violini cyberpunk.

Grafico a violino di Seaborn cyberpunk per diverse litologie incontrate all'interno di un pozzo. Immagine dell'autore.

Adesso che siamo in grado di controllare le linee e i colori del nostro grafico, possiamo apportare alcune modifiche finali cambiando l’alpha di riempimento per renderlo leggermente più luminoso e aumentando le dimensioni delle etichette dell’asse x e y.

with plt.style.context('cyberpunk'):    plt.figure(figsize=(15,10))        g=sns.violinplot(x='LITH', y='RHOB', data=df, palette=my_pal,                     order=lith_order)    for i in range(len(g.collections)//2):        g.collections[i*2].set_edgecolor(my_pal[i])        g.collections[i*2].set_alpha(0.9)        g.set_ylabel('RHOB\n\n', fontsize=16)    g.set_xlabel('\n\nLithology', fontsize=16)
Violin plot Seaborn cyberpunk per le diverse litologie incontrate all'interno di un pozzo. Immagine dell'autore.

Sommario

La libreria mplcyberpunk fornisce un modo rapido e facile per trasformare istantaneamente i tuoi grafici dallo stile predefinito a qualcosa che ha un aspetto futuristico.

Nella creazione di grafici come questo, è sempre importante considerare il tuo pubblico e assicurarsi che il messaggio e la storia che stai cercando di trasmettere siano ancora chiari.

Dataset usato in questo tutorial

Sottoinsieme di un set di dati di training utilizzato come parte di una competizione di Machine Learning organizzata da Xeek e FORCE 2020 (Bormann et al., 2020). Questo dataset è concesso in licenza con Creative Commons Attribution 4.0 International.

Il set di dati completo può essere acceduto al seguente link: https://doi.org/10.5281/zenodo.4351155.

Grazie per aver letto. Prima di andare, dovresti assolutamente iscriverti al mio contenuto e ricevere i miei articoli nella tua casella di posta. Puoi farlo qui!

In secondo luogo, puoi ottenere l’esperienza completa di Nisoo e supportare migliaia di altri scrittori e me registrandoti per una membership. Costa solo $5 al mese e hai accesso completo a tutti i fantastici articoli di Nisoo, nonché la possibilità di guadagnare denaro con la tua scrittura.

Se ti registri utilizzando il mio link, mi supporterai direttamente con una parte della tua quota e non ti costerà di più. Se lo fai, grazie mille per il tuo supporto.