В Python разрешена только точечная или точечная диаграмма: построение собственных значений в цикле - PullRequest
0 голосов
/ 22 мая 2019

У меня есть следующий простой код:

import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg 


for i in range(10):

        M=np.array([[i**2,0],[0,i**3]]) # 2 x 2 matrix
        eval,evec=np.linalg.eig(M)

        # Plotting first and second eigenvalues
        # Style 1
        plt.plot(i,eval[0])
        plt.plot(i,eval[1])
                         # Doesn't work
        # Style 2
        plt.plot(i,eval[0], '-r')
        plt.plot(i,eval[1], '-b')
                         # Doesn't work

        # Style 3
        plt.plot(i,eval[0], 'ro-')
        plt.plot(i,eval[1], 'bs')
                        # Does work

plt.xlabel('x')
plt.ylabel('y')
plt.savefig('plot.png')
plt.show()

При построении графиков с тремя разными стилями успешно работает только третий стиль (то есть точечные или точечные).Следовательно, у меня очень ограниченные возможности настройки.Есть ли выход?

Кроме того, можно ли сохранить эти три графика с разными стилями в трех разных файлах, не создавая отдельно три цикла for?

Выход прилагается ниже.enter image description here

1 Ответ

0 голосов
/ 22 мая 2019

Переместить построение за пределы цикла, где происходит вычисление. Для построения связанных линий функция plot ожидает массив значений.

import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg 

yvals=[]
for i in range(10):

    M=np.array([[i**2,0],[0,i**3]]) # 2 x 2 matrix
    eval_,evec=np.linalg.eig(M)
    yvals.append(eval_)

yvals=np.array(yvals)
xvals=np.array(range(10))
plt.plot(xvals,yvals[:,0],'-r')
plt.plot(xvals,yvals[:,1],'-b')

Все ваши стили печати теперь должны работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...