2012-03-25 19 views
1

私はpythonのmatplotlibを使って同じ次元の2つの異なる配列をプロットしようとしています。これは私が現在持っているコードです:Pythonの単純な線形プロット

from numpy import * 
from pylab import * 
import matplotlib.pyplot as plt 
p, pdot, s400, dist=loadtxt("cc45list.txt", usecols=(1,2,3,4), unpack=True) 
for i in arange(0,45,1): 
k = (s400*(dist**2))/((p**1)*(pdot**0.5)) 
kbar=sum(k) 
var=abs(k-kbar) 
x=((p**1)*(pdot**0.5)) 
y=s400*(dist**2) 

kbararray=ones((1,45))*kbar 

私はx軸がxさとY軸は(ループで計算した値と同じだけの配列である)kbararrayされたシンプルなラインをプロットしようとしています。

plot(x,kbararray) 

しかし、私はこのエラーメッセージrecieveing終わる保つ:私は私の他のプロットのために、過去に働いているmatplotlibのこのビットを使用してみました、私はこのエラーを調査したものから

Traceback (most recent call last): 
File "C:\PortablePython_1.1_py2.6.1\App\April_2010\graphing lines.py", line 3, in <module> 
plot (range(0,11),[9,4,5,2,3,5,7,12,2,3],'.-',label='sample1') 
File "C:\PortablePython_1.1_py2.6.1\App\Lib\site-packages\matplotlib\pyplot.py", line 2141, in plot 
ret = ax.plot(*args, **kwargs) 
File "C:\PortablePython_1.1_py2.6.1\App\Lib\site-packages\matplotlib\axes.py", line 3432, in plot 
for line in self._get_lines(*args, **kwargs): 
File "C:\PortablePython_1.1_py2.6.1\App\Lib\site-packages\matplotlib\axes.py", line 311, in _grab_next_args 
for seg in self._plot_args(remaining, kwargs): 
File "C:\PortablePython_1.1_py2.6.1\App\Lib\site-packages\matplotlib\axes.py", line 288, in _plot_args 
x, y = self._xy_from_xy(x, y) 
File "C:\PortablePython_1.1_py2.6.1\App\Lib\site-packages\matplotlib\axes.py", line 228, in _xy_from_xy 
raise ValueError("x and y must have same first dimension") 
ValueError: x and y must have same first dimension 

を異なる次元の2つの配列をプロットしようとすると通常は表示されますが、私は同じ次元のものであると確信しています。では、なぜこのエラーが発生するのでしょうか?申し訳ありませんが、これは基本的な質問/他の場所では答えたが、私は何かを見つけることができませんでした。ありがとう。

+0

なぜ '(P ** 1)' ..また、なぜループ内で同じ値を計算しますか?一度計算してください。また、 'len(x)'と 'len(kbarray)'を出力することで、 'x'と' 'kbarray'の大きさを調べることができます。これは問題を把握するのに役立ちます。 –

答えて

0

問題は、この行である:あなたは、あなたが(,45)を形作るありx配列、同じ形状ではない形状(1, 45)を有するものとしてkbararrayを宣言している参照

kbararray=ones((1,45))*kbar 

。あなたはkbararrayxと同じ形状を持つようにしたい場合は 、使用することができます:

kbararray=ones_like(x)*kbar 
1

xkbararrayの形を実行時に印刷することで、それらが同じ形であることを確認できます。あなたがplotを呼び出す直前に、これらの行を追加します。

print 'Shape of x:', x.shape 
print 'Shape of kbararray:', kbararray.shape 

形状が異なっている場合、あなたは問題があると、あなたが実際にあなたがプロットしていると思うものをプロットしていることを確認する必要があります。

関連する問題