Jak wykreślić dwie kolumny ramki danych pandy za pomocą punktów?

97

Mam ramkę danych pandy i chciałbym wykreślić wartości z jednej kolumny w porównaniu z wartościami z innej kolumny. Na szczęście istnieje plotmetoda związana z ramkami danych, która wydaje się robić to, czego potrzebuję:

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

Niestety wygląda na to, że wśród stylów działek (wymienionych tutaj po kindparametrze) nie ma punktów. Mogę używać linii lub słupków, a nawet gęstości, ale nie punktów. Czy istnieje obejście, które może pomóc w rozwiązaniu tego problemu?

rzymski
źródło

Odpowiedzi:

116

stylePodczas dzwonienia możesz określić kreśloną linię df.plot:

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

styleArgument może być również dictlub listnp:

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

Wszystkie akceptowane formaty stylów są wymienione w dokumentacji programu matplotlib.pyplot.plot.

Wynik

sodd
źródło
79

Do tego (i większości kreślenia) nie polegałbym na opakowaniach Pandas w matplotlib. Zamiast tego użyj bezpośrednio 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.

i pamiętaj, że możesz uzyskać dostęp do tablicy NumPy wartości kolumny za pomocą df.col_name_1.values na przykład.

Wpadłem w kłopoty, używając tego z domyślnym wykresem Pandas w przypadku kolumny wartości Timestamp z dokładnością do milisekund. Próbując przekonwertować obiekty na datetime64typ, odkryłem również nieprzyjemny problem: < Pandy podaje niepoprawny wynik, gdy pytasz, czy wartości kolumny Timestamp mają attr astype >.

ely
źródło
4

Pandasużywa matplotlibjako biblioteki dla podstawowych wykresów. W Twoim przypadku najłatwiej będzie skorzystać z:

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

wprowadź opis obrazu tutaj

Zalecałbym jednak użycie seabornalternatywnego rozwiązania, jeśli chcesz mieć bardziej spersonalizowane działki, nie wchodząc w podstawowy poziom matplotlib.W tym przypadku rozwiązanie będzie następujące:

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)

wprowadź opis obrazu tutaj

Dr Arslan
źródło