\documentstyle[bar,german]{article} \newdimen\mydim\mydim\textwidth\advance\mydim -6pt\divide\mydim 2 \def\back{$\backslash$} \def\mycs#1{{\tt\back #1}} \def\myhelp#1{\back#1\{barenv\}} \def\mybar#1#2{\back bar\{#1\}\{#2\}} \begin{document} \centerline{\LARGE Balkendiagramme in \LaTeX-Dokumenten} \vspace{3ex} \centerline{\large\sc Joachim Bleser\hfil Edmund Lang} \vspace{2ex} \centerline{\large TH Darmstadt, Hochschulrechenzentrum} \vspace{2ex} Als Hilfsmittel, um Daten zu veranschaulichen, werden heutzutage immer h„ufiger Diagramme, insbesondere Balken- oder Kuchendiagramme, eingesetzt. Jeder kennt die Balkendiagramme, die z.B.\ nach Wahlen Gewinne und Verluste der einzelnen Parteien auf einen Blick verdeutlichen. Das hier vorgestellte Style-File {\tt bar.sty} hilft dem \LaTeX-Anwender, solche {\em Balkendiagramme} in seinen Dokumenten zu verwenden, ohne auf externe Programme, wie z.B.\ {\sc Havard Graphics} oder {\sc Excel} im PC-Bereich, zurckgreifen zu mssen. \begin{center} \parbox{6cm}{\tt% \back begin\{barenv\}\\ \hspace*{5mm}{\em Deklarationen}\\ \hspace*{5mm}\back bar\{{\em H”he}\}\{{\em Fllungsindex}\}[{\em Wert}]\\ \hspace*{1cm}\vdots\\ \hspace*{5mm}\back bar\{{\em H”he}\}\{{\em Fllungsindex}\}[{\em Wert}]\\ \back end\{barenv\}\\ {\em Legende}} \end{center} Innerhalb der neu definierten Umgebung {\tt barenv} k”nnen beliebig positive und negative Balken gezeichnet werden. Acht verschiedene Schraffuren stehen zur Verfgung. \begin{tabular}{lcccccccc} Schraffur: &\legend1{}&\legend2{}&\legend3{}&\legend4{}&% \legend5{}&\legend6{}&\legend7{}&\legend8{}\\ Index: & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \end{tabular} Die {\em Deklarationen} definieren Einstellungen wie z.B.\ Balkenbreite oder die Einteilung der Achsen. Der einfachste Fall ist ein zweidimensionales Balkendiagramm. Die Balken werden durch ihre H”he und ihren Fllungsindex definiert. Optional ist noch eine beliebige Zeichenfolge m”glich, die unter den Balken geschrieben wird. \vspace{\baselineskip} \noindent\parbox{\mydim}{ \begin{barenv} \setwidth{30} \setyaxis{0}{50}{10} \bar{10}{1} \bar{45}{2}[\tt\small max] \bar{30}{3} \bar{25}{4} \end{barenv} }\hfill \parbox{\mydim}{\tt \back begin\{barenv\}\\ % \back setxaxis\{1\}\{4\}\{1\}\\ \back setyaxis\{0\}\{50\}\{10\}\\ \back bar\{10\}\{1\}\\ \back bar\{45\}\{2\}[\back tt max]\\ \back bar\{30\}\{3\}\\ \back bar\{25\}\{4\}\\ \back end\{barenv\}\\ } Die x-Achse kann auch anstelle von Zahlen mit den Monatsnamen (d.h.\ mit den ersten drei Buchstaben der Monatsnamen) oder Tagen (d.h.\ mit den ersten drei Buchstaben der Tage) beschriftet werden. \centerline{\bf Temperatur / Monat} \begin{center} \begin{barenv} \setwidth{30} \setstyle{\sc} \setxvaluetyp{month} \setxaxis{1}{11}{2} \setstyle{\tt} \setyaxis{0}{40}{10} \bar{0}{1} \bar{8}{1} \bar{15}{1} \bar{25}{1} \bar{20}{1} \bar{5}{1} \end{barenv} \end{center} \vspace{\baselineskip} Zwischen die Balken kann zus„tzlicher Zwischenraum eingefgt oder auch eine Trennlinie gezogen werden. Ein Diagramm kann sehr leicht an der x-Achse gespiegelt werden, indem der Anfangs- und der Endwert der y-Achse vertauscht werden. In diesem Fall muá aber auch die Schrittweite negiert werden. \vspace{1ex} \noindent\parbox{\mydim}{ {\bf Gnu-Aktienindex} \vspace{\baselineskip} \begin{barenv} \setwidth{30} \setstyle{\tt} \setyaxis[10]{-20}{40}{10} \setstyle{\sc} \setxvaluetyp{day} \setxaxis{5}{8}{1} \bar{36.5}{8} \bar{6.2}{8} \vline \bar{-3.2}{8} \bar{-16}{8} \end{barenv} } \parbox{\mydim}{ {\bf Gnu-Aktienindex} \vspace{\baselineskip} \begin{barenv} \setwidth{30} \setstyle{\tt} \setyaxis[10]{40}{-20}{-10} \setstyle{\sc} \setxvaluetyp{day} \setxaxis{5}{8}{1} \bar{36.5}{8} \bar{6.2}{8} \vline \bar{-3.2}{8} \bar{-16}{8} \end{barenv} } \vspace{\baselineskip} Wenn der zweidimensionale Fall nicht ausreicht, k”nnen die Balken auch dreidimensional darstellen werden. Der Befehl \mycs{setdepth} setzt die Balkentiefe auf einen Wert gr”áer 0; dadurch erhalten die Balken Plastizit„t. \noindent\parbox{\mydim}{ \begin{barenv} \setdepth{10}\setwidth{30} \setxaxis{1}{4}{1} \setyaxis[10]{-20}{60}{20} \bar{10,2}{1} \bar{45,6}{2} \bar{30}{3} \bar{-12,7}{4} \end{barenv} }\hfill \parbox{\mydim}% {\tt\myhelp{begin}\\ \back setdepth\{10\}\back setwidth\{30\}\\ \back setxaxis\{1\}\{4\}\{1\}\\ \back setyaxis[10]\{0\}\{60\}\{20\}\\ \mybar{10,2}{1}\\ \mybar{45,6}{2}\\ \mybar{30}{3}\\ \mybar{-12,7}{4}\\ \myhelp{end} } \vspace{\baselineskip} Die Beschriftung der Balken kann an verschiedenen Stellen erfolgen. Voreingestellt ist {\em oberhalb}, wenn die Gr”áe $>$ 0 ist, und unterhalb, wenn die Gr”áe $<$ 0 ist. Fnf weitere M”glichkeiten sind zugelassen, so z.B. {\em innerhalb} der Balken oder stets {\em unterhalb}. \noindent\parbox{\mydim}{ \vspace*{\baselineskip} \begin{barenv} \setdepth{10}\setwidth{30} \setnumberpos{inside} \setxaxis{1}{4}{1} \setyaxis[10]{-20}{60}{20} \bar{10,2}{1} \bar{45,6}{1} \bar{30}{1} \bar{-12,7}{1} \end{barenv} }\hfill \parbox{\mydim}% {\tt\myhelp{begin}\\ \back setdepth\{10\}\back setwidth\{30\}\\ \back setnumberpos\{inside\}\\ \back setxaxis\{1\}\{4\}\{1\}\\ \back setyaxis[10]\{0\}\{60\}\{20\}\\ \mybar{10,2}{1}\\ \mybar{45,6}{1}\\ \mybar{30}{1}\\ \mybar{-12,7}{1}\\ \myhelp{end} } \vspace{\baselineskip} Sind die Werte der Balken klein, treten Differenzen zwischen den H”hen nicht besonders deutlich hervor. In solchen F„llen kann das Diagramm vertikal mit dem Befehl \mycs{setstretch} skaliert werden. Der umgekehrte Fall, wenn das Diagramm zu groá wird, kann ebenfalls mit \mycs{setstretch} und einem Wert $<1$ abgefangen werden. Die Skalierung betrifft nur die Balkenh”hen, nicht aber Breite und Tiefe. \noindent\parbox{\mydim}{% \begin{barenv} \setstretch{50} \setdepth{10}\setwidth{30} \setnumberpos{up} \setxaxis{1}{4}{1} \setprecision{2} \setyaxis{0}{2}{0.5} \bar{0,2}{1} \bar{1,6}{2} \bar{0,05}{3} \bar{0,13}{4} \end{barenv} }\hfill \parbox{\mydim}% {\tt\myhelp{begin}\\ \back setstretch\{50\}\\ \back setdepth\{10\}\back setwidth\{30\}\\ \back setnumberpos\{up\}\\ \back setxaxis\{1986\}\{1989\}\{1\}\\ \back setprecision\{2\}\\ \back setyaxis\{0\}\{2\}\{0.5\}\\ \back bar\{0,2\}\{1\}\\ \back bar\{1,6\}\{2\}\\ \back bar\{0,05\}\{3\}\\ \back bar\{0,13\}\{4\}\\ \myhelp{end} } Der im obigen Beispiel verwendete Befehl \mycs{setprecision} bestimmt die Anzahl der Nachkommastellen fr die Beschriftungen der Achsen. Im Beispiel wurde, da der Befehl {\em nach} dem \mycs{setxaxis}-Befehl erfolgt, fr die y-Achse zwei Nachkommastellen gew„hlt. Das Diagramm kann mit horizontalen Hintergrundlinien versehen werden. Dies erleichtert das Ablesen der Werte der einzelnen Balken. Es kann zwischen gepunkteten oder durchgezogenen Hintergrundlinien gew„hlt werden. Voreingestellt sind gepunktete Hintergrundlinien. \noindent\parbox{\mydim}{ \begin{barenv} \setstretch{0.05} \setdepth{10}\setwidth{30} \setnumberpos{down} \setyaxis{0}{2500}{500} \hlineon \bar{1400}{4} \bar{2340}{5} \bar{890}{6} \bar{1973}{7} \end{barenv} }\hfill \parbox{\mydim}% {\tt\myhelp{begin}\\ \back setstretch\{0.05\}\\ \back setdepth\{10\}\back setwidth\{30\}\\ \back setnumberpos\{down\}\\ \back setyaxis\{0\}\{2500\}\{500\}\\ \back hlineon\\ \mybar{1400}{4}\\ \mybar{2340}{5}\\ \mybar{890}{6}\\ \mybar{1973}{7}\\ \myhelp{end} } \vspace{\baselineskip} Zus„tzliche Erkl„rungen k”nnen mit dem \LaTeX-eigenen {\tt\back put} Befehl hinzugefgt werden. Da das Balkendiagramm in eine {\tt picture}-Umgebung gezeichnet wird, sind grunds„tzlich alle Befehle erlaubt, die in einer {\tt picture}-Umgebung Verwendung finden (z.B.\ {\tt\back line,\back oval} usw.). \end{document}