Bagaimana cara memplot dua kolom bingkai data panda menggunakan poin?

97

Saya memiliki bingkai data panda dan ingin memplot nilai dari satu kolom versus nilai dari kolom lain. Untungnya, ada plotmetode yang terkait dengan bingkai data yang tampaknya melakukan apa yang saya butuhkan:

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

Sayangnya, sepertinya di antara gaya plot (tercantum di sini setelah kindparameter) tidak ada titik. Saya dapat menggunakan garis atau batang atau bahkan kerapatan tetapi tidak titik. Adakah solusi yang bisa membantu untuk mengatasi masalah ini.

Roma
sumber

Jawaban:

115

Anda dapat menentukan stylegaris yang diplot saat memanggil df.plot:

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

The styleArgumen juga dapat menjadi dictatau list, misalnya:

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

Semua format gaya yang diterima tercantum dalam dokumentasi matplotlib.pyplot.plot.

Keluaran

sodd
sumber
78

Untuk ini (dan kebanyakan merencanakan) saya tidak akan bergantung pada bungkus Panda untuk matplotlib. Sebagai gantinya, cukup gunakan matplotlib secara langsung:

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.

dan ingat bahwa Anda dapat mengakses array NumPy dari nilai kolom dengan df.col_name_1.valuesmisalnya.

Saya mengalami masalah dalam menggunakan ini dengan default plotting Pandas dalam kasus kolom nilai Timestamp dengan presisi milidetik. Saat mencoba mengonversi objek menjadi datetime64tipe, saya juga menemukan masalah yang tidak menyenangkan: < Pandas memberikan hasil yang salah ketika menanyakan apakah nilai kolom Timestamp memiliki tipe attr >.

ely
sumber
3

Pandasdigunakan matplotlibsebagai perpustakaan untuk plot dasar. Cara termudah dalam kasus Anda adalah menggunakan yang berikut ini:

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

masukkan deskripsi gambar di sini

Namun, saya akan merekomendasikan untuk menggunakan seabornsebagai solusi alternatif jika Anda ingin memiliki plot yang lebih disesuaikan sementara tidak masuk ke tingkat dasar. matplotlib.Dalam hal ini Anda solusinya adalah sebagai berikut:

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)

masukkan deskripsi gambar di sini

Dr Arslan
sumber