2010-03-31 3 views
3

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

Спасибо

+0

Если вам нужен лучший ответ, пожалуйста, предоставьте пример данных, как вы их составляете, и усредняете то, что вы хотите рассчитать. – yuk

+0

Думаю, он пытается это сделать на сюжете. Таким образом, нет, нет, что Matlab не может сделать это на сюжете. – Pyrolistical

ответ

1

Самый простой способ, если вы не хотите делать это программно, - это использовать кисть данных и статистику.

Для создания моих данных я использовал plot(rand(1,200)). После этого зайдите в «Инструменты»> «Статистика данных». Y-mean - это то, что вы ищете.

alt text http://www.thinkextensively.com/misc/stackoverflow/images/matlab2.png

Чтобы получить среднее значение из определенного набора данных, выберите данные, которые вы хотите, а затем в меню выберите Сервис> Чистить> Создать новую переменную. , .. Это создает переменную, содержащую данные в коробке. Чтобы получить среднее значение mean(ans). Второе значение в векторе - это среднее Y. alt text http://www.thinkextensively.com/misc/stackoverflow/images/matlab1.png

+0

Если я правильно помню, вам даже не нужно чистить сначала. Вы можете перейти непосредственно к Tools-> Data Statistics и получить статистику по всему сюжету. – mtrw

+0

Вы абсолютно правы ... щетка фактически не влияет на статистику данных. – Jay

0

не очень понятно, в среднем, какие ценности вы хотите вычислить. Я предполагаю, что это y-координаты.

Я бы использовал функцию RBBOX, чтобы выбрать набор точек на графике.

Попробуйте этот код:

% sample data 
data = rand(1,100); 
datax = 1:numel(data); 

% draw simple plot 
plot(data,'.') 

% select the points with mouse and get coordinates 
k = waitforbuttonpress; 
point1 = get(gca,'CurrentPoint'); % button down detected 
finalRect = rbbox;     % return figure units 
point2 = get(gca,'CurrentPoint'); % button up detected 
point1 = point1(1,1:2);    % extract x and y 
point2 = point2(1,1:2); 
pmin = min(point1,point2); 
pmax = max(point1,point2); 

% find the data selected and get average of y values 
idx = data >= pmin(2) & data <= pmax(2) & datax >=pmin(1) & datax <= pmax(1); 
dataAverage = mean(data(idx)); 

Я должен требовать большую часть этого кода из rbbox документации.

2

Другой вариант - использовать data brush.

Нажмите на значок кисти на панели инструментов рисунка и выберите выделение. Затем выберите в меню Tools-Brushing-Create новую переменную. Вы можете оставить имя переменной по умолчанию ans. Эта переменная будет содержать координаты X и Y всех выбранных точек. Затем просто запустите mean(ans(:,2)), чтобы получить среднее значение Ys.

+0

Думаю, вы хотите сказать «кисть». – Jonas

+0

@ Джонас: Спасибо, исправлено. – yuk

0

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

С plotAverage от Matlab File Exchange вы можете сделать это довольно легко.

%# plot some data 
figure 
plot(randn(100,5)) 

%# add the average line at every 5th point 
[plotHandles, average] = plotAverage([],5:5:95); 

%# and you have a line on the plot, and its handles and data in the workspace.