MatlabGUI:如何在用户界面中打印绘图?

MatlabGUI:如何在用户界面中打印绘图?,matlab,user-interface,printing,plot,Matlab,User Interface,Printing,Plot,我在MATLAB中有一个界面,通过按下按钮2绘制曲线。现在我无法打印出图形。更准确地说,我想添加另一个按钮来打印出绘图。下面是我的一段代码: % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to

我在MATLAB中有一个界面,通过按下按钮2绘制曲线。现在我无法打印出图形。更准确地说,我想添加另一个按钮来打印出绘图。下面是我的一段代码:

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%clear
%linkdata on
fileName = handles.fileName;

n_var=str2num(get(handles.n_var,'string'));

[x] = readColumns(fileName, n_var);

axes(handles.axes1);
hold on
plot(handles.axes1,x(1:n),'b','LineWidth',2)
hold off

谢谢。

看起来您使用了GUIDE来制作GUI,所以您应该以相同的方式添加新按钮(通过GUIDE)。假设您已经这样做了,那么在它的回调函数中,您将需要如下内容:

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    im = getframe(handles.axes1);
    %saves the image in variable "im" to a PNG file 
    imwrite(im.cdata, fileName, 'PNG')
end
函数getframe获取输入句柄参数(在本例中为轴句柄)的快照,并返回一个包含图像数据(“cdata”)和用于帧的颜色映射的结构。然后使用imwrite将图像数据写入磁盘,其中fileName可能是一个包含所需文件名的字符串,“PNG”告诉imwrite所需的扩展名(也可以使用BMP/GIF/JPEG或其他格式)

还有一点挑剔,在你的问题中,你可以交替使用图形和绘图,但图形可能与绘图不同;也就是说,图形将是整个GUI,而绘图将位于轴上,轴将是GUI的子图形

编辑:若要保留轴标签,可能必须使用其他方法。相反,您可以做的是:

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    f_tmp = figure('visible', 'off');
    copyobj(handles.axes1,f_tmp);
    print(f_tmp, '-dpng', fileName);
    close(f_tmp);
end

这将创建一个隐藏图形f_tmp,将handles.axes1上的绘图复制到隐藏图形,然后将其打印到一个以字符串文件名命名的PNG文件(由标志“-dpng”指定,您可以使用其他扩展名)。最后它会关闭隐藏的图形。我认为这会起作用,如果不起作用,请告诉我。看起来您使用了GUIDE来制作GUI,因此您应该以相同的方式添加新按钮(通过GUIDE)。假设您已经这样做了,那么在它的回调函数中,您将需要如下内容:

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    im = getframe(handles.axes1);
    %saves the image in variable "im" to a PNG file 
    imwrite(im.cdata, fileName, 'PNG')
end
函数getframe获取输入句柄参数(在本例中为轴句柄)的快照,并返回一个包含图像数据(“cdata”)和用于帧的颜色映射的结构。然后使用imwrite将图像数据写入磁盘,其中fileName可能是一个包含所需文件名的字符串,“PNG”告诉imwrite所需的扩展名(也可以使用BMP/GIF/JPEG或其他格式)

还有一点挑剔,在你的问题中,你可以交替使用图形和绘图,但图形可能与绘图不同;也就是说,图形将是整个GUI,而绘图将位于轴上,轴将是GUI的子图形

编辑:若要保留轴标签,可能必须使用其他方法。相反,您可以做的是:

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    f_tmp = figure('visible', 'off');
    copyobj(handles.axes1,f_tmp);
    print(f_tmp, '-dpng', fileName);
    close(f_tmp);
end

这将创建一个隐藏图形f_tmp,将handles.axes1上的绘图复制到隐藏图形,然后将其打印到一个以字符串文件名命名的PNG文件(由标志“-dpng”指定,您可以使用其他扩展名)。最后它会关闭隐藏的图形。我想这会起作用,如果它不

请告诉我尝试:
doc print
它会让你开始尝试:
doc print
它会让你开始谢谢你的关注,alrikai!谢谢你的关注,阿尔丽凯!抱歉,因为回复晚了。实际上,我的GUI包含三个绘图,我为每个绘图添加了一个按钮。你的导游工作得很好。我要问另一个问题。图像显示在绘图内部。我的意思是我需要在图像中把数字放在轴的旁边。为了清楚起见,当我们复制绘图的图形时,包括标题、轴名称和绘图在内的整个图形都会被复制。但在这里,我看不到轴的值。你能帮我吗?@如果我编辑了我的答案(希望)来解决保存绘图设置的问题,请告诉我它是否有效…谢谢你的关注,alrikai!谢谢你的关注,阿尔丽凯!抱歉,因为回复晚了。实际上,我的GUI包含三个绘图,我为每个绘图添加了一个按钮。你的导游工作得很好。我要问另一个问题。图像显示在绘图内部。我的意思是我需要在图像中把数字放在轴的旁边。为了清楚起见,当我们复制绘图的图形时,包括标题、轴名称和绘图在内的整个图形都会被复制。但在这里,我看不到轴的值。你能帮我吗?@如果我编辑了我的答案(希望)来解决保存绘图设置的问题,请告诉我它是否有效。。。