Matplotlib เชื่อมต่อจุด scatterplot ด้วย line - Python


104

ฉันมีสองรายการวันที่และค่าต่างๆ ฉันต้องการพล็อตโดยใช้ matplotlib ต่อไปนี้สร้างพล็อตกระจายข้อมูลของฉัน

import matplotlib.pyplot as plt

plt.scatter(dates,values)
plt.show()

plt.plot(dates, values) สร้างกราฟเส้น

แต่สิ่งที่ฉันต้องการจริงๆคือ scatterplot ที่จุดเชื่อมต่อกันด้วยเส้น

คล้ายกับใน R:

plot(dates, values)
lines(dates, value, type="l")

ซึ่งทำให้ฉันมีจุดที่กระจัดกระจายซ้อนทับกับเส้นที่เชื่อมต่อกับจุดนั้น

ฉันจะทำสิ่งนี้ใน python ได้อย่างไร


5
โทรshow()ตามทั้งโทรscatter()และplot()ครั้งแรก?

คำตอบ:


139

ฉันคิดว่า @Evert มีคำตอบที่ถูกต้อง:

plt.scatter(dates,values)
plt.plot(dates, values)
plt.show()

ซึ่งค่อนข้างเหมือนกับ

plt.plot(dates, values, '-o')
plt.show()

หรืออะไรก็ตามlinestyleคุณต้องการ


3
'linestyle' เป็นเบาะแสการค้นหาคำหลักที่ดีสำหรับฉันในการกำหนดเส้นทางผ่านเอกสาร matplotlib (gynormous)
Reb.Cabin

2
@aaronsnoswell ขนาดและสีเหมาะสมกับประเด็นเท่านั้นซึ่งคุณยังสามารถพล็อตผ่านscatterตามตัวอย่างแรกของฉัน คำถามไม่ได้พูดอะไรเกี่ยวกับความหนาของเส้นหรือสีที่แตกต่างกันดังนั้นฉันคิดว่าคำวิจารณ์ของคุณไม่ยุติธรรมเลยจริงๆ
Hannes Ovrén

29

สำหรับเส้นสีแดงจุด

plt.plot(dates, values, '.r-') 

หรือสำหรับเครื่องหมาย x และเส้นสีน้ำเงิน

plt.plot(dates, values, 'xb-')

ดูเหมือนว่าคุณ Evert และ kigurai จะไม่เป็นไร คุณสามารถเรียกทั้ง scatter () และ plot () ก่อนที่จะเรียก show () หรือเรียกเพียงแค่ plot () ด้วย line and point attributes ตามที่ Steve Barnes อธิบายไว้ ขอบคุณ
brno792

15

นอกเหนือจากสิ่งที่ระบุไว้ในคำตอบอื่น ๆ คำหลัก "zorder" ยังช่วยให้สามารถตัดสินใจลำดับที่จะลงจุดวัตถุต่างๆในแนวตั้ง เช่น:

plt.plot(x,y,zorder=1) 
plt.scatter(x,y,zorder=2)

แปลงสัญลักษณ์กระจายที่ด้านบนของบรรทัดในขณะที่

plt.plot(x,y,zorder=2)
plt.scatter(x,y,zorder=1)

วางเส้นไว้เหนือสัญลักษณ์กระจาย

ดูเช่นการสาธิต zorder

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