Tengo una interfaz gráfica de usuario que incluye una parcela. En esta parcela puedo añadir una anotación. Cuando la trama de datos se cambia el uso de la interfaz gráfica de usuario, edad anotación de los restos y el nuevo es trazada a lo largo de la edad.

Así que tengo que quitar la vieja anotación.
He probado el siguiente código, pero que no tiene efecto:

set(0,'showhiddenhandles','on')
% look for all axes in the figure of choice:
h_all_axes = findall(gcf,'type','axes');
% get the 'annotation layer' axes handle:
h_anno_axes = double(find(handle(h_all_axes),'-class','graph2d.annotationlayer'));
delete(h_anno_axes);
set(0,'showhiddenhandles','off');

annotationPos = [0.55 0.58 0.6 0.3];
htxtbox = annotation('textbox',annotationPos, ...
    'String'     ,strtextbox, ...
    'FontSize'   ,FontSize+1, ...
    'FitBoxToText', 'on', ...
    'EdgeColor', 'none', ...
    'FontName'   , 'Courier New');
  • no se puede guardar el identificador de la anterior anotación (cuando se cree) a una variable y el uso que de eliminar el uso de delete(previous_handle)?
  • Yo ya implementadas. Sin embargo, yo todavía estaría interesado en saber si es posible de otra manera.

3 Comentarios

  1. 7

    La solución más fácil es añadir una etiqueta específica para la anotación.

    %# create the annotation
    annotationPos = [0.55 0.58 0.6 0.3];
    htxtbox = annotation('textbox',annotationPos, ...
        'String'     ,strtextbox, ...
        'FontSize'   ,FontSize+1, ...
        'FitBoxToText', 'on', ...
        'EdgeColor', 'none', ...
        'FontName'   , 'Courier New', ...
        'Tag' , 'somethingUnique');
    
    %# delete the annotation
    delete(findall(gcf,'Tag','somethingUnique'))
  2. 1

    También me pareció que findobj no funciona aquí. El Padre de una anotación que parece ser un AnnotationPane, de los cuales sólo hay uno por la Figura tan lejos como puedo ver, que es como una hoja transparente superpuesto en la Figura, que uno escribe sobre.
    – Si no clf, que se limpia.
    – Si no cla, no.

    He encontrado esto porque en mi aplicación tengo en 3D de los ejes que el usuario puede rotar, y quería que el usuario preferido punto de vista, y el tamaño de la figura de la ventana en la pantalla, a la estancia de una ejecución a la siguiente, que necesita cla no clf. Pero me he encontrado con que las anotaciones (que cambió de ejecutar para ejecutar) acumulado en la Figura. Sin embargo esto funcionó para mí:

    % This eccentric method removes any existing annotations, since they
    % lie around on the Figure; cla didn't remove them. htemp.Parent is
    % 'the' AnnotationPane.
    htemp = annotation('textbox','Position',[0 0 0 0]);
    delete(htemp.Parent.Children);

    Explicación: El AnnotationPane no parece ser parte de la costumbre conjunto de objetos gráficos, así que «lo tengo en» por la creación de un maniquí de anotación y acceder a sus Padres. La existente en las anotaciones se almacenan en la matriz htemp.Parent.Children (puede utilizar esta lista de ellos), por lo que delete trabaja en esto.

    MatheWorks, usted puede hacer mejor que esto!

  3. 0

    Usted debe tomar un vistazo a la findobj función. Siempre y cuando usted sabe lo suficiente de las propiedades del objeto que se quiere encontrar usted debe ser capaz de devolver el identificador de usar este (si no los guarde en una variable) y eliminar de esa manera.

    • Las anotaciones están ocultos, por lo findobj no funciona.

Dejar respuesta

Please enter your comment!
Please enter your name here