为什么当用 semilogx 函数绘制多条线时只有一条线变为零 python

Why only one line goes to zero when several lines are plotted with semilogx function python

我正在尝试在 "semilogx fuction" by python 的一个图中绘制几条对数线。但是,只有一根线变为零,而其他线并没有完全变为零,即使它们应该变为零。 代码是:

ustar1 = 0.15
z0=0.0002
z1 = 0.05
z2 = 0.25
z3 = 0.5
z4 = 5.0
k = 0.4

zp1 = np.arange(0.00,300,0.01)
M1 = (ustar1/k)*np.log(zp1/z0)
M2 = (ustar1/k)*(np.log(zp1/z1))
M3 = (ustar1/k)*(np.log(zp1/z2))
M4 = (ustar1/k)*np.log(zp1/z3)
M5 = (ustar1/k)*(np.log(zp1/z4))
plt.semilogx(M1,zp1,'k',label='z0=0.0002')
plt.semilogx(M2,zp1,'b',label='z0=0.05')
plt.semilogx(M3,zp1,'g',label='z0=0.25')
plt.semilogx(M4,zp1,'m',label='z0=0.5')
plt.semilogx(M5,zp1,'r',label='z0=5.0')

如上所示,当 zp1 等于 z0 到 z4 时,M1 到 M5 应该归零,当我打印它们时,它确实如此。然而,当我绘制它时,只有 M5 变为零,其他没有。 当我删除 M5 的绘图时,M4 的绘图变为零,而其他绘图则没有,当删除 M5 和 M4 时,M3 做了同样的事情。

我不确定为什么会发生这种事情。是因为 semilogx 函数本身吗? 任何帮助或建议将不胜感激。 谢谢, 艾萨克

zp1 = np.arange(0.00, 300, 0.01)
M1 = (ustar1/k)*np.log(zp1/z0)

你知道你正在拿日志(0)吗? zp1[0]是0.0,所以它的对数是无穷大的。

如果将范围更改为 np.arange(0.01, 300, 0.01) 可避免该问题。

关于'going through 0':这条曲线什么时候过0?我认为有些混乱

  • 您正在 X 轴上绘制结果 (M1...)。是这个主意吗? y值就是你定义的z0..z4,都是正数

  • 如果交换 x, y (Mx, zx) 你会得到: