我编写了以下代码,尝试从MATLAB GUI中仅检索轴及其图。
F = getframe(gca);
figure();
image(F.cdata);
saveas(gcf,'PlotPic','png');
close(gcf);
但是,我注意到,此方法不包含任何轴标签或标题。有什么方法可以让getframe
函数包含轴标签和标题吗?
我尝试了以下代码,但它完全相同
pl = plot(x,y);
xlabel('x')
ylabel('y')
ftmp = figure;
atmp = axes;
copyobj(pl,atmp);
saveas(ftmp,'PlotPic.png');
delete(ftmp);
答案 0 :(得分:1)
我会使用rect
函数的getframe
选项。
基本上,您可以为getframe
提供第二个输入参数,然后捕获指定为参数的矩形的内容。好处是您可以将控制柄用于轴,因此它不会捕获整个GUI图形,而是捕获特定的轴。
例如,使用此行:
F = getframe(gca,RectanglePosition);
具体而言,您可以设置矩形的坐标,使它们跨越轴标签和标题。这是一个示例代码。按钮回调执行getframe
并打开一个内容为F.cdata
的新数字:
function GUI_GetFrame
clc
clear
close all
%// Create GUI components
hFigure = figure('Position',[100 100 500 500],'Units','Pixels');
handles.axes1 = axes('Units','Pixels','Position',[60,90,400,300]);
handles.Button = uicontrol('Style','Push','Position',[200 470 60 20],'String','Get frame','Callback',@(s,e) GetFrameCallback);
%// Just create a dummy plot to illustrate
handles.Period = 2*pi;
handles.Frequency = 1/handles.Period;
handles.x = 0:pi/10:2*pi;
handles.y = rand(1)*sin(handles.Period.*handles.x);
plot(handles.x,handles.y,'Parent',handles.axes1)
title('This is a nice title','FontSize',18);
guidata(hFigure,handles); %// Save handles structure of GUI.
function GetFrameCallback(~,~)
handles = guidata(hFigure);
%// Get the position of the axes you are interested in. The 3rd and
%// 4th coordinates are useful (width and height).
AxesPos = get(handles.axes1,'Position');
%// Call getframe with a custom rectangle size.You might need to change this.
F = getframe(gca,[-30 -30 AxesPos(3)+50 AxesPos(4)+80]);
%// Just to display the result
figure()
imshow(F.cdata)
end
end
GUI如下所示:
一旦我按下按钮,这就是弹出的数字:
所以唯一的麻烦就是要弄清楚你需要选择的矩形尺寸来捕捉轴标签和标题。
希望能解决你的问题!