在MATLAB中绘制累积分布函数

在MATLAB中绘制累积分布函数,matlab,plot,cdf,Matlab,Plot,Cdf,我从cdf函数中得到一个奇怪的图形。如果我使用ecdf,我会得到我期望的图形。但我得到了一个混乱的东西,看起来它包含了正确的数据,但顺序不对 SNR = exprnd(1,1000,1); Cap = 1*log2(1+SNR); % unit bandwidth [f,x] = ecdf(Cap); figure(2); plot( x,f); cdf_Cap = cdf('Exponential', Cap, 1); figure(3); plot( Cap, cdf_Cap); f

我从cdf函数中得到一个奇怪的图形。如果我使用ecdf,我会得到我期望的图形。但我得到了一个混乱的东西,看起来它包含了正确的数据,但顺序不对

SNR = exprnd(1,1000,1); 
Cap = 1*log2(1+SNR); % unit bandwidth

[f,x] = ecdf(Cap);
figure(2);
plot( x,f);

cdf_Cap = cdf('Exponential', Cap, 1);
figure(3);
plot( Cap, cdf_Cap);

figure(4);
cdfplot(Cap);
图2显示了预期结果:

图3显示:


我确信它是正确的数据,只需要某种绝对函数或排序函数。我只是不知道那会是什么。任何帮助都将不胜感激

看起来
Cap
不是单调递增的。我想你可以在策划之前把它整理一下

图(3)
上,替换以下内容:

plot( Cap, cdf_Cap);
为此:

[~, idx] = sort(Cap);
plot( Cap(idx), cdf_Cap(idx));

现在将按正确的顺序绘制数据。

谢谢!这正是我所期待的。干杯=)仅供参考,您不必对其进行排序。您可以在不连接线的情况下打印函数,如
plot(Cap,cdf\u Cap,'o')
,但对于cdf,您可能确实希望对其排序并连接线。