Python matplotlib'de (x, y) koordinatlarının bir listesini çizme


110

Python'da gerçek xy koordinatları olarak (a, b)çizmek istediğim çiftlerin bir listesi var matplotlib. Şu anda, listenin indisinin x koordinatını verdiği ve ilk grafiğin y değerlerinin açiftlerdeki s ve ikinci grafiğin y değerlerinin çiftlerdeki s olduğu iki grafik yapıyor b.

Açıklığa kavuşturmak gerekirse, verilerim şuna benziyor: li = [(a,b), (c,d), ... , (t, u)] Sadece plt.plot()yanlış çağıran bir tek satırlık yapmak istiyorum . Tek astara ihtiyacım olmasaydı, önemsiz bir şekilde şunları yapabilirdim:

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

Matplotlib'in bu çiftleri xy koordinatları olarak çizmesini nasıl sağlayabilirim?

Yanıtlar:


180

Gereğince bu örnekte :

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

üretecek:

görüntü açıklamasını buraya girin

Verilerinizi çiftlerden listelere açmak için şunu kullanın zip:

x, y = zip(*li)

Yani, tek satırlık:

plt.scatter(*zip(*li))

7
2 sütunlu bir uyuşuk dizi için plt.scatter( * xy.T )çalışır: kısa ve belirsizx, y = xy.T; plt.scatter( x, y )
denis

2
x, y = zip(*li)gerçekten zarif bir python kodudur! Her satırda bir liste sıkıştırması ile daha düz iki satırlık kod yapıyorum (orijinal soru gibi)
Trevor Boyd Smith

1
Rastgele plt.scatterörneğin soruyla ne ilgisi var biraz kafa karıştırıcı .
jamesdlin

37

Eğer uyuşmuş bir diziniz varsa, bunu yapabilirsiniz:

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
Yani bir için hiçbir yol yoktur np.arrayait data=np.array([[x1,y1],[x2,y2],etc.])ve kullanma plt.plot(data). Diziler yerine her zaman iki dizi vermem gerekecek mi?
Max Coplan

1
@MaxCoplan, doğru, ancak plt.plot(*data.T)yukarıdakinin aynısını yapan ancak ara adımı atlayan kullanabilirsiniz .
Zweedeend

7

Listedeki tüm noktaları birleştiren tek bir çizgi çizmek istiyorsanız

plt . plot ( li [ : ] )

plt . show ( )

Bu, listedeki tüm çiftleri, listenin başından sonuna kadar Kartezyen düzlemde noktalar olarak birleştiren bir çizgi çizecektir. Umarım istediğin budur.


3
Tek bir satır çizmek istemedi, "tek satırlı" (tek satırlı bir kod) çizim yapmak istedi. Aradığı (ve 3 yıl önce aldığı) cevap kullanmaktı scatter().
Dartmouth

8
Bu yanıt, çalıştığı koşulu belirttiğine göre, yani "Listedeki tüm noktaları birleştiren tek bir çizgi çizmek istiyorsanız", gerçekten olumsuz bir oylamayı hak ediyor mu?
Gathide
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.