Come tracciare due colonne di un frame di dati panda usando i punti?


96

Ho un frame di dati panda e vorrei tracciare i valori di una colonna rispetto ai valori di un'altra colonna. Fortunatamente, esiste un plotmetodo associato ai frame di dati che sembra fare ciò di cui ho bisogno:

df.plot(x='col_name_1', y='col_name_2')

Sfortunatamente, sembra che tra gli stili di trama (elencati qui dopo il kindparametro) non ci siano punti. Posso usare linee o barre o anche densità ma non punti. C'è una soluzione che può aiutare a risolvere questo problema.

Risposte:


115

È possibile specificare il valore styledella linea tracciata quando si chiama df.plot:

df.plot(x='col_name_1', y='col_name_2', style='o')

L' styleargomento può anche essere un dicto list, ad esempio:

import numpy as np
import pandas as pd

d = {'one' : np.random.rand(10),
     'two' : np.random.rand(10)}

df = pd.DataFrame(d)

df.plot(style=['o','rx'])

Tutti i formati di stile accettati sono elencati nella documentazione di matplotlib.pyplot.plot.

Produzione


78

Per questo (e per la maggior parte dei grafici) non farei affidamento sui wrapper Pandas per matplotlib. Invece, usa direttamente matplotlib:

import matplotlib.pyplot as plt
plt.scatter(df['col_name_1'], df['col_name_2'])
plt.show() # Depending on whether you use IPython or interactive mode, etc.

e ricorda che puoi accedere a un array NumPy dei valori della colonna con, df.col_name_1.valuesad esempio.

Ho avuto problemi a usarlo con la stampa predefinita di Pandas nel caso di una colonna di valori Timestamp con precisione al millisecondo. Nel tentativo di convertire gli oggetti in datetime64tipo, ho anche scoperto un brutto problema: < Pandas dà un risultato errato quando si chiede se i valori della colonna Timestamp hanno attr astype >.


3

Pandasutilizza matplotlibcome libreria per i grafici di base. Il modo più semplice nel tuo caso sarà utilizzare quanto segue:

import pandas as pd
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.rand(20),
      'col_name_2': np.random.rand(20)}
df= pd.DataFrame(sample_data)
df.plot(x='col_name_1', y='col_name_2', style='o')

inserisci qui la descrizione dell'immagine

Tuttavia, consiglierei di utilizzare seaborncome soluzione alternativa se desideri avere trame più personalizzate senza entrare nel livello base di matplotlib.In questo caso la soluzione sarà la seguente:

import pandas as pd
import seaborn as sns
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.rand(20),
      'col_name_2': np.random.rand(20)}
df= pd.DataFrame(sample_data)
sns.scatterplot(x="col_name_1", y="col_name_2", data=df)

inserisci qui la descrizione dell'immagine


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.