Matlab cdfplot:如何控制标记间距的间距

时间:2011-07-23 03:00:41

标签: matlab plot

我想在纸上使用Matlab图。该图包含多个cdfplots。 现在问题是我不能使用标记,因为在图中变得非常密集。 如果我想使样本稀疏,我必须从cdfplot中删除一些样本,这将导致不同的cdfplot行。

如何在保持实际线条的同时添加足够的标记?

Marker

6 个答案:

答案 0 :(得分:8)

一种方法是从曲线中获取XData / YData属性,遵循@ephsmith中的solution(1)并将其设置回来。以下是一条曲线的示例。

y = evrnd(0,3,100,1); %# random data

%# original data
subplot(1,2,1)
h = cdfplot(y);
set(h,'Marker','*','MarkerSize',8,'MarkerEdgeColor','r','LineStyle','none')

%# reduced data
subplot(1,2,2)
h = cdfplot(y);
set(h,'Marker','*','MarkerSize',8,'MarkerEdgeColor','r','LineStyle','none')
xdata = get(h,'XData');
ydata = get(h,'YData');
set(h,'XData',xdata(1:5:end));
set(h,'YData',ydata(1:5:end));

另一种方法是使用ECDF函数分别计算经验CDF,然后在使用PLOT绘图之前减少结果。

y = evrnd(0,3,100,1); %# random data
[f, x] = ecdf(y);

%# original data
subplot(1,2,1)
plot(x,f,'*')

%# reduced data
subplot(1,2,2)
plot(x(1:5:end),f(1:5:end),'r*')

<强>结果 plot output

答案 1 :(得分:2)

我知道这可能是不必要的,因为MATLAB的内置函数(无论如何都在统计工具箱中),但它可能对没有访问工具箱的其他查看者有用。

经验CMF(CDF)基本上是经验PMF的累积和。后者可以通过hist函数在MATLAB中实现。为了获得经验PMF的良好近似,必须适当选择箱的数量。在下面的示例中,我假设64个容器足以满足您的数据需求。

%# compute a histogram with 64 bins for the data points stored in y
[f,x]=hist(y,64);

%# convert the frequency points in f to proportions
f = f./sum(f);

%# compute the cumulative sum of the empirical PMF
cmf = cumsum(f);

现在,您可以使用yuk给出的简化数据示例选择您想要绘制的点数。

答案 2 :(得分:1)

n=20 ; % number of total data markers in the curve graph
M_n = round(linspace(1,numel(y),n)) ; % indices of markers
% plot the whole line, and markers for selected data points
plot(x,y,'b-',y(M_n),y(M_n),'rs')

verry simple .....

答案 3 :(得分:0)

尝试减小标记大小。

x = rand(10000,1);
y = x + rand(10000,1);
plot(x,y,'b.','markersize',1);

答案 4 :(得分:0)

出于发布目的,我倾向于使用图窗口上的绘图工具。这允许您调整所有绘图参数并立即查看结果。

如果问题是你有太多的数据点,你可以:

1)。使用每个数据的第n个样本进行绘图。尝试找到能够产生所需外观的n 2)。我通常将曲线拟合到我的数据中,并将几个稀疏放置的标记添加到拟合图中以区分曲线。

答案 5 :(得分:0)

老实说,出于发布目的,我总是发现为线条选择不同的'LineStyle''LineWidth'属性可以提供比使用不同标记更清晰的结果。这比尝试对数据进行下采样要容易得多,对于使用CDFPLOT制作的图表,我发现标记只会遮挡线条的阶梯性质。

相关问题