You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib绘制y=1/x图像时去除渐近线?

解决Matplotlib绘制y=1/x时的虚假渐近线问题

当你用np.linspace(-5,5,1000)生成x值时,图像里出现的“渐近线”其实是Matplotlib把x趋近于0负方向的点和x趋近于0正方向的点直接连起来了——毕竟这两个点对应的y值一个趋向负无穷、一个趋向正无穷,连线就会穿过整个画布,看起来像渐近线。

解决这个问题有两种简单的思路:

方法1:拆分x轴区间分别绘图

把x轴分成两部分:小于0的区域(避开0附近)和大于0的区域(避开0附近),分别计算y值后再绘图,这样就不会出现跨0的错误连线。

示例代码:

import numpy as np
import matplotlib.pyplot as plt

# 拆分x区间,避开0附近的小范围
x_neg = np.linspace(-5, -0.01, 500)  # 左半部分:-5到-0.01,500个点
x_pos = np.linspace(0.01, 5, 500)   # 右半部分:0.01到5,500个点

y_neg = 1 / x_neg
y_pos = 1 / x_pos

plt.figure(figsize=(8, 6))
plt.plot(x_neg, y_neg, 'b-', label='y=1/x')
plt.plot(x_pos, y_pos, 'b-')  # 用同一种样式,看起来是连续的曲线
plt.axvline(x=0, color='r', linestyle='--', label='x=0(渐近线)')  # 手动画真正的渐近线
plt.ylim(-10, 10)  # 限制y轴范围,避免极端值撑大画布
plt.xlabel('x')
plt.ylabel('y')
plt.title('y=1/x 的图像')
plt.legend()
plt.grid(True)
plt.show()

方法2:过滤掉0附近的点

用布尔掩码过滤掉x绝对值小于某个极小值(比如0.01)的点,只保留远离0的x值来绘图。

示例代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-5, 5, 1000)
# 过滤掉x绝对值小于0.01的点,避免接近0的极端y值
mask = np.abs(x) > 0.01
x_filtered = x[mask]
y_filtered = 1 / x_filtered

plt.figure(figsize=(8, 6))
plt.plot(x_filtered, y_filtered, 'b-', label='y=1/x')
plt.axvline(x=0, color='r', linestyle='--', label='x=0(渐近线)')
plt.ylim(-10, 10)
plt.xlabel('x')
plt.ylabel('y')
plt.title('y=1/x 的图像')
plt.legend()
plt.grid(True)
plt.show()

注意事项

  • 为什么不用x != 0过滤?因为np.linspace(-5,5,1000)生成的点大概率不会刚好等于0,但会有非常接近0的点(比如0.005左右),这些点的y值会非常大,依然会导致连线异常,所以需要设置一个极小的阈值(比如0.01)来避开0附近的区域。
  • 手动添加plt.axvline(x=0)可以画出真正的渐近线,让图像更清晰。

内容的提问来源于stack exchange,提问作者changsoo Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:52:40