2017-07-25 177 views
2

我有许多图形作为无花果文件,并且想要在函数中更改这些图形的字体大小和颜色。在这个例子中,它是一个条形图。在MATLAB中重新打开图形文件后更改条形图的颜色

这是我的代码:

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

它改变了字体大小,而不是栏的颜色。

的错误信息是这样的:

使用matlab.graphics.axis.Axes/set
没有FaceColor财产上的Axes类的错误。

错误changeallfonts(第4行)
set(gca,'FaceColor','r');

gcf也不起作用。什么是错误?

+3

您可能会发现,您必须使用get(gca,'Children')'来获取条形对象 – Wolfie

回答

2

Fontsize是轴的属性; FaceColor不是。
在命令窗口中输入gca可以看到。 FaceColor是其子女的财产,也是hintedWolfie


您需要改为bar的句柄。

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

既然你在这里使用图文件,你没有的bar手柄所以你可以用轴这样的处理:

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

你说你打开保存的.fig文件,所以你需要获得正确的句柄对象(轴的子对象)后面(即在它已经存在之后,而不是,同时创建它)。一个相当稳健的方式做到这一点是使用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 

这样,如果你的轴线包括其他对象,他们将不会受到影响。另外,如果您使用该功能打开多个数字,您可能还需要添加close命令(close(gcf)),否则很难确保当前轴确实是您想要更改的内容。