Matlab: нанесите точки на график и сделайте их доступными для отображения информации о них.

У меня есть такие моменты:

matrix = rand(6, 4)
0.8147    0.2785    0.9572    0.7922
0.9058    0.5469    0.4854    0.9595
0.1270    0.9575    0.8003    0.6557
0.9134    0.9649    0.1419    0.0357
0.6324    0.1576    0.4218    0.8491
0.0975    0.9706    0.9157    0.9340

первые два столбца - это значения x и y, которые отображаются в виде точек через

plot(matrix(:, 1), matrix(:, 2), '*r'

Теперь я хочу выяснить следующее: всякий раз, когда я нажимаю на определенную точку на графике, я хочу, чтобы информация из столбцов 3 и 4 отображалась в виде текста справа от точки в поле, например. с некоторым текстом, например. information 1: VALUE_COL3, information 2: VALUE_COL4. Как этого добиться? Я подумал об атрибуте ButtonDownFcn, а затем проверил точку, по которой щелкнули, и сопоставил ее. Но есть ли более простой способ сделать это?

Спасибо!


person tim    schedule 09.12.2011    source источник


Ответы (2)


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

По умолчанию всплывающая подсказка отображает простую информацию о точках, а именно их координаты X и Y. Но вы можете настроить отображаемый текст так, как хотите, получив дескриптор объекта datacursormode фигуры, используемой для построения, и установив его UpdateFcn. Обратный вызов UpdateFcn выполняется для определения текста, отображаемого во всплывающей подсказке — в вашем случае он может получить соответствующие значения из третьего и четвертого столбцов вашей матрицы, соединить их вместе со строкой «информация» и вернуть ее для отображения.

См. этот пример в документации, чтобы увидеть, как это можно сделать более подробно. деталь.

person Sam Roberts    schedule 09.12.2011
comment
спасибо это круто! Работает очень хорошо при передаче входных аргументов в функцию обратного вызова, выберите соответствующую строку, а затем отобразите информацию! - person tim; 09.12.2011

Хотя метод Сэма, вероятно, является здесь правильным решением, я хотел бы предложить другое (хотя это скорее «хак», чем правильное решение).

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

x = [1:10];
y = x.^2;

plot(x,y); hold on;
h = plot(x(5), y(5),'ro'); %% save the handle to the point we want to annotate

hcmenu = uicontextmenu;
item1 = uimenu(hcmenu, 'Label', 'info 1');
item2 = uimenu(hcmenu, 'Label', 'info 2');
item3 = uimenu(hcmenu, 'Label', 'info 2');

set(h, 'uicontextmenu', hcmenu);

Когда вы щелкаете правой кнопкой мыши точку "o", вы получаете контекстное меню:

Производит это...

Дополнительную информацию можно найти на сайте Mathwork.

person nimrodm    schedule 09.12.2011