MATLAB: патчи исчезают при различных обстоятельствах, когда faceAlpha не 1
Я использую 64-битную Matlab R2010a на Windows 7 (это может быть актуально, если это неясная ошибка рендеринга)
это, очевидно, странная ошибка, которая проявляется, когда текстовый интерпретатор латексный
set(0, 'DefaultTextInterpreter', 'Latex');
этот код создаст синий прямоугольник с черной рамкой и легенду вне осей
cla reset;
patch ([0.5 0.5 0.75 0.75 0.5], [0.5 0.75 0.75 0.5 0.5], 'b', 'FaceAlpha',1);
xlim([0 1]);
ylim([0 1])
legend ('blah', 'Location', 'bestOutside')
Если я изменю код, чтобы патч имел непрозрачное альфа-значение,
cla reset;
patch ([0.5 0.5 0.75 0.75 0.5], [0.5 0.75 0.75 0.5 0.5], 'b', 'FaceAlpha',0.5);
xlim([0 1]);
ylim([0 1]);
legend ('blah', 'Location', 'bestOutside')
Я получаю пустой черный ящик вместо заполненного, и оси правильно меняются, чтобы разместить легенду снаружи, но без легенды.
Патч также исчезает, если я запускаю весь код до легенды, а затем нажимаю "Редактировать график" в меню рисунков. Патч не появляется снова после снятия флажка "Редактировать сюжет". Свойства figure и axes (с использованием get(gcf) и get(gca) соответственно) идентичны до и после нажатия и снятия флажка "редактировать график"
Изменение размера окна рисунка не приводит к исчезновению патча. Изменение размеров осей из командной строки:
p = get(gca, 'Position');p(3) = p(3)/2;set (gca, 'Position', p)
не вызывает исчезновения патча.
Я попытался установить OpenGL в аппаратный и программный режим (с использованием оборудования OpenGL, программного обеспечения OpenGL) и не нашел никакой разницы.
1 ответ
Спасибо Расману за попытку воспроизвести ошибку и ошибку. Это помогло мне понять, что проблема заключается во взаимодействии между интерпретатором латекса и openGL. Это, по-видимому, связано с ошибкой MATLAB 359330
Решение состоит в том, чтобы установить свойства текста объектов по отдельности, а не использовать опцию рендеринга по умолчанию (что является болью)
Резюме
Установка свойства рисунка defaultTextInterpreter в 'latex' с помощью OpenGL может привести к тому, что MATLAB станет SEGV или будет утверждаться при печати в PostScript Description
При использовании средства визуализации OpenGL, присвоение свойству defaultTextInterpreter фигуры значения 'latex' и последующей печати в PostScript или инкапсулированном PostScript может привести к сбою или утверждению в MATLAB. Например, этот код,
figure;
axes;
set(gcf,'defaultTextInterpreter','latex');
set(gcf,'renderer','openGL');
print figure.eps;
может привести к сбою или утверждению. В других случаях в командном окне MATLAB могут появляться следующие ошибки:
??? Ошибка при использовании ==> strcat Недостаточно входных аргументов.
Ошибка в ==> tex>localCheckValidString в 138 strchk = strcat(str{:});
Ошибка в ==> tex в 111 [err] = localCheckValidString(str);
Временное решение
Не устанавливайте для свойства defaultTextInterpreter значение latex при использовании OpenGL. Скорее, установите для свойства Interpreter текстовых объектов значение "latex" индивидуально.