我怎么拯救一个图中应用设计师?
692(30天)
显示旧的评论
我开发了一个应用程序使用新的应用程序设计师。我想要用户可以单击一个按钮,保存图.fig文件,或其他图像格式。
函数ButtonSaveFigureButtonPushed(应用)
newfigure =图;
copyobj(应用程序。UIAxesAP newfigure);
hgsave (newfigure“testFIgure.fig”);
结束
但这给了我一个错误……
错误使用matlab.ui.control。UIAxes / copyElement(第1219行)
功能与UIA金宝appxes不支持。的更多信息,请参阅图形应用程序设计师金宝app的支持。
最好的方法是什么呢?
4评论
接受的答案
大卫
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有所不同。(我使用一个开关,确保保存正确的阴谋。)
更多的答案(14)
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(图,文件名);
%删除临时图。
删除(图);
亚当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 (app.UIFigure“文件C: \ \用户名\ \ Matlab \ AppImage.png”)
F = getframe (ax)
或
F = getframe(图)
抓住了轴或图作为一个电影画面出现在屏幕上。
getframe ()
已经存在了很长一段时间但是它支持uifigures始于r2020b。金宝app
%的例子
F = getframe (app.UIFigure);
无花果=图();
imshow (F.cdata“父”,图)
这个答案已经更新。最初的答案是在下面的评论中。
6个评论
亚当Danz
2020年4月21日
同时,这是一个简单的方法来使用
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萨尔加多布拉加
2018年2月24日
根据R2017b文档://www.tatmou.com/help/matlab/creating_guis/graphics-support-in-app-designer.html金宝app
功能saveas和savefig尚未支持。金宝app
0评论
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 (“关闭数据”);
关闭所有
结束
0评论
曹国伟龚
2019年6月19日
你好,
发现这个问题的问题。这是因为“可见”属性设置。workaroudn是如下。
- - - - - - - - - -
这不是目前可能在MATLAB。
作为一个解决方案,请指定“可见”选项当调用“openfig”打开图后保存。
你也可以设置“CreateFcn”属性的函数图设置“可见”属性。这允许您保存图当看不见但总是可见的开立。
hFig =图(
“可见”
,
“关闭”
);
情节(1:10)
%设置CreateFcn回调
集(hFig,
“CreateFcn”
,
“集(gcbo,“可见”,“上”)”
);
%保存图文件
savefig (hFig
“savedFigure.fig”
)
0评论
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(图,文件名);
%删除临时图。
删除(图);
0评论
托拜厄斯Daßler
2017年12月20日
我使用一个处理:
saveas (gca uiputfile ({‘* . png”;‘* .fig‘;‘* . jpg”}));
关闭情节;
也许你可以适应了你的问题。