2013-05-26 5 views
2

J'ai un problème pour définir la position des sous-placettes. J'utilise subplot à l'intérieur d'une boucle. Mais quand j'essaie de faire une position spéciale aux sous-parcelles, cela ne fonctionne pas. Ceci est mon code:Comment positionner des sous-placettes dans MATLAB?

h=subplot(2,2,3); 
set(h,'position',[0.15 0.15 0.4 0.4]); 
plot(d3,S3,'*','Color',colors(i,:)); 

J'ai essayé différentes méthodes mais ne peut pas voir la troisième intrigue secondaire, et parfois l'intrigue ne montre qu'une seule itération.

Comment puis-je résoudre ce problème?

Répondre

2

Cela crée 3 sous-placettes. La position est [largeur de la partie inférieure gauche]). J'essaie généralement de faire en sorte que gauche + largeur < 1 et ce bas + hauteur < 1 (pour la première sous-intrigue).

figure 
set(subplot(3,1,1), 'Position', [0.05, 0.69, 0.92, 0.27]) 
set(subplot(3,1,2), 'Position', [0.05, 0.37, 0.92, 0.27]) 
set(subplot(3,1,3), 'Position', [0.05, 0.05, 0.92, 0.27]) 

Cela fonctionne bien si vous avez seulement 1 colonne de sous-parcelle. Pour deux colonnes de intrigue secondaire est d'utiliser ceci:

figure 
subplot(4,2,1) 
plot(...) 
set(gca, 'OuterPosition', [0, 0.76, 0.49, 0.23]) 
subplot(4,2,2) 
plot(...) 
set(gca, 'OuterPosition', [0.48, 0.76, 0.49, 0.23]) 
subplot(4,2,3) 
... 
+0

Merci beaucoup – hola

+0

@m_power Ca vous me dites comment vous calculez les valeurs du paramètre set. J'ai parcouru la documentation dans matlab mais je n'ai pas pu comprendre – roni

3

Cela se produit probablement en raison des valeurs de position conflictuelles entre le numéro de plaque de sous-parcelle (c'est-à-dire subplot(2,2,3) etc.) qui a sa propre position par défaut et la position que vous avez entrée.

Ainsi, au lieu utiliser juste intrigue secondaire avec les informations de position comme suit:

subplot('position', [0.15 0.15 0.4 0.4]) 
plot(d3,S3,'*','Color',colors(i,:)); 
subplot('position', [... ... ... ...]) 
plot(...); 

voir aussi this SO discussion ...

+0

J'ai essayé, mais vous obtiendrez le même problème .... – hola

+0

s'il vous plaît ajouter le code que vous avez essayé sp, nous pouvons voir ce qui est la question. – bla

2

Selon subplot

intrigue secondaire ('Position', [gauche largeur de fond height]) crée un axe à la position spécifiée par un vecteur à quatre éléments. Les valeurs gauche, inférieure, largeur et hauteur sont coordonnées normalisées dans la plage de 0,0 à 1,0.

Notez également que les valeurs gauche et inférieure sont calculées à partir du bas à gauche de la figure.


Voici un exemple d'utilisation de sous-tracé dans une boucle for.

figure 

% subplot dimension 
n1 = 2; % number of rows 
n2 = 3; % number of columns 

% These values would define the space between the graphs 
% if equal to 1 there will be no space between graphs 
nw = 0.9; % normalized width 
nh = 0.9; % normalized height 

for k1 = 1:n1 
    for k2 = 1:n2 
     subplot(n1,n2,(k1-1)*n2 + k2,... 
      'position', [(1-nw)/n2/2 + (k2-1)/n2, (1-nh)/n1/2 + 1-k1/n1,... 
      nw/n2 nh/n1]); 
     % plot something 
     plot(rand(5)); 
     % turn off the labels if you want 
     set(gca, 'XTick', []); 
     set(gca, 'YTick', []); 
    end 
end 

Espérons que cela aide.

+0

Merci beaucoup – hola

+0

Dans Matlab 2016b: Le premier tracé est redimensionné, lorsque le deuxième graphique est généré et reste trop petit. Que faut-il changer pour le faire fonctionner dans Matlab 2016b? –

Questions connexes