使用Matplotlib绘制函数图形与预期不符的问题排查及解决
解决Matplotlib绘制函数图形与预期不符的问题
问题描述
用户定义了如下增长型S曲线函数:
def f(x): return 50 * (1/(1 + ((50/5) -1 ) * e ** (-max(0, 0.1 * x))))
预期图形为标准的递增S型曲线,但实际用Matplotlib绘制出的图形和预期存在明显差异。用户曾怀疑是Python运算符优先级问题,添加大量括号后仍未解决。
问题根源
并非函数逻辑错误,坐标轴位置设置有误:原代码中使用ax.spines['bottom'].set_position('center')将x轴放在图形中心,导致视觉上曲线形态失真,和预期不符。
修正方案
将x轴的位置设置改为ax.spines['bottom'].set_position('zero'),让x轴对齐y=0的位置,即可得到符合预期的图形。
修正后的完整代码:
import matplotlib.pyplot as plt import numpy as np from math import e # 生成200个-10到100之间的等间距数值 N=200 x = np.linspace(-10,100,N) def f(x): return 50 * (1/(1 + ((50/5) -1 ) * e ** (-max(0, 0.1 * x)))) f_eval = np.zeros(N) for idx, i in enumerate(x): f_eval[idx] = f(i) # 设置坐标轴样式 fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.spines['left'].set_position('center') ax.spines['bottom'].set_position('zero') # 此处为核心修正点 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') # 绘制函数曲线 plt.plot(x,f_eval, 'r') # 显示图形 plt.show()
内容的提问来源于stack exchange,提问作者knowledge_seeker
相关产品推荐
相关产品推荐

