PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pgfplotstable - extra Zeile für Einheiten



FloSch369
23-09-2009, 13:52
Hallo,

habe Zahlenwerte in einer Datei und erstelle daraus mittels pgfplotstable eine Tabelle. Ist es möglich, entweder an diese Tabelle eine zusätzliche Zeile mit den Einheiten der jeweiligen Spalte anzufügen oder für Zeilen unterschiedliche Formatierung vorzugeben (sprich: die letzte Zeile als string type)? Beiße mir da gerade die Zähne dran aus.

So sollte das dann in etwa aussehen


==================
Col1 Col2 Col3 ... <- Spaltenüberschriften
------------------
0 5 1 ... <- Zahlenwerte (Daten der Tabelle)
2 6 0 ...
1 5 7 ...
... ... ... ...
------------------
m J W ... <- Zeile mit den Einheiten
==================


Natürlich wäre es super einfach, die Einheiten in einer zusätzlichen Spalte (dann als string type) zu definieren und den Inhalt der Tabelle zu transformieren. Aber a) möchte ich das nicht und b) würden meine Tabellen dann nicht mehr auf die Seiten passen, da die Tabellen wesentlich höher als breiter sind.

Die einfachste Lösung schien mir, die Einheiten direkt in die letzte Zeile in der Datei zu schreiben. Aber dann kommt natürlich eine Fehlermeldung, weil der Inhalt nicht als Zahl erkannt werden kann. Wollte mir dann mit einem Trick behelfen: für jede verwendete Einheit eine Nummer, die sonst nicht in den Daten vorkommt (z.B. 999999999 für N und 999999998 für m, ...) und mittels string replace dann ersetzen. Funzt natürlich auch net, weil string replace nur im pre processing geht und dann wiederum der neue Inhalt auch nicht als Zahl erkannt wird.

Kann mir hier bitte jemand helfen?
Vielen Dank

FloSch369
23-09-2009, 14:15
Update:
es funktioniert mit empty cells with. Am Ende in der Datei einfach eine Zeile mit leere Werte eingeben, also z.B.


...
1234; 223; 243.111; 3413244; ...
;;;; ...

wenn der Trenner semicolon ist, und dann mittels empty cells with={[einheit]} für die jeweilige column die Einheit hinzufügen. Allerdings funktioniert das nur, wenn tatsächlich nirgendwo sonst leere Zellen sind. Da das bei mir der Fall ist, kann ich mit dieser Lösung gut leben. Allerdings würde mich eine generelle Lösung trotzdem interessieren.

alexraasch
23-09-2009, 17:50
Geht aber nur, wenn man sonst keine leeren Werte hat.

FloSch369
23-09-2009, 17:58
Ja klar, wie oben bemerkt:

Allerdings funktioniert das nur, wenn tatsächlich nirgendwo sonst leere Zellen sind...
Und aus ebendiesem Grund:


Allerdings würde mich eine generelle Lösung trotzdem interessieren.

;)

alexraasch
24-09-2009, 07:16
Wie wär's hiermit:



\documentclass{scrartcl}


\usepackage{tikz, pgfplots, booktabs, colortbl}

\begin{filecontents}{test.dat}
level dof error1 error2 info {grad(log(dof) log(error2))} quot(error1)
1 4 2.50000000e-01 7.57858283e-01 48 0 0
2 16 6.25000000e-02 5.00000000e-01 25 -3.00000000e-01 4
3 64 1.56250000e-02 2.87174589e-01 41 -3.99999999e-01 4
4 256 3.90625000e-03 1.43587294e-01 8 -5.00000003e-01 4
5 1024 9.76562500e-04 4.41941738e-02 22 -8.49999999e-01 4
6 4096 2.44140625e-04 1.69802322e-02 46 -6.90000001e-01 4
7 16384 6.10351562e-05 8.20091159e-03 40 -5.24999999e-01 4
8 65536 1.52587891e-05 3.90625000e-03 48 -5.35000000e-01 3.99999999e+00
9 262144 3.81469727e-06 1.95312500e-03 33 -5.00000000e-01 4.00000001e+00
10 1048576 9.53674316e-07 9.76562500e-04 2 -5.00000000e-01 4.00000001e+00
\end{filecontents}

\begin{document}
\newcommand{\Einheiten}{DOF & $L_2$ & Err & F & N & F & D}
\pgfplotstabletypeset[
every even row/.style={before row=\rowcolor[gray]{0.9}},
every head row/.style={before row=\toprule,after row=\midrule},
every last row/.style={after row=\Einheiten\\\bottomrule}
]{test.dat}
\end{document}


Dann vor jeder Tabelle \renewcommand{\Einheiten}{...} ausführen.

FloSch369
24-09-2009, 07:37
Super, läuft.
Vielen Dank!