Matplotlib 2.1问题与对数比例

时间:2017-12-05 16:38:32

标签: python matplotlib

我从版本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: Ver 2.1

版本2.0.2: Ver 2.0.2

上图是使用2.1绘制的,而下图是使用2.0.2。难以理解为什么会这样。

1 个答案:

答案 0 :(得分:1)

未显示对数刻度。轴只有每个点的标签。

在matplotlib 2.0中,字符串在内部自动转换为浮点数。这从来就不是预期的用法,但是人们倾向于滥用它来规避转换字符串本身。

从matplotlib 2.1开始,字符串被解释为字符串,这意味着它们是类别,每个类别将有一个标签。

在matplotlib 2.0和2.1中,你应该将你的字符串转换为浮点数,如果它们在绘制它们之前被解释为数字。

lines = np.array(lines).astype(float)