2017-10-30 7 views
0

ラベルから配列から複数の関数をプロットしようとしています。関数とラベルを持つループプロットのためのpython matplotlib

私はここからいくつかの助けを見つけました:https://stackoverflow.com/a/11493343/4055341そして以下に見られるようにコードを修正しようとしました。しかし、私はこれでエラーが発生します。私が得るエラーはValueErrorですが、どうすれば同じサイズにすることができますか?

import numpy as np 
import matplotlib.pyplot as plt 


x = np.linspace(0, 10, 100) 

y = [[5*x], [1*x], [2*x]] 

labels = ['foo', 'bar', 'baz'] 

for y_arr, label in zip(y, labels): 
    plt.plot(x, y_arr, label=label) 

plt.legend() 
plt.show() 
+2

または、yの定義でxの乗算の前後に角括弧を削除してください – MegaIng

答えて

1

​​でy = [[5*x], [1*x], [2*x]]を交換すると、あなたの問題を解決するために十分でなければなりません。

推論:あなたはx = np.linspace(0, 10, 100)をしたとき

xx = [0, 0.1010, 0.2020, 0.3030, ..., 9.7979, 9.8989, 10]に似てnumpyの配列となりました。スカラーでxを乗算すると、5*x = [0, 0.505, 1.01, 1.515, ..., 48.989, 49.494, 50]のような同じサイズの新しいNumpy配列が生成されます。したがって、​​は、各要素が適切なNumpy配列であるリストになります。

視覚的に、それはこのようなものです:乗算から生じるnumpyの配列:一方

y = [ 
    [0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10], 
    [0, 0.505, 1.01, 1.515, 48.9895, 49.4945, 50], 
    [0, 0.202, 0.404, 0.606, 19.5958, 19.7978, 20] 
] 

y = [[5*x], [1*x], [2*x]] 3つのリスト、単一のオブジェクトを含む各を含むリストです。

y = [ 
    [ 
     [0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10] 
    ], 
    [ 
     [0, 0.505, 1.01, 1.515, 48.9895, 49.4945, 50] 
    ], 
    [ 
     [0, 0.202, 0.404, 0.606, 19.5958, 19.7978, 20] 
    ] 
] 

理由plot休憩です:これは結果である、それは代わりに、y_arrは、例えば[[0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10]]に割り当てられている、x限り、配列を期待していたが:リストであることを起こる1つのオブジェクトのみ(とナンシーアレイ)。

+1

ありがとうございました。 – KaZyKa

関連する問題