2014-12-09 7 views
5

Versuchen, hier die Farben einer Achse in einem Matlab-Plot zu ändern.Zugreifen auf Grafikobjekteigenschaften mit Punktnotation bei Matlab-Versionen vor R2014b


Referenzierung Matlab Dokumentation: Matlab docs on setting axis properties

-Code-Schnipsel:

subplot('Position', [ left bottom (1/(cols*2)) (1/rows) ]); 
    ax = gca; 
    ax.Color = 'y'; 

, dass alle aber eine Kopie ist und in der Dokumentation aus dem Beispiel einfügen (hier abgebildet):

enter image description here

Aber Matlab wirft eine Warnung und die Achse Farben für mich nicht ändern:

Warnung: Struct Feldzuordnung überschreibt mit Klasse „double“ Wert. Siehe MATLAB R14SP2 - Versionshinweise, Zuweisen von Nichtstruktur Variablen als Strukturen Zeigt Warnung an, für Details.

Ich habe versucht, ein Doppel, wie sagen 42,0, zuweisen, aber es mochte nicht besser.

+1

Ich bekomme den gleichen Fehler auf meiner Maschine. –

+1

versuchen Sie 'ax = handle (gca);' zuerst, dann 'ax.Color = 'y';' – Hoki

+4

Verwenden Sie R2014b oder eine frühere Version? – am304

Antwort

14

Ihre Warnmeldung weist darauf hin, dass Sie eine ältere Version von Matlab R2014b verwenden.

Wenn es ist, dass Sie keinen Zugriff auf die Punktnotation direkt, denn wenn man ax=gca; tun Sie einen Rückgabewert ax erhalten, die double der Klasse ist. Der Wert ist die ID des Handles zum Objekt (die aktuelle Achse in diesem Fall) aber nicht der Griff selbst.

Wenn Sie ax.Color = 'y'; versuchen, Matlab denkt, dass Sie Ihr ax [double] mit einer neuen Variablen ax überschrieben werden sollen, die eine Struktur, mit dem Feld sein würde color, und eine Warnung werfen.

Sie können weiterhin auf die Punktnotation für die Grafikobjekte und -eigenschaften zugreifen, müssen jedoch zuerst das echte Handle des Objekts abrufen, indem Sie die Funktion handle verwenden. Zum Beispiel:

ax = handle(gca) ; %// the value "ax" returned is an `object`, not a `double` 

oder sogar auf einem vorhandenen Verweis auf ein Grafikobjekt Griff:

ax = gca ; %// retrieve the `double` reference to the handle 
... 
ax = handle(ax) ; %// the value "ax" returned is an `object`, not a `double` 

danach sollten Sie in der Lage sein, die Punktnotation für alle öffentlichen Eigenschaften des Grafikobjekts zu verwenden. sollte jetzt gültig sein

+0

Schöne Antwort! Ich wusste nichts über die 'Handle'-Funktion. Scheint ... praktisch :-P –

+0

Ah! r2014a, das ist bizarr, ich habe das erst vor ein paar Tagen installiert, ich nahm an, es war das Neueste und Größte. –

+1

@LuisMendo, in einigen Fällen ziemlich praktisch, und auch schneller, wenn Sie ein Objekt sehr häufig aktualisieren müssen. Wenn es Ihnen gefällt, versuchen Sie 'ax = java (handle (gca))'. es eröffnet eine ganze Reihe von Möglichkeiten ... obwohl undokumentiert. – Hoki

Verwandte Themen