У меня есть простой график, на котором много точек данных, когда у меня есть график. Есть ли способ, которым я могу просто щелкнуть по всем этим точкам и позволить Matlab дать мне их среднее значение?
Спасибо
У меня есть простой график, на котором много точек данных, когда у меня есть график. Есть ли способ, которым я могу просто щелкнуть по всем этим точкам и позволить Matlab дать мне их среднее значение?
Спасибо
Самый простой способ, если вы не хотите делать это программно, — использовать кисть данных и статистику.
Я использовал plot(rand(1,200))
для генерации своих данных. После того, как он будет построен, перейдите в «Инструменты»> «Статистика данных». Y-значение - это то, что вы ищете.
http://www.thinkextensively.com/misc/stackoverflow/images/matlab2.png
Чтобы получить среднее значение определенного набора данных, выберите нужные данные, а затем в меню выберите «Инструменты» > «Очистка» > «Создать новую переменную». . .. Это создает переменную, содержащую упакованные данные. Чтобы получить среднее значение, выполните mean(ans)
. Второе значение в векторе — это среднее значение Y. http://www.thinkextensively.com/misc/stackoverflow/images/matlab1.png
Другой вариант — использовать кисть данных.
Щелкните значок кисти на панели инструментов фигуры и сделайте выбор. Затем выберите в меню Tools-Brushing-Create new variable. Вы можете оставить имя переменной по умолчанию ans
. Эта переменная будет содержать координаты X и Y всех выбранных точек. Затем просто запустите mean(ans(:,2))
, чтобы получить среднее значение Ys.
Не очень четкое среднее значение, которое вы хотели рассчитать. Я предполагаю, что это 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.
Я предполагаю, что вы хотите построить среднее значение (или, по крайней мере, рассчитать его) из уже нанесенных данных.
С 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.