2017-12-05 4 views
0

私はmatplotlib 2.1をバージョン2.0.2からインストールしました。私の単純な2D x-yプロットは、スケールが線形になる前にログスケールでy軸を表示しています。どのように起こっているのか分かりません。Matplotlib 2.1のログスケールの問題

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: Ver 2.0.2

上面図は2.1を使用してプロットされ、下の図は、2.0.2を使用しています。なぜこれが理解されているいくつかの問題を抱えている。

答えて

1

ログスケールが表示されません。軸はちょうど各点のラベルを持っています。

matplotlib 2.0では、文字列は自動的に内部でfloatに変換されました。これは決して意図された使用法ではありませんでしたが、人々は文字列の変換を回避するためにこれを誤用する傾向がありました。

matplotlib 2.1より、文字列は文字列として解釈されます。つまり、文字列はカテゴリであり、カテゴリごとに1つのラベルが存在します。

matplotlib 2.0と2.1の両方で、プロットする前に数値として解釈されることを意図している場合は、実際に文字列を浮動小数点数に変換する必要があります。

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

私はこれを(明らかに)認識しませんでした。お手伝いありがとう。 – Sebekemsaf

関連する問題