Перерисовать фигуру, сохраненную в 2013b в 2014b
Поскольку в R2014b MATLAB изменил свой движок фигур, я решил перезапустить часть своего кода, чтобы получить из них более привлекательные фигуры. К сожалению, последний, что у меня есть, - это код, который запускается годами, и я бы очень хотел избежать повторного запуска кода для более приятной фигуры.
Я сохранил результат в .fig
файл в R2013b. Однако, если я открою его в R2014b, он все равно будет иметь старый формат.
Можно ли перерисовать фигуру, используя графический механизм MATLAB R2014b? Если это так, как я мог это сделать?
ПРИМЕЧАНИЕ. Буквально фигура открывается и рисуется с помощью нового движка, однако она сохраняет свой старый формат. Пока новая фигура с title()
Команда построит хороший большой жирный заголовок, если перерисовать эту фигуру с помощью "drawnow" или я сгенерирую для нее код, формат останется прежним.
Пример: эта цифра была создана в 2013b году и перерисована в 2014b. Вы можете видеть, что заголовок не отображается в том же формате, что и title('whatever')
будет сюжет в новых графических ручках. Похоже, что.fig сохраняет и устанавливает значения по умолчанию для версии, которую он был сгенерирован. Таким образом, цвета графика, заголовки, метки и т. Д. При перерисовке будут выглядеть как старые графические маркеры.
Это можно проверить с помощью следующего кода. Обратите внимание, что это чрезмерно упрощенная проблема, вопрос явно не о заголовках или ярлыках, а о графическом материале в целом.
rng(1)
figure()
x = 1:50;
y = rand(1, 50);
plot(x,y)
title('this NICE Title')
xlabel('labels!')
ylabel('some other labels','Interpreter','Latex')
Если этот код запущен в 2013b и 2014b, сохранен как рис в обоих, а затем открыт как рис в обоих, появятся следующие 2 цифры:
Фиговый файл 2013b: http://s000.tinyupload.com/index.php?file_id=02053933004513599550
1 ответ
Существует обходной способ сделать это - просто используя hgopen
для загрузки рисунка и последующего извлечения данных для его повторного построения в 2014b:
h1=hgopen('test.fig'); % h1 = handle to the figure
allaxes=get(h1,'children'); % allaxes = array with axes handles
for a=1:length(allaxes)
ax=allaxes(a);
allines=get(ax,'children'); % all lines in current axes
for l=1:length(allines)
lin=allines(l);
values=get(lin,'ydata'); % values of the current line
subplots{a}{l}=values;
end
end
Затем вы можете использовать subplots
массив ячеек для повторного построения графиков вручную. Это скучный способ сделать это, но, возможно, стоит попробовать, если повторная генерация результата занимает очень много времени.