2 votes

En utilisant colorbar et nested tiledlayout

Je suis en train de générer des mises en page en tuiles imbriquées et d'y associer une barre de couleurs.

Il existe une façon de mettre une barre de couleurs à l'extérieur d'une seule mise en page en tuiles (ici):

Cependant, cela ne fonctionne pas pour les mises en page en tuiles imbriquées.

Voici un exemple:

figure; 
tl = tiledlayout(4, 1);

for ii = 1:4
    tl2 = tiledlayout(tl, 1, ii);
    tl2.Layout.Tile = ii;
    for jj = 1:ii
        nexttile(tl2,jj); 
        imagesc; axis tight;
    end
end

cb = colorbar();
cb.Layout.Tile = 'east';

(Bien sûr, ceci est un exemple minimal. Dans l'exemple, je pourrais imbriquer les mises en page en tuiles dans des colonnes au lieu de lignes - mais cela ne convient pas à mon code réel.)

Je souhaiterais que la barre de couleurs apparaisse sur le côté de tous les axes. Similaire à l'exemple présenté ci-dessus, mais pour les mises en page en tuiles imbriquées. Comment cela pourrait-il être fait?


Tentatives infructueuses jusqu'à présent:

  • Changer le parent de la barre de couleurs pour la mise en page en tuiles externe (tl) n'est pas autorisé lors de l'instanciation i.e. utiliser cb = colorbar('Parent', tl); résulte en une erreur.
  • Changer le parent de la barre de couleurs en tl n'est pas non plus autorisé après qu'elle soit générée (set(cb,'Parent',tl);) car la barre de couleurs doit avoir le même parent que ses axes.
  • Changer le parent à la fois des axes et de la barre de couleurs modifie la mise en page des axes (c'est-à-dire en ajoutant set(gca, 'Parent', tl); set(cb, 'Parent', tl); à la fin).

2voto

wwweagle Points 303

Si des tuiles imbriquées sont vraiment nécessaires, vous pouvez faire quelque chose comme :

figure; 
t1=tiledlayout(1, 2);
t2=tiledlayout(t1,4,4);
for ii = 1:4
    nexttile(t2,(ii-1)*4+ii,[1,5-ii]);
    imagesc;
end

ax=nexttile(t1,2);
cbh=colorbar(ax);
ax.Visible="off";
cbh.Position(1)=ax.Position(1);
cbh.AxisLocation='in';

Vous pouvez également commencer avec une disposition de tuiles en grille et exploiter la fonction nexttile() avec l'option span.

figure; 
tiledlayout(4, 5);
for ii = 1:4
    nexttile((ii-1)*5+ii,[1,5-ii]);
    imagesc;
end
ax=nexttile(5,[4,1]);
cbh=colorbar(ax);
ax.Visible="off";
cbh.Position(1)=ax.Position(1);
cbh.AxisLocation='in';

La barre de couleur aura besoin de quelques ajustements manuels dans les deux cas, les résultats sont similaires :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X