【问题标题】:Curve fitting in pythonpython中的曲线拟合
【发布时间】:2011-07-07 21:01:28
【问题描述】:

嘿, 我有一组频率和功率谱值,我必须在对数刻度上绘制功率谱与频率。完成后,我需要将最合适的直线通过它。我得到线性比例的线。但是当我尝试将它叠加到频率功率谱图上时,结果图没有显示任何线,相反,第一个图的数据点只是在空间上移动。 此外,如果使用 loglog 函数在对数刻度上绘制同一行,则不会显示。

谁能告诉我我应该怎么做才能使这条线达到对数刻度?

所以我有一个包含三列的文件;频率,功率规格。电源信号..这是我为绘制数据和线而写的一段..

#initialize all variables to 0

#open the data file

while 1:
  ln = datafile.readline()
  if ln:
    data = ln.split()
    x = float(n)
    y = float(data[0])
    z = float(data[1])
    xval.append(float(n))
    yval.append(y)
    zval.append(z)
    n += 1
    sum_z += z
    sum_y += y
    sum_y_squared += y*y
    sum_yz += y*z
  else:
    break
datafile.close()

# calculate slope and intercept using formulae
for num in xval:
    res = intercept + slope*num
    line.append(res)

#Plot data
pylab.figure(0)
matplotlib.pylab.loglog(yval,zval)

#Plot line
pylab.figure(0)
pylab.plotloglog(line)

【问题讨论】:

  • 您需要在问题中包含一些代码,展示您正在尝试的内容。

标签: python numpy matplotlib curve-fitting


【解决方案1】:

尽管在您的示例中绘图线命令不正确,但我认为它与您实际执行的操作相似。

第二个绘图命令在不同的 x 范围内绘图:

loglog(yval,zval) # plot  yval vs zval
loglog(line) #  plots range(0,len(line)) vs line

你也看过line的值,它们是否有意义,它们是否与yval,zval在同一范围内?

此外,您可能还想使用numpy.loadtxt 来加载您的数据文件。

【讨论】:

  • 是的,这正是我感到困惑的原因。我最近才开始研究 Python。这个范围调整对我来说并不容易。这就是我被卡住的原因!
  • 花了一些时间阅读用户指南,非常棒:matplotlib.sourceforge.net/contents.html
【解决方案2】:

据我了解您的问题,您想在同一张图中绘制两条线。一般情况下是这样的:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(line1_x, line1_y)
ax.plot(line2_x, line2_y)
ax.set_yscale("log")

所以,首先将它们放在同一个Axes 中,这样它们就会出现在同一个图表中。修改缩放比例可以分别使用set_xscaleset_yscale

除此之外,我不禁注意到您用于读取文件的代码很糟糕。正如@Bernhard 在他的回答中建议的那样,尝试使用numpy.loadtxt。这可能如下所示:

data = numpy.loadtxt("data.txt")
n = len(data)
x = numpy.arange(n)
sum_z = sum(data.T[1])
sum_y = sum(data.T[0])
sum_y_squared = sum(data.T[0]**2)
sum_yz = sum(data.T[0]*data.T[1])

这应该会给你与你的循环相同的结果,只是它更简洁。我强烈建议您阅读 Tentative NumPy Tutorial,因为它解释了 numpy 数组的许多非常酷的特性。

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 2013-11-08
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2019-06-19
    • 2021-01-17
    • 2018-11-13
    • 2013-10-10
    相关资源
    最近更新 更多