Diagrammanzahl in Abhängigkeit von Anzahl Ergebnisspalten

Tabellen und Grafiken erstellen und anordnen


Mike_1
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 1. Okt 2012, 15:43

Diagrammanzahl in Abhängigkeit von Anzahl Ergebnisspalten

Beitrag von Mike_1 »

Hallo zusammen,

ich habe ein Problem und hoffe ihr könnt mir helfen. Habe zur Verdeutlichung ein kleines Testbeispiel erstellt.

Aus Berechnungen erhalte ich eine Textdatei (wie z.B. Data1.txt) mit mehreren Spalten. Für jede Spalte Menge(i) soll ein Diagramm erzeugt werden. Die Spaltenanzahl ist variabel und soll im Latex File abgefragt und berücksichtigt werden. Bei nur einer Menge1 soll nur ein Diagramm erzeugt werden, bei zwei Mengen zwei Diagramme usw. Hat jemand einen Vorschlag?

Vielen Dank schon einmal.


kleines Testbeispiel für 3 Mengen:


Data1.txt:
Mess	    Menge1  Menge2  Menge3  
1               5           3         2     
2	       10         11        10     
3	       12         13        11     
4	       14         16        17     
5	       17         19        18     
6	       20         21        22     
7	       24         23        24     
8	       27         28        27     
9	       31         32        31     
10	       36         35        33     
\documentclass[paper=a4,12pt,version=last,landscape]{scrartcl}

\usepackage{pgfplots}  

\begin{document}

  \begin{tikzpicture} 
  \begin{axis}[width=0.9\textwidth,height=0.9\textheight]                               
	\addplot table[x=Mess, y=Menge1] {data1.txt};
  \end{axis}
  \end{tikzpicture}


  \begin{tikzpicture} 
  \begin{axis}[width=0.9\textwidth,height=0.9\textheight]                               
  \addplot table[x=Mess, y=Menge2] {data1.txt};
  \end{axis}
  \end{tikzpicture}


  \begin{tikzpicture} 
  \begin{axis}[width=0.9\textwidth,height=0.9\textheight]                               
  \addplot table[x=Mess, y=Menge3] {data1.txt};
  \end{axis}
  \end{tikzpicture}

\end{document}


esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Möglich wäre
\begin{filecontents*}{data1.txt}
Mess Menge1 Menge2 Menge3 
1 5 3 2 
2 10 11 10 
3 12 13 11 
4 14 16 17 
5 17 19 18 
6 20 21 22 
7 24 23 24 
8 27 28 27 
9 31 32 31 
10 36 35 33
\end{filecontents*}

 \documentclass[12pt,landscape]{scrartcl} 
 \usepackage{pgfplots}
 \pgfplotsset{compat=newest}% damit es in Online-Editor läuft 
 %\pgfplotsset{compat=1.12}% aktuelle Version

 \usepackage{datatool}
 \DTLsetseparator{ }% Leerzeichen als Spaltentrenner
 \DTLloaddb{data1}{data1.txt}
 \newcommand\Anzahl{}
 \edef\Anzahl{\DTLcolumncount{data1}}
 \DTLdeletedb{data1}

 \begin{document} 
   \foreach[count=\j] \i in {2,...,\Anzahl}{
     \begin{tikzpicture} 
       \begin{axis}[width=0.9\textwidth,height=0.9\textheight] 
        \addplot table[x=Mess, y index=\j] {data1.txt}; 
       \end{axis} 
     \end{tikzpicture}
   \par}
 \end{document}
wobei ich datatool hier nur zum Zählen der Spalten verwendet habe, da ich auf die Schnelle nicht gefunden habe, ob und wie man mit pgfplotstable die Spaltenanzahl ermitteln könnte.

Gruß
Elke

Mike_1
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 1. Okt 2012, 15:43

Beitrag von Mike_1 »

Hallo Elke,

vielen Dank für Deine Antwort und Hilfe. Es funktioniert alles, prima. An einer Sache hängt es leider noch:

Bei meinem Minimalbeispiel waren die Achsenbeschriftungen, Einteilungen usw. gleich. Die sind bei im Allgemeinen unterschiedlich. Ich müsste daher die gesamte Definition in die Schleife integrieren. Im Latex sind Schleifen usw. für mich absolutes Neuland. Daher hätte ich noch zwei kleine Fragen

- es sind erstmal max. 5 Ergebnisspalten, lässt sich das zunächst über eine Abfrage realisieren, also

if Anzahl 1 dann

else if anzahl 2 dann

usw.

- hätte jemand einen Vorschlag wo man die ganze Definition von Schleifen in latex usw. gut nachlesen kann. Das ist sicherlich die elegantere Variante, da muss ich mich erstmal einarbeiten.


Vielen Dank schon einmal.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Du kannst mit \foreach mehrere Laufvariablen gleichzeitig verwenden. Am besten Du liest das in der Doku von [d]pgf[/d]/tikz nach.

Die andere Frage betrifft Verzweigungen. Dafür gibt es Pakete wie ifthen oder etoolbox. Es geht auch mit \ifcase
\documentclass{scrartcl}

\newcommand\Anzahl{3}

\begin{document}
\ifcase\Anzahl
  Null%
  \or
  Eins
  \or
  Zwei
  \or
  Drei
  \or
  Vier
  \else
  Viele
  \fi
\end{document}
Gruß
Elke

Mike_1
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 1. Okt 2012, 15:43

Beitrag von Mike_1 »

Hallo Elke,

vielen Dank noch einmal für Deine Hilfe. Schaue mir das ganze in Ruhe genau an.

Viele Grüße,
Mike_1

Antworten