PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : *.csv Daten plotten



Bilbo
13-11-2008, 17:33
Hallo,

also, ich raufe mir hier echt die Haare damit. Ist das komplizierteste Problem, dass ich in Latex bisher angetroffen habe.

Ich nutze pgfplots und pgfplotstable, um externe Daten graphisch darzustellen zu lassen.

Beispiel:



\pgfplotstableread[col sep=semicolon]{test.csv}\table

\begin{tikzpicture}
\begin{axis}[
xlabel=Cost,
name=an axis,
ylabel=Error]
\addplot table[x=test1,y=test2] from \table;
\end{axis}
\end{tikzpicture}

Die *.csv (aus Excel-File erstellt) würde dann z.B. so ausehen:



test1;test2
2;5
6;67
9;45
67;40


Ich bekomme dann einen Fehler, dass die Spalte test1 nicht gefunden werden konnte. Scheinbar kann die Datei nicht gelesen/gefunden werden. Pfad simmt aber.

localghost
13-11-2008, 17:55
Liegt vielleicht an dem Semikolon als Spaltentrenner. Da muss wohl ein Komma hin (CSV, comma separated values). Abschnitt 6.2.1 (Providing Input Coordinates, S. 15ff) der Anleitung von pgfplots (http://ctan.org/pkg/pgfplots) hilft da vielleicht auch weiter.


MfG
Thorsten¹

Bilbo
13-11-2008, 18:02
Bringt mir ja nichts, wenn Excel das immer mit Semikolon abspeichert und man alles manuell ändern muss. Ist *.dat eigentlich vorteilhafter? Gibt es leider nicht unter Excel oder OpenOffice.

localghost
13-11-2008, 18:57
Bringt mir ja nichts, wenn Excel das immer mit Semikolon abspeichert und man alles manuell ändern muss. Ist *.dat eigentlich vorteilhafter? Gibt es leider nicht unter Excel oder OpenOffice.
Also, wenn ich eine Tabelle in OpenOffice.org 3.0 mit "Speichern unter ..." als CSV-Datei abspeichern will, werde ich im Dialog "Textexport" unter anderem auch nach dem Feldtrenner gefragt. Das Dialogfenster habe ich mal angehängt.

jeebee
13-11-2008, 19:02
naja, gerade manuell musst du's ja nicht machen, kannst ja mittels sed oder so einfach alle Semikolons mit Kommas ersetzen.

sed:
sed -i "s/;/,/g" datei.csv

localghost
13-11-2008, 19:07
naja, gerade manuell musst du's ja nicht machen, kannst ja mittels sed oder so einfach alle Semikolons mit Kommas ersetzen. [...]
Tolle Idee ... wenn man unter Linux arbeitet. Die Erwähnung von Excel sagt mir aber, dass Bilbo das nicht tut.

Bilbo
13-11-2008, 19:13
Also, wenn ich eine Tabelle in OpenOffice.org 3.0 mit "Speichern unter ..." als CSV-Datei abspeichern will, werde ich im Dialog "Textexport" unter anderem auch nach dem Feldtrenner gefragt. Das Dialogfenster habe ich mal angehängt.

Läuft denn mein Code von oben, wenn du z.B. ein Minimalbeispiel verwendest?

localghost
13-11-2008, 19:23
Läuft denn mein Code von oben, wenn du z.B. ein Minimalbeispiel verwendest?
Das Minimalbeispiel (http://www.minimalbeispiel.de) müsstest Du schon selbst mal erstellen. Da bin ich ehrlich gesagt nicht genug motiviert. Ich sehe aber gerade, dass das gar nicht am Semikolon liegen kann, denn Du gibst es ja in der ersten Zeile deines Code-Schnipsels als Spaltentrenner an. Mit pgfplots (http://ctan.org/pkg/pgfplots)table bin ich noch nicht vertraut. Ich sehe mir das bei Gelegenheit mal an.

Bilbo
13-11-2008, 19:36
Das Mit pgfplots (http://ctan.org/pkg/pgfplots)table bin ich noch nicht vertraut. Ich sehe mir das bei Gelegenheit mal an.

Ja, damit habe ich auch schon rumprobiert. Allerdings ist pfgplotstable eher zur Darstellung von Tabellen durch externe Dateien im *.dat- oder *.csv Format. Ich will die Daten ja als Linien-, Balken-, Säulendiagramme ausgeben lassen und nicht als normale Tabelle darstellen. Dazu genügt mir auch ein Makro, welches wunderbar seinen Dienst leistet.

jeebee
13-11-2008, 19:36
Tolle Idee ... wenn man unter Linux arbeitet. Die Erwähnung von Excel sagt mir aber, dass Bilbo das nicht tut.

Wenn er kein sed hat, kann afaik sogar das Notepad von Windows "Suchen und Ersetzen" ;)

edit: denn sed gibts auch für Windows: http://gnuwin32.sourceforge.net/packages/sed.htm

Bilbo
13-11-2008, 19:38
Wenn er kein sed hat, kann afaik sogar das Notepad von Windows "Suchen und Ersetzen" ;)
Denn sed gibts auch für Windows: http://gnuwin32.sourceforge.net/packages/sed.htm

Es liegt sowieso nicht am Semikolon oder Komma, denn beides funktioniert nicht.

localghost
13-11-2008, 20:00
Es liegt sowieso nicht am Semikolon oder Komma, denn beides funktioniert nicht.
Mach ein komplettes Minimalbeispiel (http://www.minimalbeispiel.de), gib gegebenenfalls eine Fehlermeldung mit an oder poste gleich die komplette Log-Datei als Anhang. Für eine einfache Tabelle kannst Du die filecontents*-Umgebung benutzen.

Wenn er kein sed hat, kann afaik sogar das Notepad von Windows "Suchen und Ersetzen" ;)

edit: denn sed gibts auch für Windows: http://gnuwin32.sourceforge.net/packages/sed.htm
Es könnte auch bei den UnxUtils (http://sourceforge.net/projects/unxutils) dabei sein.

René Geppert
14-11-2008, 00:43
so allgemein: wenn in windows die sprachoptionen auf englisch ändert, wenn beim export zu *.csv commas und nicht wie mit deutscher einstellung semikola als trenner verwendet
aber wie richtig geschrieben, kann man csv im editor öffnen und search and replace machen

zum thema plotten
csv lassen sich (im komma, NICHT semikolaformat) mit insheet wunderbat in stata einlesen
plotten ist da auch relativ easy und der export zu LaTeX als eps funktioniert wunderbar, z.B. mit beispielen hier: http://www.ats.ucla.edu/stat/Stata/latex/graph_stata_latex.htm

lupus68
14-11-2008, 09:43
Plotten kann sicherlich auch PSTricks und GNU R
Nur falls er kein STATA hat

Syralist
14-11-2008, 10:09
Also folgendes funktioniert bei mir:

\begin{filecontents}{test.csv}
test1;test2
2;5
6;67
9;45
67;40
\end{filecontents}

\documentclass[a4paper,12pt]{scrartcl}

\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}

\pgfplotstableread[col sep=semicolon]{test.csv}\table

\begin{tikzpicture}
\begin{axis}[
xlabel=Cost,
name=an axis,
ylabel=Error]
\addplot table[] from {\table};
\end{axis}
\end{tikzpicture}

\end{document}

also ohne Angabe der Spaltennamen.
Es funktioniert auch, wenn ich die Spalten nicht mit Namen angebe sondern mit Index:

\addplot table[x index=0,y index=1] from {\table};

Bilbo
14-11-2008, 14:29
@Syralist

Ja, jetzt funktioniert es. Lag tatsächlich nur an den Spaltennamen, aber mit Index geht es einwandfrei. Geht sogar ohne filecontents.

Danke :)