我是Python新手,有任何编程背景...... 我试图为同一个x数据集绘制y的2个数据集,使用scipy对其进行线性回归并获得R ^ 2值。这就是我到目前为止的方式:
import matplotlib
import matplotlib.pyplot as pl
from scipy import stats
#first order
'''sin(Δθ)'''
y1 = [-0.040422445,-0.056402365,-0.060758191]
#second order
'''sin(Δθ)'''
y2 = [-0.083967708, -0.107420964, -0.117248521]
''''λ, theo (nm)'''
x= [404.66, 546.07, 579.06]
pl.title('Angular displacements vs. Theoretical wavelength')
pl.xlabel('theoretical λ (in nm)')
pl.y1label('sin(Δθ) of 1st order images')
pl.y2label('sin(Δθ) of 2nd order images')
plot1 = pl.plot(x, y1, 'r')
plot2 = pl.plot(x, y2, 'b')
pl.legend([plot1, plot2], ('1st order images', '2nd order images'), 'best', numpoints=1)
slope1, intercept1, r_value1, p_value1, std_err1 = stats.linregress(x,y1)
slope2, intercept2, r_value2, p_value2, std_err2 = stats.linregress(x,y2)
print "r-squared:", r_value1**2
print "r-squared:", r_value2**2
pl.show()
...我没有得到任何情节,我得到错误: “UnicodeDecodeError:'ascii'编解码器无法解码位置12的字节0xce:序数不在范围内(128)”
我不明白。有人可以帮忙告诉我我的代码有什么问题吗?谢谢youuu
答案 0 :(得分:0)
此代码中存在多个错误。
这里不能简单地在情节标签和标题中键入希腊字母 你是如何做到的:
pl.xlabel(r'theoretical $\lambda$ (in nm)')
y1label
和y2label
不是pl
模块的对象
在Python中,# blah blah
与'''blah blah'''
不同。第一个是评论,第二个是表达。您可以将第二个分配给变量(a = '''blah blah'''
),但不能将第一个分配给变量:a = # blah blah
会产生SyntaxError。
这是一个应该有效的代码:
import matplotlib
import matplotlib.pyplot as pl
from scipy import stats
y1 = [-0.040422445,-0.056402365,-0.060758191]
y2 = [-0.083967708, -0.107420964, -0.117248521]
x= [404.66, 546.07, 579.06]
pl.title('Angular displacements vs. Theoretical wavelength')
pl.xlabel(r'theoretical $\lambda$ (in nm)')
pl.ylabel(r'sin($\Delta\theta$)')
y1label = '1st order images'
y2label = '2nd order images'
plot1 = pl.plot(x, y1, 'r', label=y1label)
plot2 = pl.plot(x, y2, 'b', label=y2label)
pl.legend()
slope1, intercept1, r_value1, p_value1, std_err1 = stats.linregress(x,y1)
slope2, intercept2, r_value2, p_value2, std_err2 = stats.linregress(x,y2)
print "r-squared:", r_value1**2
print "r-squared:", r_value2**2
pl.show()