2017-11-25 292 views
-1

我想繪製出版物的正常分佈的3個數字,但我只得到一個很好的數字(英國)。其餘兩個(美國和日本)的曲線不完整。當創建幾個地塊時,擬合分佈被削減

我將曲線擬合成直方圖,因此您可以說每個圖需要保存兩個圖,即直方圖和高斯分佈。

請看看我的代碼的一部分,讓我知道如何解決這個問題。 我很樂意提供建議,謝謝。

我Matplotlib數字:fitted distributionfitted distributionfitted distribution

for item in totalIPs: 
    USA=totalIPs[18] 
    JAPAN=totalIPs[10] 
    UK=totalIPs[17] 
    AUSTRALIA=totalIPs[0] 

#print(USA) 
#print(JAPAN) 
#print(UK) 
#print(AUSTRALIA) 
#print('done') 

#print(country) 
#print(ipFirmnames) 
#print(totalIPs) 
#print("done")  

#Calculating mean and standard deviation 
#from sublists in country list of lists 
#i could write a function for this but dont know how 

mu_USA=statistics.mean(USA) 
mu_JAPAN=statistics.mean(JAPAN) 
mu_UK=statistics.mean(UK) 

std_USA=statistics.stdev(USA) 
std_JAPAN=statistics.stdev(JAPAN) 
std_UK=statistics.stdev(UK) 

plt.figure(1) 
plt.hist(USA, bins=10, normed=True, alpha=0.6, color='g') 

plt.figure(2) 
plt.hist(JAPAN,bins=10,normed=True,alpha=0.6, color ='g') 

plt.figure(3) 
plt.hist(UK, bins=10,normed=True, alpha=0.6, color = 'g') 

standardize_USA=(np.array(USA)-mu_USA)/std_USA 
standardize_JAPAN=(np.array(JAPAN)-mu_JAPAN)/std_JAPAN 
standardize_UK=(np.array(UK)-mu_UK)/std_UK 

xmin, xmax = plt.xlim() 

x1=np.linspace(xmin, xmax, 100) 
x2=np.linspace(xmin, xmax, 100) 
x3=np.linspace(xmin, xmax, 100) 

fitted_pdf_USA=ss.norm.pdf(x1,mu_USA, std_USA) 
fitted_pdf_JAPAN=ss.norm.pdf(x3,mu_JAPAN, std_JAPAN) 
fitted_pdf_UK=ss.norm.pdf(x3,mu_UK, std_UK) 

plt.figure(1) 
plt.plot(x1, fitted_pdf_USA, 'K', linewidth=2) 

plt.figure(2) 
plt.plot(x2, fitted_pdf_JAPAN,'K', linewidth=2) 
fitted_pdf_JAPAN=ss.norm.pdf(x2,mu_JAPAN, std_JAPAN) 


plt.figure(3) 
plt.plot(x3, fitted_pdf_UK,'K', linewidth=2) 

#plt.show() 
print(standardize_USA) 
print(standardize_JAPAN) 

#print(USA) 
print(UK) 
print(JAPAN) 
+1

首先,至今只有我的建議:提供你想要幫助的問題[mcve]。 – ImportanceOfBeingErnest

+0

感謝您的建議。我是Python和Stackoverflow的新手,所以我不熟悉約定。下次我會記住這一點。順便說一說什麼導致了我的情節問題? – MyWrathAcademia

+0

儘管您確實需要幫助,但我們應該提供幫助,但很難理解您希望我們做什麼。 [PyMC](http://docs.pymc.io/notebooks/LKJ.html)有一些示例代碼可幫助您開始使用;使用一個已知的框架和一步一步的筆記本顯着幫助我們幫助你。 –

回答

0

,你必須是對曲線的限制只從一個曲線部分

xmin, xmax = plt.xlim() 

進行個別獲得的問題從各自的數據限制每個繪圖,而不是圖形限制,它將解決您的問題。請使用來自numpy的max()min()

x1=np.linspace(USA.min(),USA.max(),100) 

對每個地塊都有相應的數據。這種方式會給出平滑的曲線,但限制不是圖表,而是數據。如果太小,只需通過乘法(如1.1*max())或總和(max()+10; min取決於數據)來增加限值。

+0

這真的很有趣。我希望你是對的,因爲我花了很多時間試圖找出錯誤。那麼,你最好不要使用我應該使用值的限制嗎?我期待看到你的代碼 – MyWrathAcademia

+0

@mywrathacademia是的,使用每個集合的最大和最小值應該工作。然而,正如評論中指出的那樣,你的例子不足以重現問題,一個版本可以提出更好的問題。 – Guto

+0

我工作。謝謝Guto,你發現問題的方式非常令人印象深刻。我現在正在按照您的建議使用相關數據。雖然我不得不使用排序功能,因爲曲線非常噪音。當我使用與實際數據相比的xmin和xmax限制時,其中一個數據集的曲線更平滑。任何想法爲什麼這是? – MyWrathAcademia