2011-03-03 145 views
2

嘿, 我有一套频率和功率谱的值,我必须绘制功率谱与对数尺度上的频率。一旦完成,我需要通过最适合的直线穿过它。我在线性刻度上得到线条,但是当我尝试将它叠加到频率功率谱图上时,结果图不显示任何线,相反,第一幅图的数据点只是在空间上移动。 另外,如果使用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) 
+0

你需要在你的问题中包含一些代码,展示你正在尝试的东西。 – detly 2011-03-03 08:08:08

回答

2

尽管情节线命令不是在你的例子正确我认为这是类似于你实际上做。

在不同的X系列的第二曲线命令图:

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

也有你看看行的值,他们做的意义,他们在同一范围内利用yval,zval的?

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

+0

是啊,究竟为什么我很困惑..我最近才开始在Python上工作..这个范围调整和所有不容易给我..这就是为什么我卡住了! – 2011-03-03 09:01:25

+0

花了一些时间,并通过用户指南工作,这是非常好的:http://matplotlib.sourceforge.net/contents.html – Bernhard 2011-03-03 09:08:47

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阵列的很多非常酷的功能。