在MATLAB中重新打开图形文件后更改条形图的颜色

时间:2017-07-25 10:00:01

标签: matlab bar-chart matlab-figure

我有很多图形作为图形文件,并希望在函数中更改这些图形的字体大小和颜色。在这个例子中,它是一个条形图。

这是我的代码:

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

它会更改fontsize,但不会更改条形颜色。

错误信息是:

  

使用matlab.graphics.axis.Axes/set时出错       FaceColor类没有Axes属性。

     

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

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

2 个答案:

答案 0 :(得分: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)),否则更难保证当前轴确实你想改变什么。

答案 1 :(得分:2)

Fontsize是轴的属性; FaceColor不是。{ 在命令窗口中输入gca以查看。 FaceColor是其子项的属性,hinted也是Wolfie的属性。

您需要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

由于你在这里使用的是fig文件,你没有bar的句柄,所以你可以像这样使用轴的句柄:

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