3 Stimmen

MATLAB: Patches verschwinden unter verschiedenen Umständen, wenn faceAlpha nicht 1 ist

Ich benutze 64-Bit-Matlab R2010a unter Windows 7 (dies könnte relevant sein, wenn es sich um einen obskuren Darstellungsfehler handelt)

Dies ist anscheinend ein seltsamer Fehler, der auftritt, wenn der Text-Interpreter Latex ist

set(0, 'DefaultTextInterpreter', 'Latex');

dieser Code wird eine blaue Box mit einem schwarzen Rand und einer Legende außerhalb der Achsen erzeugen

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', 'Position', 'bestOutside')

Wenn ich den Code ändere, so dass das Patch einen nicht-opaken Alpha-Wert hat,

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', 'Position', 'bestOutside')

bekomme ich eine leere schwarze Box anstelle einer gefüllten Box und Achsen, die richtig dimensioniert sind, um eine Legende außerhalb zu platzieren, aber keine Legende.

Das Patch verschwindet auch, wenn ich den gesamten Code bis zur Legende ausführe und dann auf "Plot bearbeiten" im Figure-Menü klicke. Das Patch erscheint nicht wieder, nachdem ich "Plot bearbeiten" abgewählt habe. Die Figure- und Achseneigenschaften (unter Verwendung von get(gcf) und get(gca) entsprechend) sind vor und nach dem Klick auf "Plot bearbeiten" identisch

Das Ändern der Größe des Figure-Fensters lässt das Patch nicht verschwinden. Das Ändern der Achsengröße von der Befehlszeile aus:

p = get(gca, 'Position');p(3) = p(3)/2; set (gca, 'Position', p)

verursacht nicht, dass das Patch verschwindet.

Ich habe versucht, opengl auf Hardware- und Softwaremodus zu setzen (unter Verwendung von opengl hardware, opengl software) und keinen Unterschied festgestellt.

3voto

Marc Punkte 5075

Danke an Rasman, der versucht hat, den Fehler zu reproduzieren und dabei gescheitert ist. Das hat mir geholfen herauszufinden, dass das Problem eine Wechselwirkung zwischen dem Latex-Interpreter und OpenGL ist. Dies scheint mit MATLAB-Fehler 359330 zusammenhängen

Die Lösung besteht darin, die Texteigenschaften von Objekten einzeln zu setzen anstatt die Standard-Rendering-Option zu verwenden (was umständlich ist)

Zusammenfassung

Das Setzen der defaultTextInterpreter Figure-Eigenschaft auf 'latex' mit OpenGL kann dazu führen, dass MATLAB abstürzt oder eine Assertion ausgibt, wenn es nach PostScript druckt. Beschreibung

Bei Verwendung des OpenGL-Renderers kann das Setzen der defaultTextInterpreter Figure-Eigenschaft auf 'latex' und dann das Drucken auf PostScript oder encapsulated PostScript zu einem Absturz oder einer Assertion in MATLAB führen. Zum Beispiel kann dieser Code,

figure;
axes;
set(gcf,'defaultTextInterpreter','latex');
set(gcf,'renderer','openGL');
print figure.eps;

zu einem Absturz oder einer Assertion führen. Zu anderen Zeiten könnten folgende Fehler im MATLAB-Befehlsfenster erscheinen:

??? Error using ==> strcat Not enough input arguments.

Error in ==> tex>localCheckValidString at 138 strchk = strcat(str{:});

Error in ==> tex at 111 [err] = localCheckValidString(str);

Workaround

Setzen Sie die defaultTextInterpreter-Eigenschaft nicht auf 'latex', wenn Sie OpenGL verwenden. Setzen Sie stattdessen die Interpreter-Eigenschaft von Textobjekten einzeln auf 'latex'.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X