Diagramme in Latex mit pgfplots

5 Aug

Ich habe mich in den letzten Wochen nebenher mit der Darstellung von Diagrammen in Latex beschäftigt. Schnell stößt man hier auf pgfplots und damit auch auf zahlreiche Beispiele. Am umfangreichsten ist die Dokumentation zu pgfplots selber mit 378 Seiten. Mit den Diagrammen möchte ich im Wesentlichen das Verhältnis zwischen erzeugter Last und dem Verhalten von unterschiedlich konfigurierten Systemen darstellen. Bisher erscheinen mir Darstellungen, wie sie im letzten Blogbeitrag genannte werden weniger Sinnvoll für meine Zwecke.

Mir hat sich recht schnell gezeigt, dass das Erstellen bestimmter Diagramme nicht so einfach ist, sobald man von den Beispielen ein wenig abrückt. Eine wichtige Voraussetzung ist eine aktuelle Version von TeX Live (unter Debian in meinem Fall). Die kurzzeitige Arbeit an einem aktuellen Ubuntu-System mit installiertem TeX Live 2009 (aktuelle Version unter Ubuntu) hat mich zwischenzeitlich einige Nerven gekostet, da sich Darstellung und Syntax in einigen wenigen Punkten unterscheiden. Außerdem ist die Version im Latex-Dokument zwecks Abwärskompatibilität anzugeben, damit die Darstellung auch bei neueren Versionen noch passt. Der Standard ist allerdings nicht die neuste Version, so dass diese explizit angegeben werden muss. Hier gibt es gravierende Unterschiede wie ich beim Vergleich zwischen TeX Live 2009 und 2012 feststellen musste.

Der Grund, Graphen mit pgfplots zu erstellen ist zum einen die Einheitlichkeit und zum anderen die direkte Integration. Außerdem können Diagramme mit der Änderung weniger Parameter in ihrer Darstellung schnell angepasst werden. Das Diagramm, was ich erstellt habe, besteht lediglich aus zwei Kurven, die das Verhältnis zwischen Last und Kapazität zeigen. Einiges habe ich aus der Dokumentation erfahren, anderes im Internet gefunden. Meine begrenzten, aber bislang ausreichenden Kenntnisse in Latex haben mich hier nicht sehr weit gebracht. Die meiste Zeit habe ich damit verbracht, herauszufinden, welche Konstukte es gibt und welche zielführend sind.

Das folgende Beispieldiagramm hätte ich mit einem Grafikprogramm in einem Bruchteil der Zeit erstellen können. Die Darstellung von Werten aus Lasttests würde allerdings mit einem Grafikprogramm schwierig, mit pgfplots ist es hingegen ein Kinderspiel. Das Diagramm in der Abbildung ist ziemlich einfach gehalten und zeigt das Verhältnis zwischen bereitgestellten Ressourcen und der Last die erzeugt wird. Mit Underprovisioning gekennzeichnet sind die Teile, in der die Last größer ist als die bereitgestellten Ressourcen. Das kann dann zum Beispiel einen Ausfall oder eine Verlangsamung des Systems zur Folge haben. Als Pendant hierzu habe ich Diagramme erstellt, die eine dynamische Bereitstellung von Resourcen zeigen, um möglichst wenig Overprovisioning und gar kein Underprovisioning zu erhalten.

Diagramm zu Over- und Underprovisioning

Diagramm zu Over- und Underprovisioning

Hier der Latex-Code:

\begin{tikzpicture}
 \pgfdeclarepatternformonly{north east lines wide}
  {\pgfqpoint{-1pt}{-1pt}}
  {\pgfqpoint{10pt}{10pt}}
  {\pgfqpoint{9pt}{9pt}}
  {
   \pgfsetlinewidth{1.4pt}
   \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
   \pgfpathlineto{\pgfqpoint{9.1pt}{9.1pt}}
   \pgfusepath{stroke}
  }

 \pgfdeclarepatternformonly{north west lines wide}
  {\pgfqpoint{-1pt}{-1pt}}
  {\pgfqpoint{10pt}{10pt}}
  {\pgfqpoint{9pt}{9pt}}
  {
   \pgfsetlinewidth{1.4pt}
   \pgfpathmoveto{\pgfqpoint{0pt}{9.1pt}}
   \pgfpathlineto{\pgfqpoint{9.1pt}{0pt}}
   \pgfusepath{stroke}
  }

 \begin{axis}[
  legend style={
   at={(0.97,0.97)},
   anchor=north east,
   },
  area legend,
  ticks=none,
  smooth,
  xlabel={Zeit},
  ylabel={Resourcen / Auslastung},
  stack plots=y,
  area style,
  enlarge x limits=false,
  ]

  \draw[-,very thick](axis cs:1, 4.5)--(axis cs:2, 4.5)node[right]{\footnotesize{Underprovisioning}};
  \draw[-,very thick](axis cs:5,3.7)--(axis cs: 3,4.4);
  \draw[-,very thick](axis cs:2.7,3.3)--(axis cs: 2.7,3.7)node[above]{\footnotesize{Overprovisioning}};

  \addplot+[
   draw=blue,
   pattern=north east lines wide,
   pattern color=red!60!white
   ]
   coordinates
   {(0,2) (1,5) (2,3) (3,3) (4,2) (5,4) (6,2) (7,3)}
   \closedcycle;

  \addplot[mark=none,
   draw=red,
   pattern=north west lines wide,
   stack plots=false,
   area legend,
   pattern color=green!60!white
   ]
   coordinates
   {(0,3.5) (1,3.5) (2,3.5) (3,3.5) (4,3.5) (5,3.5) (6,3.5) (7,3.5)}
   \closedcycle;
  \legend{
   Auslastung,
   Kapazität,
   }
 \end{axis}
\end{tikzpicture}

Hifreich:

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: