如何在MatLab中绘制概率密度函数?

如何在MatLab中绘制概率密度函数?,matlab,plot,statistics,distribution,Matlab,Plot,Statistics,Distribution,谷歌搜索后,我发现上面的代码将在Matlab中为我绘制一个累积分布函数。 有没有一种简单的方法来绘制概率密度函数 澄清。我需要一个x轴分布均匀的图。我希望它看起来不像条形图。(我会有数百万个整数) 抱歉,请再次更新。我的数据是整数,但实际上它们代表时间(我希望有几个非常高的峰值在完全相同的值,而其他值看起来应该像它们不是离散的)。我真的开始怀疑,这是否本质上不是离散整数。CDF肯定会起作用,但当谈到PDF时,它似乎比我预期的要复杂。您可以使用以下函数为整数生成离散概率分布: 下面是结果图:

谷歌搜索后,我发现上面的代码将在Matlab中为我绘制一个累积分布函数。
有没有一种简单的方法来绘制概率密度函数

澄清。我需要一个x轴分布均匀的图。我希望它看起来不像条形图。(我会有数百万个整数)

抱歉,请再次更新。我的数据是整数,但实际上它们代表时间(我希望有几个非常高的峰值在完全相同的值,而其他值看起来应该像它们不是离散的)。我真的开始怀疑,这是否本质上不是离散整数。CDF肯定会起作用,但当谈到PDF时,它似乎比我预期的要复杂。

您可以使用以下函数为整数生成离散概率分布:

下面是结果图:


更新: 在较新版本的MATLAB中,不再推荐使用该函数。相反,您可以使用类似这样的函数生成与上面相同的图形:

data = [1 2 3 3 4];           %# Sample data
xRange = 0:10;                %# Range of integers to compute a probability for
N = hist(data,xRange);        %# Bin the data
plot(xRange,N./numel(data));  %# Plot the probabilities for each integer
xlabel('Integer value');
ylabel('Probability');

在matlab帮助中键入“ksdensity”,您将找到提供PDF连续形式的函数。我想这正是你想要的

如果您想要连续分布函数,请尝试以下方法

data = [1 2 3 3 4];
N = histcounts(data, 'BinLimits', [0 10], 'BinMethod', 'integers', 'Normalization', 'pdf');
plot(N);
xlabel('Integer value');
ylabel('Probability');
它输出这个。


累积分布函数在底部,核密度估计在顶部。

除了通过
ksdensity(x)
获得的平滑PDF外,还可以使用
ksdensity(x,'Function','CDF')绘制平滑CDF图。


你所说的“均匀分布的x轴”是什么意思?@n正如你在新答案中所做的那样。看看ksdensity函数。它是核密度估计的一个实现@gnovice:只是一个小问题,一般来说,你应该除以直方图的面积,而不是数据点的数量来得到pdf。所以最后一行应该是
条(X,N/trapz(X,N))
。因为在本例中,bin点是整数和单位间隔,
numel
trapz
给出了相同的答案,
4
,但如果不是这样,它们将不同。@yoda:你是对的,但Gene提到必须对整数值(即离散概率分布)这样做所以我想我应该保持简单。谢谢你的回答,我还有一个问题,格诺维奇@尤达的评论引起了我的关注。如果x=[100 200 400 550]我将在实际数据上尝试这两种方法,那么这是否仍然有效。谢谢大家!@基因:如果你有
data=[100200400550]
并指定一个整数范围,如
xRange=0:600,除了x等于100、200和550时的尖峰为0.2,以及x等于400时的尖峰为0.4之外,您将得到一个大部分为0的绘图。作为显示数据的另一种方式,您可能希望尝试打印,而不是常规的直线打印。它看起来可能更好。
data = [1 2 3 3 4];
N = histcounts(data, 'BinLimits', [0 10], 'BinMethod', 'integers', 'Normalization', 'pdf');
plot(N);
xlabel('Integer value');
ylabel('Probability');
x = [1 2 3 3 4]
subplot(2,1,1)
ksdensity(x)
axis([-4 8 0 0.4])

subplot(2,1,2)
cdfplot(x)
grid off
axis([-4 8 0 1])
title('')