webentwicklung-frage-antwort-db.com.de

Wie zeichnet man zwei Spalten eines pandas Datenrahmens mit Punkten?

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?.

78
Roman

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.

Output

93
sodd

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 >.

69
ely

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

enter image description here

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)

enter image description here

1
Dr. Arslan