CSV in tikzpicture

Tabellen und Grafiken erstellen und anordnen


MoritzFranke

CSV in tikzpicture

Beitrag von MoritzFranke »

Hallo,

ich versuche vergebens eine CSV Datei in tikzpicture zu integrieren.

Was mache ich denn falsch: Irgendwas stimmt mit den Trennzeichen in der csv Datei nicht, aber ich weiß nicht wie ich das beheben kann:
\documentclass[a4paper,12pt,twoside]{report} 
\usepackage[utf8]{inputenc} 
\usepackage[ngerman]{babel}
\usepackage{siunitx} 
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{csvsimple}

\begin{document} 

\begin{figure}[h!]
  \begin{center}
    \begin{tikzpicture}
      \begin{axis}[
          width=\linewidth, % Scale the plot to \linewidth
          grid=major, 
          grid style={dashed,gray!30},
          xlabel=X Axis $U$, % Set the labels
          ylabel=Y Axis $I$,
          x unit=\si{\volt}, % Set the respective units
          y unit=\si{\ampere},
          %legend style={at={(0.5,-0.2)},anchor=north},
          %x tick label style={rotate=90,anchor=east}
					x tick label style={anchor=east}
        ]
        \addplot 
        % add a plot from table; you select the columns by using the actual name in
        % the .csv file (on top)
        table[col sep=tab, ignore chars=,] {omega.csv}; 
        \legend{Plot}
      \end{axis}
    \end{tikzpicture}
    \caption{My first autogenerated plot.}
  \end{center}
\end{figure}

\end{document}
Meine omgega.csv Datei sieht so aus:

1 0.002627205
2 0.0018133055
3 0.0013149582

Dabei stehen die Werte jeweils in Spalte 1 und Spalte 2

Danke für Tipps :-)

Kuss Moritz

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

Beitrag von esdd »

Deine angegebene Datenstruktur sieht sehr nach Leerzeichen als Spaltentrenner aus.

Lass einfach die Optionen bei table weg, da in der Voreinstellung col sep=space ist, was dann sowohl ein (oder mehrere) Tabs als auch ein oder mehrere aufeinanderfolgende Leerzeichen sein können.
\begin{filecontents*}{omega.csv}
1 0.002627205 
2 0.0018133055 
3 0.0013149582 
\end{filecontents*}

\documentclass[a4paper,12pt,twoside]{report} 
\usepackage[utf8]{inputenc} 
\usepackage[ngerman]{babel} 
\usepackage{siunitx} 
 
\usepackage{pgfplots}% lädt auch tikz
\pgfplotsset{compat=newest}% aktuell wäre derzeit 1.14
\usepgfplotslibrary{units}% für die Option x unit und y unit

\begin{document} 
\begin{figure}[h!] 
   \centering
     \begin{tikzpicture} 
       \begin{axis}[ 
           width=\linewidth-9.5pt, % Scale the plot 
           grid=major, 
           grid style={dashed,gray!30}, 
           xlabel=X Axis $U$, % Set the labels 
           ylabel=Y Axis $I$, 
           x unit=\si{\volt}, % Set the respective units 
           y unit=\si{\ampere}, 
         ] 
         \addplot table {omega.csv}; 
         \legend{Plot} 
       \end{axis} 
     \end{tikzpicture} 
     \caption{My first autogenerated plot.} 
\end{figure} 
\end{document}
Noch ein paar Anmerkungen:

Dein Beispiel erfordert die pgfplots-Bibliothek units. Gib immer einen Wert für die pgfplots Option compat an, da pgfplots sonst in einen Kompatibilitätsmodus zu einer ganz alten Version wechselt. Lade Pakete nicht mehrfach. (Abgesehen davon wird tikz sowie von pgfplots geladen).

Die center Umgebung fügt zusätzlichen vertikalen Abstand davor und danach ein. Das macht aber auch schon figure, weshalb ich hier \centering verwende.

Gibt man die Option width für eine axis Umgebung an, dann werden von dem angegebenen Wert 45pt für die Achsenbeschriftung reserviert - unabhängig von deren tatsächlicher Breite. Bei Dir ist die Beschriftung aber etwa 54.5pt breit, weshalb width=\linewidth hier zu einer `overfull box` führen würde.

MoritzFranke

Beitrag von MoritzFranke »

Danke für deine schnellen Tipps.

Doch leider funktioniert das nicht.

pdflatex> !Package PGF Math error: Could not parse input '51;0.00015828442' as a floating point number, sorry. The unreadable part was near ';0.00015828442'

Sind meine Zahlen mit zu vielen Stellen?

Also die csv Datei sieht einfach aus wie eine Excel Tabelle mit zwei Spalten, in der linken stehen Werte von 0 bis 2000 und in der zweiten Spalte 0.00015...

Hmm...

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

Beitrag von esdd »

Ich bin davon ausgegangen, dass Du den tatsächlichen Inhalt der csv Tabelle angegeben hast und nicht, dass was Dir von Deinem Tabellenkalkulationsprogramm angezeigt wird. Wenn Du eine csv Tabelle abspeicherst, kannst Du vorgeben/einstellen, was als Spaltentrenner verwendet wird.

Überprüfe also, was bei Dir als Spaltentrenner genutzt wird. Dazu kannst Du auch einfach die csv Datei in einem beliebigen Texteditor öffnen und einfach nachschauen, was dort zwischen den Spalten steht.

Deine Fehlermeldung lässt vermuten, dass Du das Semikolon als Trenner verwendest. In dem Fall brauchst Du
\addplot table[col sep=semicolon] {omega.csv};

MoritzFranke

Beitrag von MoritzFranke »

korrekt, das Semikolon wird im texteditor als Trennzeichen genutzt, dort sieht das Ganze so aus:

1;0.002627205
2;0.0018133055
3;0.0013149582
4;0.0009552413
5;0.00072193089

Ich glaube er kommt aber nicht mit der Anzahl der Nachkommastellen klar?

Es kommt wieder eine Fehlermeldung: Package PGF Math Error: Could not parse input '851,23' as a floating point number, sorry. The unreadable part was near the decimal separator ',23'. Do you need the option 'read comma as period'?

DADABBI

Beitrag von DADABBI »

Das klingt so, als wären manche Zahlen mit Dezimalkomma, statt mit Dezimalpunkt angegeben. Theoretisch könnte es auch ein Komma als Tausendertrennzeichen sein, aber das passt nicht zu 851,23, sondern würde eher zu 85,123 passen. Wie die Zahlen tatsächlich in der CSV-Datei stehen, ist schon wichtig.

MoritzFranke

Beitrag von MoritzFranke »

Tatsache, da stimmt was nicht!

MoritzFranke

Beitrag von MoritzFranke »

Habt Ihr eine Idee, wie ich das lösen kann:

ich erhalte aus meinen Daten eine File, die, wenn ich sie mit WordPad öffne so aussieht:

1 0.002627205
2 0.0018133055
3 0.0013149582
...
491 0.00010005443
492 9.9882534e-05
493 9.9711445e-05


Importiere ich die Datei in Excel habe ich das Problem, dass sie ab einer bestimmten Dezimalzahl umschlägt zu:

Jeweils in Spalte 1 und Spalte 2 stehen:

1 0.002627205
2 0.0018133055
3 0.0013149582
4 0.0009552413
...
491 0.00010005443
492 998,83

Bei 492 schluckt mir Excel hinten die e-05
Normal müsste da stehen wie oben: 9.9882534e-05

Zudem setzt es dann ein Komma

Hat jemand eine Idee wie ich das einfach lösen kann?

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

Beitrag von esdd »

Ich habe kein Excel, aber warum verwendest Du nicht einfach die originale csv Datei? Ansonsten wirst Du wohl in den Menüs suchen müssen, wo Du das seltsame Verhalten abstellen kannst.

Antworten