Ich habe einen pandas Datenrahmen und möchte Werte von einer Spalte gegen die Werte von einer anderen Spalte zeichnen. Glücklicherweise gibt es die Methode plot
, die mit den Datenrahmen verbunden ist, die scheinen um zu tun was ich brauche:
df.plot(x='col_name_1', y='col_name_2')
Leider sieht es so aus, als ob es unter den Plotstilen (aufgelistet hier nach dem Parameter kind
) keine Punkte gibt. Ich kann Linien oder Balken oder sogar Dichte verwenden, aber keine Punkte. Gibt es eine Möglichkeit, dieses Problem zu lösen?.
Sie können das style
der gezeichneten Linie angeben, wenn Sie df.plot
aufrufen:
df.plot(x='col_name_1', y='col_name_2', style='o')
Das Argument style
kann auch ein dict
oder list
sein, 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 matplotlib.pyplot.plot
aufgeführt.
Für dieses (und das meiste Zeichnen) würde ich mich nicht auf die Wrapper Pandas matplotlib verlassen, sondern einfach matplotlib direkt verwenden:
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 df.col_name_1.values
auf ein NumPy-Array der Spaltenwerte zugreifen können.
Ich hatte Probleme mit der Verwendung von Pandas default plotting für eine Spalte mit Zeitstempelwerten mit Millisekunden-Genauigkeit. Bei dem Versuch, die Objekte in den Typ datetime64
Zu konvertieren, habe ich ebenfalls festgestellt ein unangenehmes Problem: < Pandas gibt ein falsches Ergebnis aus, wenn gefragt wird, ob die Werte der Timestamp-Spalte einen attr-Astyp haben >.
Pandas
verwendet matplotlib
als Bibliothek für Grundzeichnungen. 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')
Ich würde jedoch empfehlen, seaborn
als alternative Lösung zu verwenden, wenn Sie individuellere Darstellungen wünschen, ohne die Grundstufe von 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)