Как показать информацию о выбранной точке на разброс - в текстовое поле в GUIDE - PullRequest
0 голосов
/ 24 октября 2019

У меня есть структурный массив информации, например

S.a { 'smth1', 'smth2.... }
S.b { x1, x2, .... }
S.c {y1, y2, ....}
S.d ...... etc
scater(S.b, S.c) 

И теперь, когда я выбираю точку (например, x1, y1) на точечной диаграмме - я хочу показать информацию об этой точке -в текстовое поле, например

"x1 = ... y1 = ....

smth1 = .... и т. д.

1 Ответ

0 голосов
/ 24 октября 2019

Здесь я пропущу всю часть РУКОВОДСТВА, т. Е. Перенесу полученное значение в какое-либо текстовое поле, и сосредоточусь на том, как извлечь нужные данные.

Есть функция ginputв MATLAB, который вы можете использовать для захвата x, y координат курсора мыши в пределах фигур MATLAB. Итак, теперь идея состоит в том, чтобы захватить x, y координаты, щелкнув внутри диаграммы рассеяния, установить некоторый допуск (например, 0.1) и найти совпадающие x, y координаты в S.a и S.b в пределах этого допуска.

Я собрал следующий пример кода:

% Set up proper struct
S.a = {'First Point', 'Point #2', 'Point No. 3'};
S.b = [3.0, 5.2, 8.5];
S.c = [1.1, 0.4, 2.1]

% Show figure
hFig = figure;
scatter(S.b, S.c);
xlim([0 10]);
ylim([0 3]);
text(0.6, 2.7, 'Press ESC to exit', 'FontSize', 16);

while (true)

  % Get x, y coordinates and possibly pressed button
  [x, y, button] = ginput(1);

  % If ESC button was pressed, exit loop
  if (button == 27)
    break;
  end

  % Display x, y coordinates  
  fprintf('x: %f, y: %f\n', x, y);

  % Find matching point within a certain tolerance
  idx = find((abs(S.b - x) <= 0.1) & (abs(S.c - y) <= 0.1));

  % If an index was found, display description
  if (~isempty(idx))
    fprintf('Matching point: %s\n-----------------------------\n', S.a{idx});
  else
    fprintf('No matching point\n------------------------------\n');
  end

end

Для целей визуализации это бесконечный цикл, фиксирующий координаты x, y один раз за итерацию. Поскольку вы можете использовать ginput также для определения возможных нажатых клавиш, условием выхода является нажатие клавиши ESC. Остальное - это описанное выше нахождение возможных совпадающих координат из S.a и S.b и некоторое форматирование вывода.

После загрузки рисунка некоторые щелчки внутри диаграммы рассеяния дают, например:

x: 2.769585, y: 1.109754
No matching point
------------------------------
x: 3.023041, y: 1.100948
Matching point: First Point
-----------------------------
x: 6.317972, y: 1.189010
No matching point
------------------------------
x: 5.211982, y: 0.414066
Matching point: Point #2
-----------------------------
x: 8.529954, y: 2.113658
Matching point: Point No. 3
-----------------------------

Возможно найденное значение S.a{idx} теперь просто нужно отправить в желаемое текстовое поле.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...