我想在纸上使用Matlab图。该图包含多个cdfplots。 现在问题是我不能使用标记,因为在图中变得非常密集。 如果我想使样本稀疏,我必须从cdfplot中删除一些样本,这将导致不同的cdfplot行。
如何在保持实际线条的同时添加足够的标记?
答案 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*')
<强>结果强>
答案 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制作的图表,我发现标记只会遮挡线条的阶梯性质。