2017-07-25 2 views
2

J'ai beaucoup de graphiques sous forme de fichier fig et je veux changer la taille de la police et la couleur de ceux-ci dans une fonction. Dans cet exemple, c'est un graphique à barres.Modifier la couleur du graphique à barres après avoir rouvert le fichier de la figure dans MATLAB

Ceci est mon code:

function changeproperties(fontsize, figdata) 
    openfig(figdata); 
    set(gca,'FontSize',fontsize); 
    set(gca,'FaceColor','r'); 
    saveas(gcf,'graph.pdf','pdf'); 
end 

Il change le fontsize, mais pas la couleur de la barre.

Le message d'erreur est la suivante:

erreur en utilisant matlab.graphics.axis.Axes/set
Il n'y a pas de propriété FaceColor sur la classe Axes.

Erreur dans changeallfonts (ligne 4)
set(gca,'FaceColor','r');

gcf ne fonctionne pas non plus. Quelle est la faute?

+3

Vous pouvez trouver que vous devez utiliser 'get (gca, 'Children')' pour obtenir les objets de la barre – Wolfie

Répondre

2

Fontsize est la propriété des axes; FaceColor ne l'est pas. Entrez le gca dans la fenêtre de commande pour voir cela. FaceColor est la propriété de ses enfants comme hinted par Wolfie.


Vous avez besoin du handle de bar à la place.

Un example:

y = [75 91 105 123.5 131 150 179 203 226 249 281.5]; 
h=bar(y); 
set(h,'FaceColor','r'); %or h.FaceColor='r' for MATLAB R2014 and later 

enter image description here

Puisque vous utilisez des fichiers de figuiers ici, vous n'avez pas la poignée de bar afin que vous puissiez utiliser la poignée d'axes comme celui-ci:

ax=gca; 
set(ax.Children,'FaceColor','r'); 
3

Vous dites que vous ouvrez les fichiers .fig enregistrés, vous devez donc avoir le bon handle sur l'objet barre (enfants des axes) en arrière (c.-à-d. après qu'il existe déjà, et pas lors de sa création). Une façon assez robuste pour le faire est d'utiliser findobj:

function changeproperties(fontsize,figdata) 
    openfig(figdata); 
    set(gca,'FontSize',fontsize); 
    b = findobj(gca,'Type','Bar'); % returns a handle to the bar 
    set(b,'FaceColor','r'); % changes all bars in the current axes 
    saveas(gcf,'graph.pdf','pdf'); 
end 

De cette façon, si vos axes comprennent d'autres objets, ils ne seront pas affectés. Si vous utilisez la fonction pour ouvrir plusieurs figures, vous pouvez également ajouter une commande close (close(gcf)), sinon il est plus difficile de garantir que les axes actuels sont bien ceux que vous souhaitez modifier.