python matplotlibで(x、y)座標のリストをプロットする


109

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

明確にするために、私のデータは次のようになっています。間違ったものを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
2列のnumpy配列の場合、plt.scatter( * xy.T )機能します:短くて不明瞭x, y = xy.T; plt.scatter( x, y )
denis

2
x, y = zip(*li)本当にエレガントなpythonコードです!私は(元の質問のように)各行をリスト圧縮してより単純な2行のコードを実行しています
Trevor Boyd Smith

1
これは、ランダムなplt.scatter例が質問とどう関係するかを混乱させるようなものです。
jamesdlin

36

numpy配列がある場合は、これを行うことができます:

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.arraydata=np.array([[x1,y1],[x2,y2],etc.])を使用する方法はありませんplt.plot(data)。配列の配列ではなく、常に2つの配列を指定する必要がありますか?
Max Coplan 2018

1
@MaxCoplan、そうですがplt.plot(*data.T)、上記と同じように使用できますが、中間のステップをスキップします。
Zweedeend

6

リストのすべてのポイントを結ぶ単一の線をプロットしたい場合

plt . plot ( li [ : ] )

plt . show ( )

これにより、リストのすべてのペアを結ぶ線が、リストの最初から最後までのデカルト平面上の点としてプロットされます。これがあなたの望んだものであることを願っています。


3
彼は単一の行をプロットするのではなく、「ワンライナー」(コードの単一行)でプロットしたかったのです。彼が探していた(そして3年前に得た)答えは、を使用することscatter()でした。
ダートマス

7
この回答はそれが機能する条件、つまり「リスト内のすべてのポイントを接続する単一の線をプロットしたい場合」を示しているので、本当に反対票を投じる価値がありますか?
ガチド2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.