Python仅允许点图或散点图:在循环中绘制特征值

时间:2019-05-22 16:11:16

标签: python python-3.x matplotlib eigenvalue

我有以下简单代码:

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 :(得分:0)

将绘图移动到发生计算的循环之外。为了绘制连接的线,绘图函数需要一个值数组。

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')

您所有的绘图样式现在都可以使用。