Python простой линейный график - PullRequest
1 голос
/ 25 марта 2012

Итак, я пытаюсь построить 2 разных массива одинаковых размеров, используя python matplotlib. Это код, который у меня сейчас есть:

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 и yaxis kbararray (которая является просто массивом того же значения, рассчитанного в цикле). Я попытался использовать этот бит matplotlib, который работал в прошлом для моих других графиков:

plot(x,kbararray)

Но я продолжаю получать это сообщение об ошибке:

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 массива разных измерений, но я уверен, что мои имеют одинаковое измерение, верно? Так почему я получаю эту ошибку? Извините, если это основной вопрос / ответ в другом месте, но я не смог ничего найти. Спасибо.

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Вы можете проверить, что они имеют одинаковую форму, напечатав формы x и kbararray во время выполнения. Прямо перед тем, как позвонить plot, добавьте следующие строки:

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

Если формы разные, у вас есть проблема, и вам следует проверить, что вы на самом деле наносите на график то, что, как вы думаете, вычерчиваете.

0 голосов
/ 26 марта 2012

Проблема в этой строке:

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

Вы видите, вы объявляете kbararray как имеющую форму (1, 45), которая не совпадает с формой x, которая имеет форму (,45). Если вы хотите, чтобы kbararray имел ту же форму, что и x, вы можете использовать:

kbararray=ones_like(x)*kbar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...