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

Hao*_*hun 6 statistics matlab plot

x = [1 2 3 3 4]
cdfplot(x)
Run Code Online (Sandbox Code Playgroud)

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

澄清.我需要一个具有均匀分布的x轴的图形.我希望它看起来不像条形图.(我会有数百万的整数)
抱歉,再次更新.我的数据是整数,但实际上它们代表时间(我期望几个非常高的峰值在完全相同的值,而其他值应该看起来好像它们不是离散的).我实际上开始想知道这实际上是不是离散整数本身.CDF肯定会有效,但是当谈到PDF时,它似乎比我预期的要复杂得多.

gno*_*ice 7

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

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');
Run Code Online (Sandbox Code Playgroud)

这是由此产生的情节:

在此输入图像描述


更新:

在较新版本的MATLAB中,hist不再推荐使用该功能.相反,您可以histcounts像这样使用函数来生成与上面相同的数字:

data = [1 2 3 3 4];
N = histcounts(data, 'BinLimits', [0 10], 'BinMethod', 'integers', 'Normalization', 'pdf');
plot(N);
xlabel('Integer value');
ylabel('Probability');
Run Code Online (Sandbox Code Playgroud)

  • @gnovice:只是一个小问题,你通常应该除以直方图的_area_而不是_数据点数_来获得pdf.所以最后一行应该是`bar(X,N/trapz(X,N))`.因为在这个例子中,bin点是整数和单位间隔,所以`numel`和`trapz`给出相同的答案,`4`,但如果不是这样,它们将是不同的. (4认同)

Fri*_*rub 7

如果您想要连续分配功能,请尝试此操作.

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('')
Run Code Online (Sandbox Code Playgroud)

哪个输出这个. 在此输入图像描述

累积分布函数位于底部,核心密度估计位于顶部.