Matlab: ¿Cómo guardar múltiples puntos de variable desde clics de ratón (con ‘ButtonDownFcn’) desde un gráfico en el espacio de trabajo?
Tengo una figura con algunas líneas verticales agregadas, así:
Me gustaría poder hacer clic en las líneas con el botón del mouse y guardar el índice de cada línea clicada. El siguiente script funciona, pero no sé cómo guardar cada índice en un arreglo. El ‘IndInWorkSpace’ cambia para cada clic.
figure
x = rand(1,41);
y = 1:41;
H(1)= plot(x,y,'r.');
H(2)= line([x(21) x(21)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(3)= line([x(3) x(3)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(4)= line([x(15) x(15)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
set(H, 'ButtonDownFcn', {@LineSelected, H})
function [indices] = LineSelected(ObjectH, H)
set(ObjectH, 'LineWidth', 4);
set(H(H ~= ObjectH), 'LineWidth', 2);
% Get x and y data of the highlighted lines
ind = ObjectH.XData;
assignin('base','IndInWorkSpace',ind);
end
¡Cualquier ayuda será muy apreciada! ¡Gracias!
davy.ai
Para almacenar el índice de cada línea seleccionada en un arreglo, puede modificar la función LineSelected de la siguiente manera:
Este código encuentra primero el índice de la línea destacada en el arreglo
H
, y luego obtiene el arreglo actual de índices almacenados del espacio de trabajo utilizandoevalin('base', 'Indices')
. Luego agrega el nuevo índice al arreglo y almacena el arreglo actualizado de nuevo en el espacio de trabajo utilizandoassignin('base', 'Indices', indices)
.Para inicializar el arreglo
Indices
, puede agregar la siguiente línea de código antes de llamar aset
en su script principal:Esto crea un arreglo vacío llamado
Indices
en el espacio de trabajo, que será actualizado por la funciónLineSelected
.