Wie zeichne ich zwei Spalten eines Pandas-Datenrahmens mit Punkten?

96

Ich habe einen Pandas-Datenrahmen und möchte Werte aus einer Spalte gegen die Werte aus einer anderen Spalte zeichnen. Glücklicherweise gibt es eine plotMethode, die mit den Datenrahmen verbunden ist und das zu tun scheint, was ich brauche:

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

Leider sieht es so aus, als ob es unter den Plotstilen ( hier nach dem kindParameter aufgeführt) keine Punkte gibt. Ich kann Linien oder Balken oder sogar Dichte verwenden, aber keine Punkte. Gibt es eine Problemumgehung, die zur Lösung dieses Problems beitragen kann?

römisch
quelle

Antworten:

115

Sie können styledie gezeichnete Linie beim Aufrufen angeben df.plot:

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

Das styleArgument kann auch ein dictoder sein list, z.

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'])

Alle akzeptierten Stilformate sind in der Dokumentation von aufgeführt matplotlib.pyplot.plot.

Ausgabe

sodd
quelle
78

Für diese (und die meisten Handlungen) würde ich mich nicht auf die Pandas-Wrapper für matplotlib verlassen. Verwenden Sie stattdessen einfach matplotlib direkt:

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.

und denken Sie daran, dass Sie beispielsweise mit auf ein NumPy-Array der Spaltenwerte zugreifen können df.col_name_1.values.

Ich hatte Probleme mit der Verwendung des Pandas-Standardplots im Fall einer Spalte mit Zeitstempelwerten mit Millisekundengenauigkeit. Beim Versuch, die Objekte in datetime64Typ zu konvertieren , habe ich auch ein unangenehmes Problem festgestellt : < Pandas liefert ein falsches Ergebnis, wenn gefragt wird, ob die Zeitstempelspaltenwerte den Typ attr haben >.

ely
quelle
3

Pandaswird matplotlibals Bibliothek für grundlegende Diagramme verwendet. Der einfachste Weg in Ihrem Fall ist der folgende:

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')

Geben Sie hier die Bildbeschreibung ein

Ich würde jedoch empfehlen, seabornals alternative Lösung zu verwenden, wenn Sie individuellere Diagramme haben möchten, ohne in die Grundstufe von zu gehen. matplotlib.In diesem Fall lautet die Lösung wie folgt:

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)

Geben Sie hier die Bildbeschreibung ein

Dr. Arslan
quelle