2012-08-14 145 views
0

我想绘制一个对数正态分布,所以我可以使用下面的代码将其与我的示例数据的直方图进行比较,但是我的绘图看起来不正确。有没有我的代码,我不正确做的东西? C数组具有17576绘制一个对数正态分布

import matplotlib.pyplot as plt 
import numpy as np 

data=np.loadtxt(F) 
C=data[:,3] 

x = np.ma.log(C) 
avg = np.mean(x) 
std = np.std(x) 
dist=lognorm(std,loc=avg) 
plt.plot(C,dist.pdf(C),'r') 
plt.show() 

My Plot

回答

2

它看起来像您的X数据是不按排序顺序的长度。试试这个

ind = np.argsort(C) 
xx = C[ind] 
yy = dist.pdf(C)[ind] 
plt.plot(xx, yy, 'r') 

情节只是连接了所有的(X,Y)对用直线,所以你需要确保你从左右(或右 - 左)跟踪你的函数。或者,您可以跳过图之间的界限:

plt.plot(C, dist.pdf(C), 'ro') 
+0

这样做谢谢!你能解释为什么数据需要排序吗? – Surfcast23 2012-08-14 20:12:51

+1

绘图函数基本上在x和y数据上循环,并在'相邻'点(其中“相邻”指输入数组中的位置,而不是xy平面)之间画线。如果数据没有排序,那么您可以以任意方式“连接点”。另一方面,对数据进行排序,将图中从左到右的点连接起来。这通常是你想要的正常功能 – ChrisB 2012-08-14 20:19:38

+0

啊,我不知道这是如何绘图功能的工作。谢谢你的解释 – Surfcast23 2012-08-14 20:56:46