我从版本2.0.2安装了matplotlib 2.1,我的简单2D x-y图现在显示y轴与对数刻度,在刻度线性之前。我不确定这是怎么回事。
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.gridspec as gridspec
from numpy import sqrt, pi, exp, linspace, loadtxt
from lmfit import Model
path=r'C:\users\test.mca'
f=open(path,'r')
lines=f.readlines()[14:2060]
x=[]
for i in range(0,2046):
x.append(i)
plt.figure(figsize=(10,6))
plt.xlim(0,600)
plt.ylim(0,1000)
plt.grid(True)
plt.xlabel('Channels')
plt.ylabel('Counts')
def gaussian(x, amp, cen, wid):
"1-d gaussian: gaussian(x, amp, cen, wid)"
return (amp/(sqrt(2*pi)*wid)) * exp(-(x-cen)**2 /(2*wid**2))
gmod = Model(gaussian)
pars = gmod.make_params(amp=15000, wid=14, cen=380)
result = gmod.fit(lines, pars, x=x)
print(result.fit_report())
fwhm=result.params['wid'].value*2.35
ER=100*fwhm/result.params['cen'].value
center=result.params['cen']
plt.title('Gaussian fit\n Center=%.1f FWHM=%.1f ER=%.1f%%' % (center, fwhm, ER))
plt.plot(x, lines,'bo', markersize=4)
plt.plot(x, result.best_fit, 'r-')
plt.show()
版本2.1:
版本2.0.2:
上图是使用2.1绘制的,而下图是使用2.0.2。难以理解为什么会这样。
答案 0 :(得分:1)
未显示对数刻度。轴只有每个点的标签。
在matplotlib 2.0中,字符串在内部自动转换为浮点数。这从来就不是预期的用法,但是人们倾向于滥用它来规避转换字符串本身。
从matplotlib 2.1开始,字符串被解释为字符串,这意味着它们是类别,每个类别将有一个标签。
在matplotlib 2.0和2.1中,你应该将你的字符串转换为浮点数,如果它们在绘制它们之前被解释为数字。
lines = np.array(lines).astype(float)