it-swarm.dev

كيفية رسم عمودين من إطار بيانات الباندا باستخدام النقاط؟

لدي إطار بيانات الباندا وأرغب في رسم القيم من عمود مقابل القيم من عمود آخر. لحسن الحظ ، هناك طريقة plot مرتبطة بإطارات البيانات التي يبدو أنها تفعل ما أحتاج إليه:

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

لسوء الحظ ، يبدو من بين أنماط المخططات (المدرجة هنا بعد المعلمة kind) لا توجد نقاط. يمكنني استخدام خطوط أو أشرطة أو حتى الكثافة ولكن ليس نقاط. هل هناك حل يمكن أن يساعد في حل هذه المشكلة.

69
Roman

يمكنك تحديد style للخط المرسوم عند الاتصال df.plot :

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

يمكن أن تكون الوسيطة style أيضًا dict أو list ، على سبيل المثال:

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

يتم سرد جميع تنسيقات الأنماط المقبولة في وثائق matplotlib.pyplot.plot .

Output

84
hooy

لهذا (والأكثر من التآمر) لن أعتمد على أغلفة Pandas إلى matplotlib. بدلاً من ذلك ، ما عليك سوى استخدام 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.

وتذكر أنه يمكنك الوصول إلى صفيف NumPy من قيم العمود باستخدام df.col_name_1.values على سبيل المثال.

واجهت مشكلة في استخدام هذا مع تخطيط Pandas الافتراضي في حالة عمود قيم Timestamp بدقة ميلي ثانية واحدة. في محاولة تحويل الكائنات إلى نوع datetime64 ، اكتشفت أيضًا مشكلة سيئة: < يعطي Pandas نتيجة غير صحيحة عند السؤال عما إذا كانت قيم عمود الطابع الزمني تحتوي على attr astype >.

66
ely