如何在 Matlab GUI 中将带有颜色条的绘图保存为 .fig

How to save plot with its colourbar as .fig in Matlab GUI

我有一个按钮,单击它会生成绘图及其颜色条。该按钮与称为 zzpcolor 的特定功能有关。在 zzpcolor 中,我使用 pcolor 语法来生成抖动贴图。

在回调函数中,我使用 hold on 来保持 zzpcolor 生成的图形。然后我将另一个图添加到同一轴。这是按钮回调中脚本的一部分。

axes(handles.axes1);
axes1.Position=[0.1300 0.1100 0.7750 0.8150];
[X,Y,Z]=plotpcolor(fnamedat);
hold on
zzpcolor(X,Y,Z);
shading flat
LimitPlot
hold on
plot_google_map
hold on
scatter(datageo(:,1),datageo(:,2),'MarkerFaceColor',[1 0 0])
hold off

语法工作得很好。我使用此语法在另一个回调函数中将绘图另存为 jpg。

newfig1 = figure('Visible','off'); 
copyobj(handles.axes1, newfig1);
[filename,pathname]= uiputfile('*.jpg','Save as'); 
hold on
wmmicolorbarsetting;
saveas(newfig1,[pathname,filename],'jpg');

它工作得很好。但是当我尝试使用类似这样的语法将它保存为 .fig 时,

newfig1 = figure('Visible','off'); 
copyobj(handles.axes1, newfig1);
[filename,pathname]= uiputfile('*.fig','Save as'); 
hold on
wmmicolorbarsetting;
saveas(newfig1,[pathname,filename],'fig');

.fig 文件不包含任何内容。为什么?

.fig 文件确实 包含某些内容。您将图 Visible 属性 设置为 'off',因此当您创建图 时图实际上不会显示,当您加载图时从文件中。

您可以通过使用 hgload 加载 .fig 文件并将 Visible 属性 设置为 'on' 来验证这一点。

fig = hgload([pathname, filename]);
set(fig, 'Visible', 'on')

您还可以查看生成的.fig 文件并确保它是非空的。

您可以通过在保存之前将 Visible 设置为 'on' 来解决此问题。

关于图形可见性的说明:Visible 设置为 'off' 对于将图形保存为 .fig(png、jpeg)以外的格式非常有用等),因为您可以创建图像而不必担心脚本运行时会出现一堆图形。在这些情况下,不需要用户交互。正如您所发现的,如果您确实需要 see/interact 数字,Visible 应该是 'on' 才有用。