我怎么拯救一个图中应用设计师?

692(30天)
j·韦伯斯特
j·韦伯斯特 2016年4月27日
评论道: 亚当Danz 2021年12月27日
我开发了一个应用程序使用新的应用程序设计师。我想要用户可以单击一个按钮,保存图.fig文件,或其他图像格式。
函数ButtonSaveFigureButtonPushed(应用)
newfigure =图;
copyobj(应用程序。UIAxesAP newfigure);
hgsave (newfigure“testFIgure.fig”);
结束
但这给了我一个错误……
错误使用matlab.ui.control。UIAxes / copyElement(第1219行)
功能与UIA金宝appxes不支持。的更多信息,请参阅图形应用程序设计师金宝app的支持。
最好的方法是什么呢?
4评论
亚当Danz
亚当Danz 2021年12月27日
使用 fullfile 随着 sprintf
例子:
mypath = cd ();%使用当前目录用于演示目的
newFile中= fullfile (mypath sprintf (“FigNumber % d.fig”1))
newFile中=“/用户/ mss.system.ZbrIh6 / FigNumber1.fig”

登录置评。

接受的答案

大卫
大卫 2018年4月4日
编辑:大卫 2018年4月4日
我花了一些时间用于自己的目的。诀窍是将个体值的图保存到本地变量中使用图如下:
h =图;
h。可见=“关闭”;
x = UIAxes.XAxis.Parent.Children.XData;
y = UIAxes.XAxis.Parent.Children.YData;
情节(x, y)
lgndName1 = UIAxes.Legend.String {1};
乐金显示器=传奇(lgndName1);
乐金显示器。= UIAxes.Legend.Box盒;
乐金显示器。位置= UIAxes.Legend.Location;
h.CurrentAxes.YLabel。字符串= UIAxes.YLabel.String;
h.CurrentAxes.YLabel。字形大小= UIAxes.YLabel.FontSize;
h.CurrentAxes.XLabel。字符串= UIAxes.XLabel.String;
h.CurrentAxes.XLabel。字形大小= UIAxes.XLabel.FontSize;
h.CurrentAxes.Title。字符串= UIAxes.Title.String;
h.CurrentAxes.Title。字形大小= UIAxes.Title.FontSize;
h.CurrentAxes。XLim = max (x) [0];
h.CurrentAxes。XLim = max (y) [0 + 1);
saveas (h, SaveName“jpg”)
savefig (h, SaveName)
删除(h)
注意我有可见性,因为我不希望用户看到这个在后台。
注意:您必须改变“UIAxes”不管你叫界面图
你也可以添加更多属性,但你需要进入你的身材和找到对象名称来使用。
我希望这可以帮助。
编辑:我还应该提到函数得到这个工作,我必须把它在一个单独的m文件中调用函数。我做了一个函数SaveFigures (UIAxes SaveName)时,称为ButtonSaveFigureButtonPushed。我有多个可能的情节,这就是为什么我让UIAxes有所不同。(我使用一个开关,确保保存正确的阴谋。)
7评论
埃里克·萨金特
埃里克·萨金特 2020年12月9日
的R2020b copyobj支持复制UI金宝appAxes对象。

登录置评。

更多的答案(14)

Joost
Joost 2018年10月2日
编辑:Joost 2018年10月3日
灵感来自于 大卫的回答 ,我想出了这个解决方案,我相信更通用。我UIAxes包含大量的图形对象(主要是补丁对象)都复制到一个临时的图,然后保存。我接手一些UIAxes属性(轴限制和数据纵横比),但是您可以添加任何你需要的其他财产。指定文件名。我把一个按钮叫“快照”包含以下代码的应用程序和一个回调。使用Matlab R2018a。
%创建一个临时图用斧子。
无花果=图;
fig.Visible =“关闭”;
figAxes =轴(图);
%复制所有UIAxes孩子,接管轴限制和长宽比。
allChildren = app.UIAxes.XAxis.Parent.Children;
copyobj (allChildren figAxes)
figAxes。XLim = app.UIAxes.XLim;
figAxes。YLim = app.UIAxes.YLim;
figAxes。ZLim = app.UIAxes.ZLim;
figAxes。DataAspectRatio = app.UIAxes.DataAspectRatio;
%保存为png和图文件。
saveas(无花果,文件名,“png”);
savefig(图,文件名);
%删除临时图。
删除(图);
12个评论

登录置评。


亚当Danz
亚当Danz 2019年3月24日
编辑:亚当Danz 2020年12月21日
我怎么拯救一个图中应用设计师?
Matlab r2016a或晚
copyUIAxes(处理、家长) 从文件交换副本uiaxes的内容,和传说colorbar如果请求,到一个新的图。这是一个Matlab的替代品 copyobj () 它不支持uiaxes r202金宝app0b之前。
%的例子
无花果=图();
h = copyUIAxes(应用程序。UIAxes,无花果);
或者,使用一个第三方应用程序截图。
Matlab r2020a或晚
exportgraphics (obj,文件名) 存储快照的图形对象(轴或图)到一个图像文件(jpg, png, tiff、pdf、电动势、eps, +更多)。
%的例子
exportgraphics (app.UIFigure“文件C: \ \用户名\ \ Matlab \ AppImage.png”)
copygraphics (obj) 快照复制的图形对象(轴或图)为每个复制粘贴到系统剪贴板。
Matlab r2020b或晚
选项(见 这个社区强调 审查)
copyobj(处理、家长) 复制一个图形处理,包括uiaxes r2020b +,父母。
%的例子
无花果=图();
copiedAxes = copyobj(应用程序。UIAxes,无花果);
文件名exportapp(图) UIFigure出口到一个图像文件(JPEG、PNG、TIFF或PDF)。
%的例子
exportapp (app.UIFigure“文件C: \ \用户名\ \ Matlab \ AppImage.png”)
F = getframe (ax) F = getframe(图) 抓住了轴或图作为一个电影画面出现在屏幕上。 getframe () 已经存在了很长一段时间但是它支持uifigures始于r2020b。金宝app
%的例子
F = getframe (app.UIFigure);
无花果=图();
imshow (F.cdata“父”,图)
这个答案已经更新。最初的答案是在下面的评论中。
6个评论
亚当Danz
亚当Danz 2020年4月21日
谢谢你的反馈, Ramu矿Pradip 。我会考虑实施yyaxis功能 copyUIAxes
同时,这是一个简单的方法来使用 copyUIAxes yyaxis情节。它左右轴单独副本(创建两个轴上的彼此)。
% uiaxes内创建yyaxis情节
无花果= uifigure ();
ax = uiaxes(图);
yyaxis (ax,“左”)
情节(ax, 1:5,兰德(1、5),“- - -”)
ylabel (ax,“左”)
yyaxis (ax,“对”)
情节(ax, 1:。2:5,兰德(21),“o”)
ylabel (ax,“对”)
包含(ax,“x轴”)
标题(ax,“标题”)
%左右轴复制到相同的图
newFig =图;
yyaxis (ax,“左”)
axLeft = copyUIAxes (ax, newFig);
yyaxis (ax,“对”)
axRight = copyUIAxes (ax, newFig);
%进行一些更改正确的轴
axRight.axes。颜色=“没有”;%做透明的
axRight.axes。XTick = [];%去除重复x-ticks
axRight.axes。包含= [];%去除重复x-label
axRight.axes。标题= [];%去除重复的标题

登录置评。


Guilherme萨尔加多布拉加
根据R2017b文档://www.tatmou.com/help/matlab/creating_guis/graphics-support-in-app-designer.html金宝app
功能saveas和savefig尚未支持。金宝app

Dharmendra沙玛
Dharmendra沙玛 2018年6月15日
编辑:Dharmendra沙玛 2018年6月15日
这是一个潜在的解决方案,适合我。首先,情节图/数据在正常方式不使用uifigure例如见下面的代码。在下面的例子中,可见性
图(“名字”,Acc的,“NumberTitle”,“关闭”,“单位”,“归一化”,“outerposition”(0 0 1 1))
然后创建一个单独的matlab函数文件(并从matlab调用matlab函数ui)。功能可能包括代码提取图属性和将数据保存为png文件。以下链接解释了保存的所有数据和代码——看到链接
它只需要一些修改和我在代码阶段,包括这些
函数[]= handleFigures ()
结果= isfolder (“数据”);
如果结果= = 0
mkdir数据;
其他的
删除(“数据/ * *’。)
结束
FolderName =“数据”;%你的目标文件夹
FigList = findobj (allchild (0)“平”,“类型”,“图”);
iFig = 1:长度(FigList) 1
FigHandle = FigList (iFig);
FigName =得到(FigHandle,“名字”);
saveas (FigHandle fullfile (FolderName [FigName,“使用”)))
结束
disp (“关闭数据”);
关闭所有
结束

曹国伟龚
曹国伟龚 2019年6月19日
你好大卫:
我用同样的方法回答你 大卫 2018年4月4日。然而,我试图打开保存.fig使用Matlab文件之后,但它不开或回应。. png文件保存好。
你遇到类似的问题吗?有任何可能的原因保存.fig不能打开吗?
谢谢

曹国伟龚
曹国伟龚 2019年6月19日
你好,
发现这个问题的问题。这是因为“可见”属性设置。workaroudn是如下。
- - - - - - - - - -
这不是目前可能在MATLAB。
作为一个解决方案,请指定“可见”选项当调用“openfig”打开图后保存。
你也可以设置“CreateFcn”属性的函数图设置“可见”属性。这允许您保存图当看不见但总是可见的开立。
hFig =图( “可见” , “关闭” );
情节(1:10)
%设置CreateFcn回调
集(hFig, “CreateFcn” , “集(gcbo,“可见”,“上”)” );
%保存图文件
savefig (hFig “savedFigure.fig” )

tham Al-Zuriqat
tham Al-Zuriqat 2020年12月20日
改善回答灵感来自大卫和Joost,这在技术上是两者的结合的解决方案。金宝搏官方网站
无花果=图;
fig.Visible =“关闭”;
figAxes =轴(图);
%复制所有UIAxes孩子,接管轴限制和长宽比。
allChildren = app.UIAxes.XAxis.Parent.Children;
copyobj (allChildren figAxes)
figAxes。XLim = app.UIAxes.XLim;
figAxes。YLim = app.UIAxes.YLim;
figAxes。ZLim = app.UIAxes.ZLim;
figAxes。DataAspectRatio = app.UIAxes.DataAspectRatio;
lgndName1 = app.UIAxes.Legend.String {1};
乐金显示器=传奇(lgndName1);
乐金显示器。= app.UIAxes.Legend.Box盒;
乐金显示器。位置= app.UIAxes.Legend.Location;
fig.CurrentAxes.YLabel。字符串= app.UIAxes.YLabel.String;
fig.CurrentAxes.YLabel。字形大小= app.UIAxes.YLabel.FontSize;
fig.CurrentAxes.XLabel。字符串= app.UIAxes.XLabel.String;
fig.CurrentAxes.XLabel。字形大小= app.UIAxes.XLabel.FontSize;
fig.CurrentAxes.Title。字符串= app.UIAxes.Title.String;
fig.CurrentAxes.Title。字形大小= app.UIAxes.Title.FontSize;
%保存为png和图文件。
saveas(无花果,文件名,“png”);
savefig(图,文件名);
%删除临时图。
删除(图);

j·韦伯斯特
j·韦伯斯特 2016年4月28日
有人吗? ?
1评论
Tausif
Tausif 2017年3月10日
你有解决方案了吗?我想做同样的事情

登录置评。


托拜厄斯Daßler
托拜厄斯Daßler 2017年12月20日
我使用一个处理:
saveas (gca uiputfile ({‘* . png”;‘* .fig‘;‘* . jpg”}));
关闭情节;
也许你可以适应了你的问题。
2的评论
亚当Danz
亚当Danz 2019年3月24日
功能不支持与数据创建uifigure金宝app函数。所以,这并不与轴中创建应用程序设计师。

登录置评。


克雷格·皮尔森
克雷格·皮尔森 2018年1月8日
我有一个类似的问题,一个解决方案。我试图使用打印功能复制到剪贴板。
烦人,如果我使用调试模式,一旦创建了图我可以辞职然后使用调试模式
打印-dmeta
从命令窗口,收益很好,然后我可以粘贴到Excel从命令行(这是我打算做从应用程序中)。
为什么这无法实现在应用程序内吗?

布兰卡Larraga
布兰卡Larraga 2018年6月4日
有解决方案保存轴情节以jpeg格式或没有?我想插入我联合国一个轴图在报告自动程序设计师但我不管理。谢谢。

Jyothi红桉
Jyothi红桉 2018年7月20日
我也有同样的问题。不能出口UIAxes从gui创建应用程序设计师。copyobj并未奏效。
1评论
Udo施罗德
Udo施罗德 2018年8月13日
我也有同样的问题。这将帮助是否有一个很好的选择只是一个UIAxes元素映射到一个正常(弹出)图。然后数字可能保存的常用工具。

登录置评。


Paramjeet Panwar
Paramjeet Panwar 2018年10月15日
我现在的解决方法是识别的像素位置UIFigure并在屏幕上UIAxes使用Java库和快照。
——引用这些链接
2为截图,使用Java库 这个链接

埃里克·萨金特
埃里克·萨金特 2020年12月9日
的R2020b copyobj支持复制UI金宝appAxes对象。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!