Subsections


11.1 Grundlagen

se:graph_grundlagen

MATLAB beinhaltet hervoragende Werkzeuge zur Visualisierung von numerischen Ergebnissen. Dies reicht von einfachen Befehlen bis zur detailierten Gestaltungsmöglichkeit praktisch aller Eigenschaften einer Graphik.

Die Art der Befehle gliedert sich in zwei Kategorien, sogenannte ''High Level''- Befehle, die komplexe Aufgaben erfüllen und ''Low Level''-Befehle zur Manipulation von Graphikobjekten.


11.1.1 Graphikobjekte

se:graph_objekte


11.1.1.1 Objekthierarchie

se:graph_hierarchie

Die Hierarchie von Graphikobjekten folgt einer Eltern-Kind-Beziehung (parent-child-relationship).


Table 11.1: Hierarchie von Graphikobjekten in MATLAB.
root       Graphiksystem
  figure     Zeichnung
    axes   Achsensystem
      line Linie
      patch Polygonzug
      text Text
      image Bild
      surface Fläche
      light Licht
      rectangle Rechteck
    uicontrol   Benutzerinterface
    uimenu   Menüeinträge
    uicontextmenu   Kontextmenü

Die Eltern-Kind-Beziehung ist in Tabelle 11.1 durch die Rechtsverschiebung symbolisiert. So ist z.B. jede line ein Kind einer axes, diese ein Kind einer figure, und diese wiederum ein Kind des root. Auf allen Ebenen können nun Eigenschaften definiert und abgefragt werden.


11.1.1.2 Zugriff auf Objekte - Handles

se:graph_handle

Um nun Graphikobjekte eindeutig identifizieren zu können, braucht man einen Datentyp, der als Zeiger auf ein Graphikobjekt dient (Handle). Ein solcher Handle ist somit ein eindeutiger ''Identifier'' für ein Graphikobjekt. Handles können Variablen zugewiesen werden und stehen damit im jeweiligen Programm zur weiteren Verfügung. Im Wesentlichen kann bei jedem MATLAB-Graphikbefehl eine Zuweisung erfolgen. Anstelle von plot(x,y) kann man schreiben ph=plot(x,y), wobei nun in der Variablen ph der Handle für die entsprechende Linie gespeichert ist.

Am Beispiel von Linien soll hier demonstriert werden, wie man zu Handles kommt.

 x  = linspace(0,pi,100);
 y1 = sin(x); y2 = cos(x);

 fh    = figure;
 ah    = axes;
 lh(1) = line(x,y1, 'Color','red',  'LineStyle','-');
 lh(2) = line(x,y2, 'Color','blue', 'LineStyle',':');
Die Variablen fh, fh und lh enthalten nun die Handles. Man sieht hier, dass es in MATLAB natürlich möglich ist, Arrays von Handles zu speichern.

Um nun alle oder nur bestimmte Eigenschaften eines Objektes abfragen zu können, benötigt man den Befehl get.

 get(fh)
 get(fh,'Position')
Die erste Form liefert dabei alle Eigenschaften und deren Werte und die zweite Form liefert nur den Wert der Eigenschaft 'Position'.

Als Gegenstück ermöglicht der Befehl set das Verändern von Eigenschaften.

 set(ah, 'Color','green')
 set(fh, 'Units','normalized', 'Position',[0.1,0.1,0.8,0.8])
 set(lh, 'LineWidth',10)
 set(lh(2), 'Color','black')
Wie bei allen ''Low Level'' Graphikbefehlen (z.B.: line) kann man also Wertepaare angeben, die jeweils aus einer 'Eigenschaft' und dem zugehörigen 'Wert' bestehen. Die 'Eigenschaft' ist dabei immer eine Zeichenkette aus einer vordefinierten Liste von Eigenschaften, der zugehörige 'Wert' kann je nach 'Eigenschaft' von unterschiedlichem Datentyp sein.


11.1.1.3 Spezielle Handles

se:graph_spechandle

Da das Graphiksystem automatisch gestarted wird, gibt es nach dem MATLAB-Programmstart den Handle auf root. Er hat immer den Wert 0. Dieser ist besonders interessant, wenn man Defaulteinstellungen für Graphikobjekte einstellen will. So kann man z.B. mit

 set(0,'DefaultFigureColor','b')
bevor man eine Figure öffnet das Defaultverhalten aller weiteren Figuren verändern. Sinngemäß gilt das natürlich für alle Graphikobjekte. Mit
 set(0,'DefaultFigureColor','remove')
kann man die Einstellung wieder auf MATLAB-Defaultwerte zurücksetzen.

Hat man z.B. mehrere Figuren und/oder mehrere Achsensysteme kann man mit speziellen Handles auf die derzeit aktiven zugreifen:

gcf Handle für aktive Figure get current figure
gca Handle für aktive Achse get current axes
gco Handle für aktives Objekt get current object

Winfried Kernbichler 2005-04-26