2017-11-25 291 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