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

Matplotlib绘制矩阵横轴未从100起始,求原因及解决方法

问题:Matplotlib绘图横轴起始值不符合预期

尝试绘制首列值为100的矩阵,期望绘图横轴起始值为100,但实际从0开始。以下是使用的代码:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

def ABM(n,m,S0,mu,sigma,dt):
    np.random.seed(999)
    arr = np.zeros((n, m))
    arr[:,0] = S0 #initialize column 0 
    # fill in array entries
    for i in range(n):
        for j in range(1, m):
            dW = np.random.normal(0, np.sqrt(dt))
            arr[i,j] = arr[i, j-1] + mu * dt + sigma * dW
    return arr

paths_1 = ABM(n=1000,m=20,S0=100,mu=0,sigma=0.001,dt=1)
print(paths_1)

plt.figure(figsize=(14, 7))

for i in range(n):
    plt.plot(paths_1[i])

plt.title('Simulated Arithmetic Brownian Motion Paths')
plt.xlabel('Time Steps')
plt.ylabel('Stock Price')
plt.grid(True)
plt.show()

输出图表:

我的输出图表

问题原因

  • 直接传入一维数组给plt.plot()时,Matplotlib默认会用数组的索引值作为横轴坐标,也就是从0开始的整数序列,和数组本身的数值无关。你的paths_1[i]是长度为20的一维数组,首元素是100,但绘图时横轴用的是0到19的索引,所以横轴从0开始。
  • 额外注意:原代码中for i in range(n)的n是函数ABM的局部参数,全局作用域未定义,运行时会触发变量未定义错误。

修复方法

方法一:自定义横轴数据

构造从100开始的横轴序列,和纵轴数据一一对应传入plot:

plt.figure(figsize=(14, 7))
# 生成从100开始的横轴数组,长度和单条路径一致
x_axis = np.arange(100, 100 + paths_1.shape[1])
# 遍历所有路径绘图
for i in range(paths_1.shape[0]):
    plt.plot(x_axis, paths_1[i])

plt.title('Simulated Arithmetic Brownian Motion Paths')
plt.xlabel('Time Steps')
plt.ylabel('Stock Price')
plt.grid(True)
plt.show()

方法二:修改横轴刻度标签

仅调整显示的刻度文字,不改变绘图的坐标映射:

plt.figure(figsize=(14, 7))
for i in range(paths_1.shape[0]):
    plt.plot(paths_1[i])

# 将原0-19的刻度替换为100-119
plt.xticks(
    ticks=np.arange(paths_1.shape[1]),
    labels=np.arange(100, 100 + paths_1.shape[1])
)

plt.title('Simulated Arithmetic Brownian Motion Paths')
plt.xlabel('Time Steps')
plt.ylabel('Stock Price')
plt.grid(True)
plt.show()

内容的提问来源于stack exchange,提问作者Yuxiang Zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:03:19