Matlab cdfplot: как контролировать интервал между маркерами - PullRequest
8 голосов
/ 23 июля 2011

У меня есть фигура Matlab, которую я хочу использовать в газете. Эта фигура содержит несколько cdfplots. Теперь проблема в том, что я не могу использовать маркеры, потому что они становятся очень плотными в сюжете. Если я хочу сделать сэмплы разреженными, я должен удалить некоторые сэмплы из cdfplot, что приведет к другой строке cdfplot.

Как я могу добавить достаточно маркеров при сохранении фактической линии?

Marker

Ответы [ 6 ]

8 голосов
/ 24 июля 2011

Один из методов - получить свойства XData / YData из ваших кривых, следуя решению (1) из @ephsmith, и установить его обратно. Вот пример для одной кривой.

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));

Другой метод состоит в том, чтобы рассчитать эмпирический CDF отдельно, используя функцию ECDF , а затем уменьшить результаты перед построением графика с помощью 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

2 голосов
/ 24 июля 2011

Я знаю, что это потенциально ненужно, учитывая встроенные функции MATLAB (в любом случае, в панели инструментов статистики), но может быть полезно для других зрителей, у которых нет доступа к панели инструментов.

Эмпирический CMF (CDF) - это, по сути, кумулятивная сумма эмпирического PMF. Последнее достижимо в MATLAB через функцию hist. Чтобы получить хорошее приближение к эмпирическому 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.

1 голос
/ 24 августа 2011
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')

очень просто .....

0 голосов
/ 24 июля 2011

Честно говоря, для целей публикации я всегда обнаруживал, что выбор различных свойств 'LineStyle' или 'LineWidth' для линий дает намного более четкие результаты, чем использование различных маркеров.Это также было бы намного проще, чем пытаться уменьшить ваши данные, и для графиков, созданных с помощью CDFPLOT , я считаю, что маркеры просто перекрывают природу линий ступеней.

0 голосов
/ 23 июля 2011

В целях публикации я обычно использую инструменты построения графика в окне рисунка.Это позволит вам настроить все параметры графика и сразу увидеть результат.

Если проблема в том, что у вас слишком много точек данных, вы можете:

1).График с использованием каждой n-й выборки данных.Поэкспериментируйте, чтобы найти n, которое приводит к желаемому виду.
2).Я обычно подгоняю кривые к своим данным и добавляю несколько редко размещенных маркеров к графикам подгонок, чтобы дифференцировать кривые.

0 голосов
/ 23 июля 2011

попробуйте уменьшить размер маркера.

x = rand(10000,1);
y = x + rand(10000,1);
plot(x,y,'b.','markersize',1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...