Python 如何通过生成计数器在函数内部绘图

Python 如何通过生成计数器在函数内部绘图,python,function,loops,matplotlib,Python,Function,Loops,Matplotlib,在下面的代码中,我想看看每次调用函数时错误是如何变化的。但是,绘图是点的垂直列。如何在函数中生成计数器以提供x轴值 import matplotlib.pyplot as plt import numpy as np from scipy.optimize import minimize t = np.random.uniform(0., 100., 100) y = t**3 - 130*t**2 + 5000*t - 56000 + np.random.normal(0., 10000.,

在下面的代码中,我想看看每次调用函数时
错误
是如何变化的。但是,绘图是点的垂直列。如何在函数中生成计数器以提供x轴值

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import minimize

t = np.random.uniform(0., 100., 100)
y = t**3 - 130*t**2 + 5000*t - 56000 + np.random.normal(0., 10000., 100)

def fn(x):
    a, b, c, d = x;
    fit = a * t **3 + b * t **2 + c * t + d
    error = sum((fit - y)**2)
    plt.plot(error, ".")
    fn.x = x
    return error

init_x = [2, -100, 1000, -10000]
res = minimize(fn, init_x, method='Nelder-Mead', tol=1e-6)
fn(res.x)

一种选择是使用
global
变量作为计数器,并在每次调用
fn
函数时递增其值。然后,当使用
plt.plot
时,可以将其用作x坐标。例如:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import minimize

t = np.random.uniform(0., 100., 100)
y = t**3 - 130*t**2 + 5000*t - 56000 + np.random.normal(0., 10000., 100)

xx = 0

def fn(x):
    global xx
    xx += 1
    a, b, c, d = x;
    fit = a * t **3 + b * t **2 + c * t + d
    error = sum((fit - y)**2)
    plt.plot(xx, error, ".")
    fn.x = x
    return error

init_x = [2, -100, 1000, -10000]
res = minimize(fn, init_x, method='Nelder-Mead', tol=1e-6)
fn(res.x)

plt.gca().set_yscale('log')
plt.show()