Làm cách nào để vẽ hai cột của khung dữ liệu gấu trúc bằng cách sử dụng các điểm?


96

Tôi có một khung dữ liệu gấu trúc và muốn vẽ các giá trị từ một cột so với các giá trị từ cột khác. May mắn thay, có một plotphương pháp được liên kết với các khung dữ liệu dường như làm những gì tôi cần:

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

Thật không may, có vẻ như trong số các kiểu cốt truyện (được liệt kê ở đây sau kindtham số) không có điểm nào. Tôi có thể sử dụng các đường hoặc thanh hoặc thậm chí mật độ nhưng không sử dụng điểm. Có một công việc xung quanh có thể giúp giải quyết vấn đề này.

Câu trả lời:


115

Bạn có thể chỉ định styleđường biểu diễn khi gọi df.plot:

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

Đối stylesố cũng có thể là dicthoặc list, ví dụ:

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

Tất cả các định dạng kiểu được chấp nhận được liệt kê trong tài liệu của matplotlib.pyplot.plot.

Đầu ra


78

Đối với điều này (và hầu hết các âm mưu), tôi sẽ không dựa vào các trình bao bọc Pandas để matplotlib. Thay vào đó, chỉ cần sử dụng matplotlib trực tiếp:

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.

và hãy nhớ rằng bạn có thể truy cập một mảng NumPy với các giá trị của cột df.col_name_1.valueschẳng hạn.

Tôi đã gặp sự cố khi sử dụng điều này với biểu đồ mặc định của Pandas trong trường hợp cột giá trị Dấu thời gian có độ chính xác mili giây. Khi cố gắng chuyển đổi các đối tượng sang datetime64kiểu gõ, tôi cũng phát hiện ra một vấn đề khó chịu: < Pandas cho kết quả không chính xác khi hỏi liệu các giá trị cột Dấu thời gian có attr astype hay không >.


3

Pandassử dụng matplotlibnhư một thư viện cho các lô cơ bản. Cách dễ nhất trong trường hợp của bạn sẽ sử dụng như sau:

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

nhập mô tả hình ảnh ở đây

Tuy nhiên, tôi khuyên bạn nên sử dụng seabornnhư một giải pháp thay thế nếu bạn muốn có nhiều ô tùy chỉnh hơn trong khi không đi sâu vào cấp độ cơ bản của matplotlib.Trong trường hợp này, giải pháp sẽ như sau:

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)

nhập mô tả hình ảnh ở đây


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.