วิธีการลงจุดสองคอลัมน์ของกรอบข้อมูลแพนด้าโดยใช้จุด?


98

ฉันมีกรอบข้อมูลแพนด้าและต้องการพล็อตค่าจากคอลัมน์หนึ่งเทียบกับค่าจากคอลัมน์อื่น โชคดีที่มีplotวิธีการที่เกี่ยวข้องกับ data-frames ที่ดูเหมือนจะทำในสิ่งที่ฉันต้องการ:

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

น่าเสียดายที่ดูเหมือนว่าในรูปแบบพล็อต (แสดงรายการที่นี่หลังkindพารามิเตอร์) จะไม่มีคะแนน ฉันสามารถใช้เส้นหรือแท่งหรือแม้กระทั่งความหนาแน่น แต่ไม่ใช่จุด มีวิธีแก้ไขที่สามารถช่วยแก้ปัญหานี้ได้หรือไม่

คำตอบ:


119

คุณสามารถระบุ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ทุกรูปแบบสไตล์ที่ยอมรับมีการระบุไว้ในเอกสารประกอบของ

เอาต์พุต


79

สำหรับสิ่งนี้ (และการวางแผนส่วนใหญ่) ฉันจะไม่พึ่งพากระดาษห่อนุ่นเพื่อ 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 ในกรณีของคอลัมน์ของค่าเวลาประทับที่มีความแม่นยำระดับมิลลิวินาที ในการพยายามแปลงวัตถุเป็นdatetime64ประเภทฉันยังค้นพบปัญหาที่น่ารังเกียจ: < Pandas ให้ผลลัพธ์ที่ไม่ถูกต้องเมื่อถามว่าค่าคอลัมน์เวลาประทับมี Attr astype > หรือไม่


5

Pandasใช้matplotlibเป็นไลบรารีสำหรับแปลงพื้นฐาน วิธีที่ง่ายที่สุดในกรณีของคุณคือใช้สิ่งต่อไปนี้:

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

ป้อนคำอธิบายภาพที่นี่

อย่างไรก็ตามฉันขอแนะนำให้ใช้seabornเป็นทางเลือกอื่นในการแก้ปัญหาหากคุณต้องการมีพล็อตที่ปรับแต่งได้มากขึ้นในขณะที่ไม่เข้าสู่ระดับพื้นฐานของmatplotlib.ในกรณีนี้คุณจะแก้ไขปัญหาดังต่อไปนี้:

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)

ป้อนคำอธิบายภาพที่นี่


0

ตอนนี้ในแพนด้าล่าสุดคุณสามารถใช้ฟังก์ชัน df.plot.scatter ได้โดยตรง

df = pd.DataFrame([[5.1, 3.5, 0], [4.9, 3.0, 0], [7.0, 3.2, 1],
                   [6.4, 3.2, 1], [5.9, 3.0, 2]],
                  columns=['length', 'width', 'species'])
ax1 = df.plot.scatter(x='length',
                      y='width',
                      c='DarkBlue')

https://pandas.pydata.org/pandas-docs/version/0.23/generated/pandas.DataFrame.plot.scatter.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.