• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

Matlab GUI教程0x7–GUI中保存GUI中的Plots图形

Matlab admin 3年前 (2016-11-08) 1924次浏览 0个评论 扫描二维码
本节教程将向您演示如何将 GUI 的坐标系(axes)上显示的图像、图片和曲线保存为图像文件

这个功能对 GUI 的终端用户很 helpful,因为我们可以将结果直接保存下来,而不需要频繁的运行程序。很不幸的是,MATLAB没有提供直接的函数或操作,让来来执行这个任务。

自己动手丰衣足食,好,下面演示的实例将让您美梦成真!自由保存 GUI 坐标系上的图形!

因为本节教程需要您具备一定能够 Matlab 基本知识和必要 GUI 经验,故再进行本教程之前,如果您是 GUI 刚入门菜鸟,建议您先看下:

1、GUI 入门指导实例教程 http://www.matlabsky.com/thread-5217-1-1.html
2、handles 结构体简介 http://www.matlabsky.com/thread-5223-1-1.html
3、在 GUI 中实现数据共享和传递

OK,Let’s Begin Now!

1、下载本教程中使用到 savePlotWithinGUI.m savePlotWithinGUI.m (1.81 KB, 下载次数: 680)

下面我对本函数大概介绍下,并在代码上给出注释:

代码的原理很简单,就是使用 Matlab 自带的 copyobject 函数,将想要保存的坐标系上的图形拷贝到一个新的 figure 中,然后使用 saveas 命令保存这个新 figure 的内容。

当然在拷贝的时候要注意调整新 figure 的相关属性,比如单位、位置等。

(1)函数具有两个输入参数 axesObject 和 legendObject,其中后者是可选的
(2)axesObject 是 GUI 中坐标系的句柄,legendObject 是您使用 legend 函数创建的图例说明的句柄

  1. %created by: Quan Quach
  2. % commented by: dynamic
  3. %date: 11/8/07
  4. %function to save plots within a GUI
  5. function savePlotWithinGUI(axesObject, legendObject)
  6. % 将 GUI 坐标系上的图形保存为图像文件
  7. %
  8. % 参数说明
  9. % axesObject 希望被保存的 axes 对象的句柄 (必须)
  10. %legendObject 由 legend 函数创建的图例说明的句柄 (可选)
  11. %
  12. % 选择存储路径、文件名以及格式
  13. [filename, pathname] = uiputfile({ ‘*.emf’,’Enhanced Meta File (*.emf)’;…
  14. ‘*.bmp’,’Bitmap (*.bmp)’; ‘*.fig’,’Figure (*.fig)’}, …
  15. ‘Save picture as’,’default’);
  16. % 如果用户选择取消,则直接返回
  17. if isequal(filename,0) || isequal(pathname,0)
  18. return
  19. end
  20. % 创建一个新的 figure
  21. newFig = figure;
  22. % 获取 axes 控件的单位和位置
  23. axes_units = get(axesObject,’Units’);
  24. axes_pos = get(axesObject,’Position’);
  25. % 将坐标系对象复制到新的 figure 中
  26. axesObject2 = copyobj(axesObject,newFig);
  27. % 重新布局坐标系在新 figure 中的位置和单位
  28. set(axesObject2,’Units’,axes_units);
  29. set(axesObject2,’Position’,[15 5 axes_pos(3) axes_pos(4)]);
  30. % 如果 legendObject 被传递进来了
  31. if (exist(‘legendObject’))
  32. % 获取 legend 的位置和单位
  33. legend_units = get(legendObject,’Units’);
  34. legend_pos = get(legendObject,’Position’);
  35. % 将 legend 也拷贝到心 figure
  36. legendObject2 = copyobj(legendObject,newFig);
  37. % 重新布局 legend 对象
  38. set(legendObject2,’Units’,legend_units);
  39. set(legendObject2,’Position’,[15-axes_pos(1)+legend_pos(1) 5-axes_pos(2)+legend_pos(2) legend_pos(3) legend_pos(4)] );
  40. end
  41. % 调整新 figure 的单位和位置
  42. set(newFig,’Units’,axes_units);
  43. set(newFig,’Position’,[15 5 axes_pos(3)+30 axes_pos(4)+10]);
  44. % 保存图像
  45. saveas(newFig,fullfile(pathname, filename))
  46. % 关闭新 figure
  47. close(newFig)

复制代码

2、实例中使用 savePlotWithinGUI()函数

2.1 这里我们已经提供了一个直接的 GUI 程序 save-image-tutorial.zip (8.62 KB, 下载次数: 995) ,下载后解压到 Matlab 工作目录,运行 GUI 得到如下界面

2.2 我们打开 save_image_tutorial.m,定位到 plotAxes1_pushbutton_Callback,将看到如下代码

  1. % 这个就是 GUI 中 Plot Axes 1 按钮对应的对调函数
  2. % 选择绘图坐标系,开始绘图
  3. axes(handles.axes1)
  4. x = 0:10;
  5. y = 0:10;
  6. plot(x,y);
  7. % 添加标题和标签
  8. title(‘Axes 1’);
  9. xlabel(‘X data’);
  10. ylabel(‘Y data’);
  11. % 添加图例说明,并将其句柄保存到 handles 结构体中
  12. handles.legend_plot1 = legend(‘data’); % 保存以后方便以后直接使用
  13. % 更新 handles 结构体
  14. guidata(hObject, handles); % 必须更新,因为 handles 改变了

复制代码

2.3 在将光标定位到 savePlot2_pushbutton_Callback,代码如下

  1. function savePlot2_pushbutton_Callback(hObject, eventdata, handles)
  2. % 在 GUI 的回调函数中调用 savePlotWithinGUI 函数,保存 axes 中的图形
  3. % 第一个参数是 axes 的句柄,handles.handles.axes2
  4. % 第二个参数是 legend 的句柄 handles.legend_plot2
  5. savePlotWithinGUI(handles.axes2,handles.legend_plot2);

复制代码

呵呵,原理和操作就这么简单,只是大家没有想到罢了!祝你愉快。。。。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Matlab GUI 教程 0x7–GUI 中保存 GUI 中的 Plots 图形
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!