it-swarm.dev

Inverser l’axe y dans MATLAB

Existe-t-il un moyen de renverser l’axe des ordonnées dans les diagrammes matlab afin que la direction positive de l’axe des ordonnées soit orientée vers le bas?

(Je vous en prie; s'il vous plaît ne dites pas, imprimez-le, puis retournez le papier ;-)

31
Rook

La propriété 'YDir' axes peut être 'normal' ou 'reverse'. Par défaut, il s'agit de 'normal' pour la plupart des tracés, mais certains tracés le changeront automatiquement en 'reverse', tel que les fonctions image ou imagesc .

Vous pouvez définir la direction de l'axe y d'un axe avec la fonction set ou l'indexation de points (dans les versions MATLAB les plus récentes):

h = gca;  % Handle to currently active axes
set(h, 'YDir', 'reverse');
% or...
h.YDir = 'reverse';

Certaines autres réponses me déconcertent de dire que la propriété 'YDir' a disparu ou donne une erreur. Je n'ai observé aucun comportement de ce type dans les versions de MATLAB de 2013, 2014 ou 2016. Il n'y a que deux pièges potentiels que j'ai rencontrés:

  • La propriété ne peut pas être définie avec un tableau de cellules, uniquement une chaîne de caractères:

    >> set(gca, 'YDir', {'reverse'});
    Error using matlab.graphics.axis.Axes/set
    While setting property 'YDir' of class 'Axes':
    Invalid enum value. Use one of these values: 'normal' | 'reverse'.
    

    bien que cela fonctionne:

    set(gca, {'YDir'}, {'reverse'});  % Property name is also a cell array
    
  • La fonction gca ne peut pas être utilisée de façon interchangeable en tant que descripteur lors de l'indexation de points (c'est pourquoi je l'ai d'abord enregistrée dans une variable h dans l'exemple ci-dessus):

    >> gca.YDir
    Undefined variable "gca" or class "gca.YDir". 
    >> gca.YDir = 'reverse'  % Creates a variable that shadows the gca function
    gca = 
      struct with fields:
    
        YDir: 'reverse'
    

Enfin, si vous voulez du code qui permette de basculer la propriété 'YDir' quel que soit son état actuel, vous pouvez le faire:

set(gca, 'YDir', char(setdiff({'normal', 'reverse'}, get(gca, 'YDir'))));
% or...
h = gca;
h.YDir = char(setdiff({'normal', 'reverse'}, h.YDir));
54
gnovice

La commande

axis ij

Va également inverser l’axe des Y (négatif au-dessus de l’axe des x; positif en dessous).

9
kashiraja

Au lieu de YDir (pour une raison que je ne vois pas encore), vous pouvez faire pivoter les axes avec view . Pour inverser l’axe des ordonnées, utilisez

view(0,-90);
0
Steve