2013-07-18 8 views
1

У меня есть два графика в matlab, где я построил координаты x и y. Если у меня есть эти два сюжета, можно ли сравнивать, если сюжеты совпадают? Могу ли я получить номера, чтобы сказать, насколько они соответствуют?Сравнить Графики в matlab

Обратите внимание, что графики могут быть правыми/левыми/вверх/вниз сдвинуты по графику (поворот оси не является проблемой), масштабируется/вращается (я также хотел бы знать, если он перекошен, но на данный момент это не является обязательным).

Не требуется проверять цветовые элементы, инверсию цвета и любые другие сложные графические свойства, чем упомянутые выше основные.

Если мне не хватает матала, я бы приветствовал другие инструменты.

Обратите внимание, что я не могу просто взять абсолютную разницу в значениях x и y. Я мог бы получить x-абсолютную разницу среднего и y-абсолютную разницу, а затем среднюю, но мне нужна общая ошибка. Мне нужно сравнить график.

Графы для сравнения.

enter image description here

EDIT

Прямая корреляция не работает для меня.

Для другого набора данных: У меня есть корреляция .94. Это очень важно для данных. заметив, что одни данные колеблются все меньше и быстрее других.

enter image description here

+0

Можете ли вы разместить примеры графиков? – Dan

+0

Это займет некоторое время. Но я постараюсь опубликовать его. – user2178841

+0

И ожидаемый результат, как вы думаете, выход должен быть для графов примера? –

ответ

3

Вы можете получить доступ к проложенным данные с этим кодом

x = 10:100; 
y = log10(x); 
plot(x,y); 

h = gcf; 
axesObjs = get(h, 'Children'); %axes handles 
dataObjs = get(axesObjs, 'Children'); %handles to low-level graphics objects in axes 
objTypes = get(dataObjs, 'Type'); %type of low-level graphics object 
xdata = get(dataObjs, 'XData'); %data from low-level grahics objects 
ydata = get(dataObjs, 'YData'); 

Затем вы можете сделать корреляцию между XData и ydata, например, или какой-либо сравнения. Коэффициент R будет показывать процентное совпадение.

[R,P] = corrcoef(xdata, ydata); 

Вас также будет интересовать сравнение пределов осей в осях графического тока. Например

R = (diff(get(h_ax1,'XLim'))/diff(get(h_ax2,'XLim'))) + ... 
(diff(get(h_ax1,'YLim'))/diff(get(h_ax2,'YLim'))) 

, где h_ax1 является ручка первого ножа и h_ax2 для второго. Здесь вы проведете сравнение значений (XLim + YLim). Однако возможные сравнения с различными свойствами gca действительно огромны.

EDIT

Для сравнения двух наборов точек, вы можете использовать другие показатели, чем аналитические отношения. Я думаю о расстояниях или конвергенциях, таких как Hausdorff distance. Сценарий доступен here в центральном центре Matlab. Я использовал такое расстояние, чтобы сравнить формы букв. На странице wikipedia важна секция «Приложения» (детектор края для толстых фигур, но это может не укладываться в вашу конкретную проблему).

+0

см. Мое редактирование. это не сработает для меня. – user2178841

+1

Я отредактировал свой ответ, чтобы включить общие расстояния формы, которые могут быть более подходящими для вашей проблемы. – marsei

+0

Это звучит лучше. Благодарю. – user2178841

Смежные вопросы