以编程方式导出数字(R2019a)

时间:2019-03-24 14:52:57

标签: matlab user-interface export ui-automation undocumented-behavior

在MATLAB R2019a中,new way to export figures was added的结果是“ 被紧紧地裁剪成具有最小空白的轴”。可使用轴工具栏访问此功能:

enter image description here

我的问题是:我们如何以编程方式调用此新导出功能?

要针对特定​​轴打开导出对话框(即模拟按钮单击)应该相当容易,但是我对绕过对话框并仅将文件保存到磁盘更感兴趣,例如

croppedExport(hAxes, outputPath);


邮编
我知道可以使用export_fig之类的3 rd 派对工具来实现此功能。

1 个答案:

答案 0 :(得分:4)

TL; DR

matlab.graphics.internal.export.exportTo(hAxes, fullpath);

此新按钮的工具提示为“ 导出... ”,这将帮助我们对其进行识别。在轴工具栏(struct(hAxes.Toolbar))的属性中进行挖掘,我们可以了解一下按下按钮时正在调用的函数:

hB = struct(struct(hAxes.Toolbar).ButtonGroup).NodeChildren(1);
%{
hB = 
  ToolbarPushButton (Export...) with properties:

            Tooltip: 'Export...'
               Icon: 'export'
    ButtonPushedFcn: @(e,d)matlab.graphics.internal.export.exportCallback(d.Axes)
%}

不幸的是,该目录指向包含.p个文件的目录:

...\MATLAB\R2019a\toolbox\matlab\graphics\+matlab\+graphics\+internal\+export

...并迫使我们进行反复试验。例如,我们可以选择一个随机的.p文件,其名称听起来对我们来说是正确的,然后查看是否可以找到其API:

>> matlab.graphics.internal.export.exportTo()
Error using matlab.graphics.internal.export.exportTo
Not enough input arguments. 

>> matlab.graphics.internal.export.exportTo('')
Error using matlab.graphics.internal.export.exportTo
Not enough input arguments. 

>> matlab.graphics.internal.export.exportTo('','')
Error using matlab.graphics.internal.export.ExporterArgumentParser/parseInputParams
'' matches multiple parameter names: 'background', 'destination', 'format', 'handle', 'margins', 'resolution', 'target'. To avoid ambiguity, specify the complete name of the parameter.
Error in matlab.graphics.internal.export.ExporterArgumentParser/processArguments
Error in matlab.graphics.internal.export.Exporter/process
Error in matlab.graphics.internal.export.exportTo 

最后一条错误消息提供了非常有趣的信息,这使我们能够对所需的输入进行一些有根据的猜测:

'background'  - probably background color
'destination' - probably where to put the file
'format'      - probably what is the file extension
'handle'      - probably the axes handle
'margins'     - (self explanatory)
'resolution'  - (self explanatory)
'target'      - ???

根据问题中要求的“最小”输入集,我们的下一个尝试是:

membrane;
matlab.graphics.internal.export.exportTo('handle', gca, 'destination', 'e:\blabla.png');

...这将在所需位置创建一个文件,并返回一个真彩色RGB图像,该图像将按照我们的意愿进行裁剪!

enter image description here

尽管已完成,但我们可以根据saveas的“惯例” saveas(what, where, ...)尝试进一步简化此函数调用:

matlab.graphics.internal.export.exportTo(gca, 'e:\blabla.png');

...有效(!),因此这成为我们的选择方法。