2013-10-03 3 views
1

Я пытаюсь использовать то, что я узнал от plotting multiple plots but whith offset ranges python, но я не могу показаться, чтобы сделать соответствующие корректировки для моего Лежандра черчения кода:Python: построение нескольких графиков в одном окне

import numpy as np 
import pylab 
from numpy.polynomial.legendre import leggauss, legval 


def f(x): 
    if 0 <= x <= 1: 
     return 1 
    if -1 <= x <= 0: 
     return -1 


f = np.vectorize(f) 

deg = 1000 
x, w = leggauss(deg) # len(x) == deg 
L = np.polynomial.legendre.legval(x, np.identity(deg)) 
integral = (L * (f(x) * w)[None,:]).sum(axis=1) 
xx = np.linspace(-1, 1, 500000) 
csum = [] 


for N in [5, 15, 25, 51, 97]: 
    c = (np.arange(1, N) + 0.5) * integral[1:N] 
    clnsum = (c[:,None] * L[1:N,:]).sum(axis = 0) 
    csum.append(clnsum) 


fig = pylab.figure() 
ax = fig.add_subplot(111) 


for i in csum: 
    ax.plot(x, csum[i]) 


pylab.xlim((-1, 1)) 
pylab.ylim((-1.25, 1.25)) 
pylab.plot([0, 1], [1, 1], 'k') 
pylab.plot([-1, 0], [-1, -1], 'k') 
pylab.show() 

Я использую csum провести каждую итерацию clnsum для N = 5, 15, 25, 51, 97. Затем я хочу построить каждый сохраненный файл clnsum, но я считаю, что в этом проблема возникает.

Я считаю

for i in csum: 

является правильным набором вверх, но ax.plot(x, csum[i]) должен быть неправильным путем для построения каждой итерации. По крайней мере, это то, во что я верю, но, может быть, все настроено неправильно или ошибочно.

Как достичь графика каждого clnsum для каждого N?

ответ

2
for i in csum: 
    ax.plot(x, csum[i]) 

Это ваша проблема. i не является целым числом, это массив. Вы, наверное, имели в виду

for i in range(len(csum)): 

Вы также можете сделать

for y in csum: 
    ax.plot(x, y) 
+0

Большое спасибо. Является ли один из этих вариантов более эффективным быстрее? – dustin

+1

Последнее более «питоновое» и очень немного более эффективное (но это не имеет значения для числа, с которым вы имеете дело). –

Смежные вопросы