Sé que hay una función denominada anotación puede trazar flechas o flechas dobles. Pero la anotación sólo puede parcela normalizado a la unidad. Por ejemplo:

annotation('arrows',[x1 x2],[y1 y2])

Aquí, [x1, x2] debe ser una relación de número menor que uno.

Así, mi pregunta es ¿cómo puedo parcela flechas con un verdadero valor en lugar de un valor normalizado?

Me pregunto si hay alguna otra función puede acercarse a esta o hay alguna función que puede obtener el valor del eje de la figura, de modo que puede ajustar el verdadero valor en un valor normalizado.

InformationsquelleAutor datcn | 2012-07-16

8 Comentarios

  1. 5

    Sólo he descubierto este método, ya que no quiero tener que molestarse con normalización de las unidades. Utilizar el látex intérprete:

    figure
    plot([1:5],[1:5]*3,'.-')
    %//Say I want to put an arrow pointing to the location, [3 9]    
    text(2.94,8.3,'\uparrow','fontsize',20)
    text(2.8,7.8,'point [3,9]')

    Para hacer que la flecha más, el uso de un mayor tamaño.

    Pros

    • Más fácil, más rápido y más rápido que el uso normalizado de las unidades de
    • No necesita instalar cualquiera de las funciones (bueno para nosotros la gente perezosa..)
    • haciendo uso de la intérprete de Látex, hay toda una serie de flechas (arriba, abajo, izquierda, derecha y de otros ángulos (ver La lista de símbolos)

    Contras

    • Definitivamente necesidades de ensayo y error/ajustar para obtener la ubicación correcta de la cabeza de flecha relativa a la PDI.
    • Hay un control limitado sobre la longitud de la flecha
    • Algunos de látex comandos no son entendidos por el intérprete (boo).
  2. 12

    Para el posicionamiento de anotaciones, Matlab ofrece la función dsxy2figxy para convertir los datos de puntos en el espacio para normalizada de coordenadas del espacio. Sin embargo, por las razones que fueren, la función no está incluido en el Matlab distribución y tiene que ser «creado» en primer lugar.

    Copia la siguiente línea en la ventana de comandos y ejecutar para abrir la función en el editor.

    edit(fullfile(docroot,'techdoc','creating_plots','examples','dsxy2figxy.m'))

    Utilizar la función dsxy2figxy guardarlo en algún lugar en su matlab ruta de búsqueda.

    Por favor, encontrar las instrucciones completas para la función dsxy2figxy en matlab-central: http://www.mathworks.de/help/techdoc/creating_plots/bquk5ia-1.html

    • Gracias por tu respuesta. Es útil para mí.
    • Alternativamente, addpath(fullfile(docroot,'techdoc','creating_plots','examples')) también pone el ejemplo de la función en el path de MATLAB (suponiendo que el archivo existe).
  3. 10

    Aunque annotation utiliza normalized como unidades predeterminadas, puede asociar estos objetos a la actual ejes (gca) y el uso de unidades de datos para la configuración de X y Y propiedades.

    Aquí es un ejemplo de representación de una sola flecha.

    plot(1:10);
    ha = annotation('arrow');  % store the arrow information in ha
    ha.Parent = gca;           % associate the arrow the the current axes
    ha.X = [5.5 5.5];          % the location in data units
    ha.Y = [2 8];   
    
    ha.LineWidth  = 3;          % make the arrow bolder for the picture
    ha.HeadWidth  = 30;
    ha.HeadLength = 30;

    Cómo parcela de flecha con las coordenadas de los datos en Matlab?

    • Esto parece que funciona bastante bien si las flechas están en horizontal o vertical, pero la punta de flecha parece estar desalineados si apunta en otras direcciones.
  4. 8

    Para cualquier persona que viene a través de este tema buscando para dibujar flechas en «el espacio de los datos», en lugar de en unidades relativas a la figura y/o ejes, recomiendo la flecha.m desde el archivo de intercambio.

  5. 2

    Si recuerdo correctamente, es necesario calcular la posición de los ejes en relación a la figura.

    se debe ir como:

    %% example plot
    clf
    plot(rand(5,2)*5)
    %% get info specific to the axes you plan to plot into
    set(gcf,'Units','normalized')
    set(gca,'Units','normalized')
    ax = axis;
    ap = get(gca,'Position')
    %% annotation from 1,2 to 3,4
    xo = [1,3];
    yo = [2,4];
    xp = (xo-ax(1))/(ax(2)-ax(1))*ap(3)+ap(1);
    yp = (yo-ax(3))/(ax(4)-ax(3))*ap(4)+ap(2);
    ah=annotation('arrow',xp,yp,'Color','r');

    Nota compensación Fija en el cálculo original – ap(3) ap(4) son la anchura y la altura de la acg, no de la esquina posiciones

  6. 1

    Después de crear los objetos de anotación debe establecer la propiedad Unidades a un valor absoluto. Ejemplo:

    arrowObj = annotation('arrow', [0.1 0.1], [0.5 0.5]);
    set(arrowObj, 'Units', 'centimeters');
    set(arrowObj, 'Position', [1 1 3 5]);
    • La ventaja de esta solución es que la flecha se queda fijo el tamaño y la posición con respecto a la esquina inferior izquierda cuando el tamaño de la figura. Además, sólo el primer argumento a annotation(..) es necesario, y el otro normalmente útil elección de las unidades es 'pixels'.
    • Otra nota importante: el 'Position' se debe establecer después de configuración de 'Units', pero se puede hacer en una sola línea: set(arrowObj, 'units', 'pixels', 'position', [100 100 200 400]), en cuyo caso también, la 'units' debe aparecer antes de 'position'.
  7. 0

    Un enfoque sería definir una punta de flecha en el eje de las unidades:

    Ax=[0 -0.003 0.003 0];       % (Ax,Ay) form an upward pointing arrowhead.
    Ay=[0.01 0.0060 0.0060 0.01];
    Ax=Ax-mean(Ax);  % center it on zero
    Ay=Ay-mean(Ay);

    A continuación, en el deseado de punta de flecha índice en una curva vv, calcular

    x1=vv(in,1); y1=vv(in,2);
    x2=vv(in+1,1); y2=vv(in+1,2);
    u=x2-x1;
    v=y2-y1;
    th=-pi/2+atan2(v,u);
    R=[cos(th) -sin(th); sin(th) cos(th)];   % Rotation matrix for local slope of vv.
    A=R*[Ax;Ay];    % Rotate the arrowhead.
    patch(x1+A(1,:),y1+A(2,:),'r','LineWidth',0.01)   % plot rotated arrowhead at (x1,y1).
    plot(x1+A(1,:),y1+A(2,:),'r','LineWidth',0.01)    % Kludge to make boundary red too (I'm sure there is a more elegant way).

    Trabajado para mí, para mi caso particular.

  8. 0

    Puede utilizar la «flecha» del componente en el (bien documentado) DaVinci Dibujar cuadro de herramientas (revelación completa: escribí/vender el cuadro de herramientas, a pesar de que las flechas son gratis).

    Ejemplo de la sintaxis y de salida de ejemplo se muestran a continuación.

    davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )

    Cómo parcela de flecha con las coordenadas de los datos en Matlab?

Dejar respuesta

Please enter your comment!
Please enter your name here