在matlab gui中复制图形和图例

时间:2014-06-24 13:27:05

标签: matlab

我有一个显示几个图的GUI。现在我想得到其中一个......“main_plot”例如(带有标题,轴描述和图例的整个图形)并将其导出到文件中。这是我到目前为止所得到的:

function main_plot_exp_Callback(hObject, eventdata, handles)

f_tmp = figure('visible','off');

set(f_tmp,'Units', 'Normalized', 'OuterPosition', [0 0 1 1]); 

copyobj(handles.main_plot,f_tmp);

set(gca,'Position',[0.16125 0.09 0.684375 0.84],...
    'GridLineStyle','--');


print(f_tmp, '-djpeg', 'name', '-r300');
close(f_tmp);

除了这个该死的传说之外,通常就像魅力一样,这个过程似乎迷失了。有什么建议或想法吗?提前谢谢!

(旁边的问题:是否有类似“gcf”的东西仅适用于某些人而非目前的数字?)

3 个答案:

答案 0 :(得分:0)

我尝试了你的程序并且没有遇到任何问题(我的matlab:8.2.0.701(R2013b))

你能做的最好的事情如下

hSome = findobj(handles.main_plot);
get(hSome,'Tag')

结果应该产生一个“图例”字符串。如果没有,用findall替换findobj。否则,您的图例句柄会存放在其他位置,您需要深入了解GUI。

答案 1 :(得分:0)

我在传输过程中丢失了相同的问题。我能做到的最好的办法是在保存之前重新创建新图中的图例。这是我使用的代码示例:

% find the legend(s) - I suppose in the following that there is only one legend in the GUI
L1 = findobj(handles.figure1,'tag','legend'); % where handles.figure1 is the GUI figure handle

% retrieve the legend strings and location
legendstr=get(L1,'String');
legendloc=get(L1,'Location');

% handle to the GUI axes to be saved
ax = handles.axes1;   

% create a new figure
fig = figure('Units','centimeters','outerposition',[2 2 17 17]);

% copy the GUI axes into the new figure
new_axes = copyobj(ax, fig);

set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);

% recreate the legend
legend(new_axes,legendstr,'Location',legendloc);

%save the files in .fig and .format files (.format = .jpg, .png, ...)
hgsave(fig,[pname '\' filename]);
hgexport(fig, fname, hgexport('factorystyle'),'Format', format)
close(fig);

答案 2 :(得分:0)

假设轴名为main_plot,我发现图例引用为: legend(handles.main_plot)

因此,您需要将图例及其父轴(作为矢量输入)复制到新图形:     copyobj([handles.main_plot legend(handles.main_plot],f_tmp);