(x, y)座標のリストをプロットする 質問する

(x, y)座標のリストをプロットする 質問する

Python で実際の xy 座標として(a, b)プロットしたいペアのリストがあります。現在、2 つのプロットが作成されており、リストのインデックスが x 座標を示し、最初のプロットの y 値がペアの s で、2 番目のプロットの y 値がペアの s です。matplotlibab

明確にするために、私のデータは次のようになります。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 座標としてプロットするにはどうすればよいですか?


サンプルデータ

# sample data
li = list(zip(range(1, 14), range(14, 27)))

li → [(1, 14), (2, 15), (3, 16), (4, 17), (5, 18), (6, 19), (7, 20), (8, 21), (9, 22), (10, 23), (11, 24), (12, 25), (13, 26)]

間違ったプロット

plt.plot(li)
plt.title('Incorrect Plot:\nEach index of the tuple plotted as separate lines')

ここに画像の説明を入力してください

希望のプロット

これにより、正しいプロットが生成されますが、アンパックに使用されるコード行が多すぎますli。複数のリスト内包表記ではなく、1 行のコードでアンパックとプロットを行う必要があります。

xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)
plt.title('Correct Plot:\nBut uses to many lines to unpack li')

ここに画像の説明を入力してください

ベストアンサー1

li質問にある通り:

li = list(zip(range(1, 14), range(14, 27)))

ペアからリストにデータを解凍するには、zip:

x, y = zip(*li)

x → (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
y → (14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26)

ワンライナーはアンパック演算子 (*)、のタプルのリストをアンパックしzipzipオブジェクトをプロット API にアンパックします。

plt.scatter(*zip(*li))

ここに画像の説明を入力してください

plt.plot(*zip(*li))

ここに画像の説明を入力してください

おすすめ記事