在函数内部的同一图上绘制多条曲线
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):
我有一个带有 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):