web-dev-qa-db-ja.com

matplotlib.pyplot [[x1、y1]、[x2、y2]]を使用してポイントを描画します

XとYの1つの2つのリストを使用する代わりに、(x,y)ペアのリストを使用してグラフを描画します。このようなもの:

a = [[1,2],[3,3],[4,4],[5,2]]
plt.plot(a, 'ro')

のではなく:

plt.plot([1,3,4,5], [2,3,4,2])

提案?

37
ariel

次のようなことができます:

a=[[1,2],[3,3],[4,4],[5,2]]
plt.plot(*Zip(*a))

残念ながら、「ro」を渡すことはできません。マーカーとラインスタイルの値をキーワードパラメーターとして渡す必要があります。

a=[[1,2],[3,3],[4,4],[5,2]]
plt.plot(*Zip(*a), marker='o', color='r', ls='')

私が使用したトリックは、 引数リストの展開 です。

57
Christian Alis

Numpy配列を使用している場合、軸ごとに抽出できます。

a = array([[1,2],[3,3],[4,4],[5,2]])
plot(a[:,0], a[:,1], 'ro')

リストまたはリストの場合、次のようなヘルパーが必要です。

a = [[1,2],[3,3],[4,4],[5,2]]
plot(*sum(a, []), marker='o', color='r')
10
pprzemek

リスト内包表記

リスト内包表記のリベラルな適用を強くお勧めします。簡潔で強力なだけでなく、コードを非常に読みやすくする傾向があります。

次のようなものを試してください:

list_of_lists = [[1,2],[3,3],[4,4],[5,2]]    
x_list = [x for [x, y] in list_of_lists]
y_list = [y for [x, y] in list_of_lists]

plt.plot(x_list, y_list)

引数のアンパックは避けてください。いです。

9
Moradology

ヘルパー関数を作成します。

ここに長いバージョンがありますが、それを圧縮するトリックがあると確信しています。

>>> def helper(lst):
    lst1, lst2 = [], []
    for el in lst:
        lst1.append(el[0])
        lst2.append(el[1])
    return lst1, lst2

>>> 
>>> helper([[1,2],[3,4],[5,6]])
([1, 3, 5], [2, 4, 6])
>>> 

また、このヘルパーを追加します。

def myplot(func, lst, flag):
    return func(helper(lst), flag)

そして次のように呼び出します:

myplot(plt.plot, [[1,2],[3,4],[5,6]], 'ro')

または、すでにインスタンス化されているオブジェクトに関数を追加することもできます。

1
Hamish Grubijan