การพล็อตรายการพิกัด (x, y) ใน python matplotlib


110

ฉันมีรายชื่อคู่(a, b)ที่ฉันต้องการพล็อตด้วยmatplotlibpython เป็นพิกัด xy จริง ขณะนี้กำลังสร้างสองพล็อตโดยที่ดัชนีของรายการให้พิกัด x และค่า y ของพล็อตแรกคือas ในคู่และค่า y ของพล็อตที่สองคือbs ในคู่

เพื่อชี้แจงข้อมูลของฉันมีลักษณะดังนี้: li = [(a,b), (c,d), ... , (t, u)] ฉันต้องการทำซับเดียวที่เรียกplt.plot()ไม่ถูกต้อง หากฉันไม่ต้องการซับเดียวฉันสามารถทำได้เล็กน้อย:

xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)

ฉันจะให้ matplotlib พล็อตคู่เหล่านี้เป็นพิกัด xy ได้อย่างไร

คำตอบ:


180

ตามตัวอย่างนี้ :

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

plt.scatter(x, y)
plt.show()

จะผลิต:

ใส่คำอธิบายภาพที่นี่

ในการแยกข้อมูลของคุณจากคู่เป็นรายการให้ใช้zip:

x, y = zip(*li)

ดังนั้นหนึ่งซับ:

plt.scatter(*zip(*li))

7
สำหรับอาร์เรย์ numpy 2 คอลัมน์ใช้plt.scatter( * xy.T )งานได้: สั้นและคลุมเครือสำหรับx, y = xy.T; plt.scatter( x, y )
denis

2
x, y = zip(*li)เป็นรหัสหลามที่สง่างามจริงๆ! ฉันทำโค้ดสองบรรทัดตรงไปตรงมามากขึ้นพร้อมกับการบีบอัดรายการในแต่ละบรรทัด (เหมือนคำถามเดิม)
Trevor Boyd Smith

1
เป็นเรื่องที่น่าสับสนว่าplt.scatterตัวอย่างสุ่มเกี่ยวข้องกับคำถามอย่างไร
jamesdlin

37

หากคุณมีอาร์เรย์จำนวนนับคุณสามารถทำได้:

import numpy as np
from matplotlib import pyplot as plt

data = np.array([
    [1, 2],
    [2, 3],
    [3, 6],
])
x, y = data.T
plt.scatter(x,y)
plt.show()

1
ดังนั้นไม่มีทางที่จะมีไม่มีnp.arrayของและการใช้data=np.array([[x1,y1],[x2,y2],etc.]) plt.plot(data)ฉันจะต้องให้อาร์เรย์สองอาร์เรย์แทนอาร์เรย์ของอาร์เรย์เสมอ?
Max Coplan

1
@MaxCoplan ถูกต้อง แต่คุณสามารถใช้plt.plot(*data.T)สิ่งที่ทำเช่นเดียวกับด้านบน แต่ข้ามขั้นตอนกลาง
Zweedeend

7

หากคุณต้องการพล็อตบรรทัดเดียวที่เชื่อมต่อจุดทั้งหมดในรายการ

plt . plot ( li [ : ] )

plt . show ( )

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


3
เขาไม่ต้องการพล็อตบรรทัดเดียวเขาต้องการพล็อตด้วย "ซับเดียว" (โค้ดบรรทัดเดียว) คำตอบที่เขากำลังมองหา (และมีระยะเวลา 3 ปีที่ผ่านมา) scatter()คือการใช้งาน
Dartmouth

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