调整X轴刻度范围后Matplotlib绘图异常问题咨询
问题分析与解决方案
你的问题核心是混淆了「坐标轴刻度显示调整」和「自变量取值范围改变」,具体问题出在:
你生成的t2是原t1的100倍,但f(t1)对应的是t1(0到1区间)的函数值——这相当于把原曲线横向拉伸了100倍,而非让X轴覆盖0到100的自变量取值。比如原t1=0.5对应f(0.5)=2,你现在把这个点放到了X轴的50位置,但实际上当X轴为50时,函数值应该是f(50)=1/(1-50)=-1/49,这才是正确的对应关系。
两种正确做法
1. 真正让自变量覆盖0-100(绘制完整函数曲线)
如果需求是绘制t从0到100时的函数图像,需要直接生成该范围的自变量数组,再计算对应函数值(注意避开t=1这个奇点,否则会出现无穷大值导致绘图异常):
import numpy as np import matplotlib.pyplot as plt def f(t): return 1/(1-t) def analytic_plot(): # 生成0到99.99的自变量数组,步长0.01,避开t=1 t2 = np.arange(0, 99.99, 0.01) plt.figure() plt.plot(t2, f(t2)) plt.xlim(0, 100) # 强制设置X轴显示范围为0-100 plt.show() analytic_plot()
2. 仅调整X轴刻度标签(自变量仍为0-1)
如果需求只是把原图表的X轴刻度显示为0-100(实际自变量还是0到1,仅刻度文字放大100倍),无需修改自变量,直接调整刻度标签即可:
import numpy as np import matplotlib.pyplot as plt def f(t): return 1/(1-t) def analytic_plot(): t1 = np.arange(0, 1, 0.01) plt.figure() plt.plot(t1, f(t1)) # 修改X轴刻度:原刻度位置不变,标签改为乘100后的数值 ticks = np.arange(0, 1.1, 0.2) # 原刻度位置:0,0.2,0.4,...,1.0 plt.xticks(ticks=ticks, labels=[str(int(x*100)) for x in ticks]) plt.xlim(0, 1) plt.show() analytic_plot()
内容的提问来源于stack exchange,提问作者Randy
相关产品推荐
相关产品推荐

