web-dev-qa-db-fra.com

Matlab - Comment faire une figure actuelle? Comment faire un axe actuel?

Si f est le pseudonyme, je voulais utiliser plot3(..) comme si j’utilisais plot(..), mais cela ne fonctionnait pas:

>> plot3(f, t, real(Y), imag(Y))
Error using plot3
Vectors must be the same lengths.

Ensuite, j'ai compris que la façon de faire est de:

  1. Commencez par définir le chiffre correspondant actuel .

  2. Ensuite, utilisez la fonction plot3(..).

Je peux trouver ce que la figure actuelle utilise gcf, mais comment puis-je créer une figure actuelle (via son handle)?

11
Evgeni Sergeev

Cette méthode a ma préférence personnelle:

set(0, 'currentfigure', f);  %# for figures
set(f, 'currentaxes', axs);  %# for axes with handle axs on figure f

parce que ces commandes sont leur propre documentation. je trouve 

figure(f)

et ainsi de suite en première lecture: créez-vous une nouvelle figure? ou simplement rendre actif un existant? -> plus de lecture du contexte est nécessaire.

24
Rody Oldenhuis

C’est aussi simple que de charger la f dans la commande figure(..):

figure(f)    %Makes the figure current.

Aussi, si j'ai fait quelque chose comme ça:

f = figure('IntegerHandle','off');    % With unique, non-reusable handle.
top = subplot(2, 1, 1);
bot = subplot(2, 1, 2);

Ensuite, je peux mettre à jour les axes top ou bottom en émettant une commande comme celle-ci:

subplot(top);

Cela fonctionne aussi:

axes(top);

Mais les deux types de poignées ne peuvent pas être mélangés: axes(..) et subplot(..) fonctionnent sur les poignées d'axes, tandis que figure(..) fonctionne sur les poignées de figure.

8
Evgeni Sergeev

Tandis que d’autres vous ont fourni exactement ce que vous avez demandé (comment créer un axe ou calculer l’axe actuel). Ma méthode préférée pour traiter cela est de spécifier explicitement le parent de votre parcelle dans l'appel à plot3.

Si vous examinez la documentation _, vous verrez que vous pouvez spécifier les axes parents comme premier paramètre de la fonction. Si vous semblez avoir essayé de faire cela dans votre exemple, mais que vous avez fourni un descripteur à un figure plutôt qu'à un axes.

f = figure()
ax = axes('Parent', f)
im = plot3(ax, X, Y, Z);

Alternativement, je préfère la solution explicite

im = plot3(X, Y, Z, 'Parent', ax)

La bonne chose à propos de cette spécification explicite de paramètre/valeur du parent est qu’elle est acceptée par les objets graphiques all. Des fonctions telles que plot et plot3 sont en fait des fonctions d'assistance qui enveloppent la fonctionnalité de line et permettent la convention de passer en premier le parent. L'approche paramètre/valeur est largement acceptée, que vous utilisiez une fonction de niveau supérieur (plot, plot3, imshow) ou des objets de niveau inférieur (line, image, etc.).

Les deux avantages ici sont que vous supprimez la surcharge de MATLAB qui essaie de déterminer où placer votre graphique et que cela évite à MATLAB de modifier le chiffre affiché, ce qui oblige à effectuer un nouveau rendu, l'une des tâches les plus lentes de MATLAB.

4
Suever

donnez le nom de la poignée à la figure, donnez-vous un petit exemple

  f1 = figure;
  imshow(image1);
  f2 = figure;
  imshow(image2);
  % edit image 1
  figure(f1);
  text(2,3,'done');
0
neouyghur