Программный экспорт фигур (R2019a) - PullRequest
4 голосов
/ 24 марта 2019

В MATLAB R2019a добавлен новый способ экспорта фигур , в результате которого результат " плотно обрезается по осям с минимальным пробелом ". Доступ к этой функции осуществляется с помощью панели инструментов осей:

enter image description here

Мой вопрос: Как мы можем вызвать эту новую функцию экспорта программно?

Должно быть достаточно легко открыть диалоговое окно экспорта для определенных осей (то есть имитировать нажатие кнопки), но меня больше интересует обход диалога и просто сохранение файла на диск, например

croppedExport(hAxes, outputPath);


P.S.
Я знаю, что эта функциональность может быть достигнута с помощью стороннего инструмента 3 rd , такого как export_fig.

1 Ответ

4 голосов
/ 24 марта 2019

TL; DR

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

Во всплывающей подсказке этой новой кнопки написано " Export ... ", что поможет нам идентифицировать ее.Копаясь в свойствах панели инструментов осей (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)
%}

, которая, к сожалению, указывает на каталог, полный .pfiles:

...\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');

...который работает (!), и поэтому он становится нашим методом выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...