在函数内部的同一图上绘制多条曲线

plot multiple curves on same plot inside function

我有一个带有 2 个参数 psi,lam 和 returns 1 数组 y.

的函数
lam=np.arange(0,1,0.1)
psi=np.deg2rad(np.arange(0,361,1))

def test(psi,lam):

    y=[]
    
    for i in range(len(lam)):
        sin_psi  = np.sin(psi)
        cos_psi  = np.cos(psi)
        sin_beta = lam*sin_psi
        cos_beta = np.sqrt(1.0 - sin_beta**2)
        ssin_pb  = sin_psi*sin_beta
        y.append((lam*(cos_psi/cos_beta)**2 - ssin_pb)/cos_beta + cos_psi)
        plt.plot(psi,y[i])
    
return y

我想要函数 return range(len(lam))=10 在垂直轴上绘制 y 与在 x 轴上绘制 psi

但是,它似乎只是多次绘制同一条曲线。不确定我错过了什么?

import matplotlib.pyplot as plt
import numpy as np

lam=np.arange(0,1,0.1)
psi=np.deg2rad(np.arange(0,361,1))

def test(angle,var):
    sin_psi  = np.sin(psi)
    cos_psi  = np.cos(psi)
    sin_beta = var*sin_psi
    cos_beta = np.sqrt(1.0 - sin_beta**2)
    ssin_pb  = sin_psi*sin_beta
    return ((var*(cos_psi/cos_beta)**2 - ssin_pb)/cos_beta + cos_psi)

for i in lam:
    plt.plot(psi,test(psi,i))
plt.show()

我把变量移到了函数之外,这样你也可以在其他情况下使用它。唯一的另一件事是你应该在完成绘图后调用 plt.show()

您的代码有几个问题,主要是 return 函数在循环内,在第一次迭代后中断它。尽可能模仿您的代码结构,我们可以将代码重写为:

import numpy as np
import matplotlib.pyplot as plt

def test(psi,lam):
    y=[]
    
    for curr_lam in lam:
        sin_psi  = np.sin(psi)
        cos_psi  = np.cos(psi)
        sin_beta = curr_lam*sin_psi
        cos_beta = np.sqrt(1.0 - sin_beta**2)
        ssin_pb  = sin_psi*sin_beta
        val = (curr_lam * (cos_psi/cos_beta)**2 - ssin_pb)/cos_beta + cos_psi
        y.append(val)
        plt.plot(psi, val)   
        
    plt.show()
    return y


lam=np.arange(0, 1, 0.1)
psi=np.deg2rad(np.arange(0,361,1))

y = test(psi, lam)
print(y)

示例输出:

正如 Johan 在评论中提到的,您还应该直接迭代 list/arrays。如果需要组合数组,使用

for x1, x2 in zip(arr1, arr2): 

如果您绝对需要索引值,请使用

for i, x in enumerate(arr):