Python绘制指数图异常:扩大x范围后曲线非指数形态的原因
问题:Python绘制指数曲线在x范围(0,30)时形态异常
我尝试在Python中绘制简单的指数曲线,使用以下代码时,当x范围设为(0,20),指数曲线显示正常:
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import numpy as np def graph(func, x_range): x = np.arange(*x_range) y = func(x) plt.plot(x, y) graph(lambda x: pow(3,x), (0,20)) plt.savefig("mygraph.png")
但将x范围改为(0,30)后,绘制出的曲线完全不呈指数形态,附图如下:
请问出现该现象的原因是什么?
原因分析
核心问题出在np.arange(*x_range)的使用上:
- 当传入
(0,30)时,np.arange(0,30)生成的是整数序列[0,1,2,...,29],仅30个采样点 - 指数函数
3^x增长极快,x=29时3^29的值约为6.86e13,而x较小时的数值(比如x=10时仅59049)和这个量级相比几乎可以忽略 - Matplotlib绘图时会自动将y轴范围适配到最大的y值,导致x较小时的曲线被压缩到几乎和x轴重合,视觉上呈现出"跳变"的折线,完全失去了指数曲线的形态
补充两个验证/优化方向:
- 切换为对数y轴:添加
plt.yscale('log'),可以清晰看到整个区间的指数增长趋势 - 提升采样密度:若想保留线性y轴,可改用
np.linspace(0,30,1000)生成更多采样点,但大x值的y值依然会远超小x值,视觉压缩问题无法完全避免
内容的提问来源于stack exchange,提问作者meJustAndrew
相关产品推荐
相关产品推荐

