Ich arbeite mit statistischen Daten zu verschiedenen Themen, wie beispielsweise diese Daten. Diese möchte ich downloaden und gerne in meinem Dokument verwenden. Die Datensätze lassen sich u.a. in *.xls oder *.csv herunterladen. Wie kann ich diese mehr oder weniger unverändert in LaTeX umwandeln? Bislang habe ich die Daten als Graphik exportiert und eingebunden. Allerdings sieht das m. E. nicht so gut aus. Hat hierzu jmd. eine Idee oder Vorlage?

Dank @Henri s Lösungvorschlag habe ich eine Lösung für einen Datensatz. Ich habe anhand dem Code versucht dies auf einen anderen zu übertragen und den Workflow, auch mit sed, durchgeführt. Hab aber anscheinend die Funktionsweise von pgfplots nicht durchdrungen. Für mich ist das alles recht hartes Brot. Den Datensatz habe ich wie als CSV (,) heruntergeladen, mit

Open in Online-Editor
tischa@tischa:~$ sed -i 's/"//g; s/%//g; 195d' /home/tischa/Arbeitsflaeche/inflation.csv

bearbeitet und versucht den Code anzupassen. Jetzt als Minimalbeispiel, allerdings mit Fehler.

Open in Online-Editor
\documentclass[tikz]{standalone}
\usepackage{pgfplots,filecontents}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.13}
\begin{filecontents}{infla.csv}
Month,CPI,Central bank of Iceland inflation target
2000-01-1,5.8,2.5
2015-12-1,2.0,2.5
\end{filecontents}

\begin{document}
\sffamily
\begin{tikzpicture}
\sffamily
  \begin{axis}[
 date ZERO=2000-01-01,
    date coordinates in=x,
    no marks,
    width=12cm,height=6cm,
    enlargelimits=false,
    xticklabel={\year},
    xtick={2000-01,2001-1,2002-1,2003-1,2004-1,2005-1,2006-1,2007-1,2008-1,2009-1,2010-1,2011-1,2012-1,2013-1,2014-1,2015-1},
    xtick pos=left,
    xtick align=outside,
    ymin=0,ymax=20,
    ytick={0,4,...,20},
    yticklabel={\pgfmathprintnumber[verbatim]{\tick}\%},
    ytick style={draw=none},
    yticklabel pos=right,
    ymajorgrids=true,
    legend style={
      draw=none,
      legend cell align=left,
      at={(1.12,1.05)},
      anchor=north west,
      legend image code/.code={
        \filldraw[##1] (-.5ex,-.5ex) rectangle (1ex,1ex);
      }
    }
    ]
    \addplot table[col sep=comma,x=Year,y={Central bank of Iceland inflation target}] {infla.csv};
    \addlegendentry{Central bank of Iceland inflation target};
    \addplot table[col sep=comma,x=Year,y={CPI}] {infla.csv};
    \addlegendentry{CPI};
  \end{axis}
\end{tikzpicture}
\end{document}

Als Fehler erhalte ich

Open in Online-Editor
Package pgfplots Warning: running in backwards compatibility mode (unsuitable t
ick labels; missing features). Consider writing \pgfplotsset{compat=1.13} into 
your preamble.
 on input line 4.

)
Runaway argument?
01+/{\c@pgf@counta }\edef \pgfmathresult {\the \c@pgf@counta }\pgfmath@smuggleo
ne \ETC.

gefragt 10 Jan, 13:43

Tischa's gravatar image

Tischa
90021247
Akzeptiert: 70%

bearbeitet 06 Feb, 11:24

datatool oder pgfplots je nachdem, was mit den Daten passieren soll. Beide können jedenfalls CSV-Dateien verarbeiten. Wir haben hier auch schon zu beiden Beispiele. Siehe die entsprechenden Themen.

(10 Jan, 14:18) saputello

Mit meinen bisherigen Kenntnissen, wird das eine ausuferende Beschäftigung. Ich kannte bislang noch nicht mal den Begriff "plot". Danke aber für den Ansatz/Hinweis.

(10 Jan, 14:31) Tischa
(11 Jan, 06:08) Johannes

date ZERO muss AFAIK ein für pgf gültiges Datum sein.

(12 Jan, 15:36) saputello

D.h.? Ich muß den Datensatz mit sed umändern, ähnlich wie in dem anderen Beispiel im Format "2010-01-01"?

(13 Jan, 09:25) Tischa

Zu Option date ZERO siehe die pgfplots-Anleitung, derzeit Abschnitt 4.21.2. Du hast oben als Wert 2001-01 angegeben. Sorry, aber da Dein Beispiel kein vollständiges Minimalbeispiel ist, funktioniert es in Overleaf nicht und ich bin mit dem Smartphone unterwegs. Da ist schon dieser Kommentar ein Qual und das Lesen der Anleitung online.

(13 Jan, 11:42) saputello

Leider bin ich nicht schlauer geworden. Hab die Datensätze sogar händisch an das vorherige Beispiel angepasst. Aber leider läuft es nicht.

(16 Jan, 12:33) Tischa

Jmd. ne Idee?

(23 Jan, 05:14) Tischa

Hast Du denn mal ausprobiert, in Deinem Beispiel oben date ZERO=2000-01 durch date ZERO=2000-01-01 zu ersetzen?

Ich habe ehrlich gesagt keine Lust, mir immer erst die CSV-Datei umständlich von irgend einem Server zu besorgen und nachzubearbeiten, bevor ich irgend etwas testen kann. Ich weiß dann ja auch nicht, ob Du wirklich genau dieselbe Nachbearbeitung wie ich durchgeführt hast. Wie wäre es, wenn Du einen minimalisierten Datensatz in Dein Beispiel einfügst?

(23 Jan, 09:22) saputello

Wie kann ich den Datensatz hier einpflegen, die *.csv-Datei hochladen?

(23 Jan, 11:28) Tischa

Datumsangaben bestehen in pgfplots AFAIK aus Jahr-Monat-Tag, nicht nur aus Jahr-Monat. Wie schon mehrfach erwähnt gilt das auch für Option date ZERO.

Und genau genommen ist das jetzt eine ganz neue Frage mit einem ganz anderen Problem als ursprünglich.

(05 Feb, 07:17) saputello

Die Warnung besagt hingegen, dass Du nicht angegeben hast, welche Kompatibilitätsstufe verwendet werden soll. In der Warnung steht auch, was Du in die Dokumentpräambel einfügen sollst, damit die Warnung verschwindet: \pgfplotsset{compat=1.13}. Siehe dazu auch die pgfplots-Anleitung.

(05 Feb, 07:20) saputello

@saputello. Leider hab ich es damit noch nicht hinbekommen.

(06 Feb, 08:43) Tischa

@Tischa: Was hast Du womit nicht hinbekommen? Muss man Dir eigentlich alle Infos immer wie Würmer aus der Nase ziehen? Vielleicht kannst Du Dich irgendwann einmal darauf einstellen, dass wir Dir nicht bei der Arbeit über die Schulter schauen, sondern ganz und gar auf die Infos angewiesen sind, die Du uns lieferst. Ich würde übrigens wieder einmal vermuten, dass Du in einem klassischen Diskussionsforum besser aufgehoben wärst. Die ewig langen Kommentarstränge und immer wieder geänderten Fragen bei Dir sind für mich jedenfalls ein starkes Indiz dafür.

(06 Feb, 10:04) saputello

pgfplotsset{compat=1.13} eingefügt, wie Du in Deinem vorherigen Kommentar angemerkt hast. Einen minimalen Datensatz habe ich auch eingefügt.

(06 Feb, 11:06) Tischa

Was ist denn danach passiert, @Tischa? Ging die Klappe des CD-ROM Laufwerks auf? Oder spielten keine Videos mehr? Oder roch es plötzlich komisch? Stell dir vor wir wären Automechaniker, so einem sagst du auch nicht: "Ging nicht, geht nicht wie soll." Ich mein, der freut sich, der hat plötzlich Dollarzeichen im Auge, genau wie im Comic ... aber hier wird keiner bezahlt.

(06 Feb, 11:20) Johannes

Yoah. Ist angekommen... Also, ich hab soweit die Anmerkungen eingepflegt. Allerdings ist das Beispiel nicht lauffähig.

(06 Feb, 11:25) Tischa

Bekommst Du wirklich noch die Warnung:

Package pgfplots Warning: running in backwards compatibility mode (unsuitable t
ick labels; missing features). Consider writing \pgfplotsset{compat=1.13} into 
your preamble.
 on input line 4.
Bei mir gibt es die nicht mehr. Die Fehler wegen der falschen Datumsangaben bleibt natürlich. Schließlich hast Du noch immer bei xticks jede Menge davon.

(06 Feb, 12:19) saputello
Ergebnis 5 von 18 Alle anzeigen

Ich habe mir die Daten als CSV (,) heruntergeladen und mit dem GNU/Linux-Tool sed folgende Ersetzungen ausgeführt:

sed -i 's/"//g; s/%//g; 2003,2005d' cbis-interest-rates.csv

  • s/"//g = Ersetze alle " durch nichts.
  • s/%//g = Ersetze alle % durch nichts.
  • 2003,2005d = Lösche die Zeilen 2003–2005 (nicht Jahre, sondern Zeilen in der Datei).

Der Hintergrund ist, dass pgfplots den Text in Anführungszeichen nicht parsen kann. Außerdem wird die Datei mit normalen catcodes gelesen, d.h. % macht einen Kommentar bis zum Ende der Zeile. Am Ende der Datei stand noch der Titel “CBI's interest rates”, den kann man natürlich auch nicht plotten.

Nach diesen Ersetzungen war es ein leichtes mit der Bibliothek dateplot die x-Koordinaten als Datum einzulesen und ansprechend zu formatieren. Mit col sep=comma wird der Spaltentrenner gesetzt und x=… und y=… wählen die zu plottende Spalte aus.

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    date coordinates in=x,
    no marks,
    xlabel=Date,
    xticklabel={\year},
    xtick={2008-01-01,2010-01-01,2012-01-01,2014-01-01,2016-01-01},
    ylabel={Rate [\%]},
    ]
    \addplot table[col sep=comma,x=Date,y={Overnight CBI rates}] {cbis-interest-rates.csv};
    \addlegendentry{Overnight CBI rates};
    \addplot table[col sep=comma,x=Date,y={CBI current account rates}] {cbis-interest-rates.csv};
    \addlegendentry{CBI current account rates};
  \end{axis}
\end{tikzpicture}
\end{document}

alt text


Mit ein wenig Spielerei:

Open in Online-Editor
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\begin{document}
\sffamily
\begin{tikzpicture}
  \begin{axis}[
    date coordinates in=x,
    no marks,
    width=12cm,height=6cm,
    enlargelimits=false,
    xticklabel={\year},
    xtick={2009-01-01,2010-01-01,2011-01-01,2012-01-01,2013-01-01,2014-01-01,2015-01-01,2016-01-01},
    xtick pos=left,
    xtick align=outside,
    ymin=0,ymax=28,
    ytick={0,4,...,28},
    yticklabel={\pgfmathprintnumber[verbatim]{\tick}\%},
    ytick style={draw=none},
    yticklabel pos=right,
    ymajorgrids=true,
    legend style={
      draw=none,
      legend cell align=left,
      at={(1.12,1.05)},
      anchor=north west,
      legend image code/.code={
        \filldraw[##1] (-.5ex,-.5ex) rectangle (1ex,1ex);
      }
    }
    ]
    \addplot table[col sep=comma,x=Date,y={Overnight CBI rates}] {cbis-interest-rates.csv};
    \addlegendentry{Overnight CBI rates};
    \addplot table[col sep=comma,x=Date,y={CBI current account rates}] {cbis-interest-rates.csv};
    \addlegendentry{CBI current account rates};
  \end{axis}
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 10 Jan, 17:15

Henri's gravatar image

Henri
8.1k21528

bearbeitet 10 Jan, 17:57

Vielen Dank für die Vorlage. Wenn ich den Code in meine Date einpflege, erhalte ich folgende Fehlermeldung.

`! Undefined control sequence. pgfplots@loc@TMPc ...pgfplots@calender@ZEROSHIFT relax ifx pgfplotstempt... l.144 ]

! Package pgfplots Error: Sorry, could not retrieve column 'Overnight CBI rates ' from table '\pgfplotstableread@filename@@table@name '. Please check spelling (or introduce name aliases)..

l.145 ...ight CBI rates}] {cbisinterestrates.csv};`

(11 Jan, 10:42) Tischa

@Tischa Ich kann dir gerne die Fehlermeldung übersetzen. Die Spalte mit dem Titel “Overnight CBI rates” wurde offensichtlich nicht in der Datei cbisinterestrates.csv gefunden. Warum, kann ich ohne Beispiel nicht sagen.

(11 Jan, 11:07) Henri

Hm. Ich hab die Datei auch im CSV (,) heruntergeladen. Dann im Terminal sed -i 's/"//g; s/%//g; 2003,2005d' /home/tischa/Arbeitsflaeche/cbis-interest-rates.csv durchgeführt und in einer Testdatei Deinen Code eins zu eins kopiert und kompiliert und erhalte dann die Fehlermeldung. ! Undefined control sequence. pgfplots@loc@TMPc ...pgfplots@calender@ZEROSHIFT relax ifx pgfplotstempt... l.31 ] und

(11 Jan, 12:44) Tischa

PGFPlots: reading {cbis-interest-rates.csv} Package pgfplots info on input line 32: dateplot: setting 'date ZERO={2008-01-0 7}' for this axis. Missing character: There is no ; in font nullfont! PGFPlots: reading {cbis-interest-rates.csv} Missing character: There is no ; in font nullfont! ! Dimension too large. relax l.36 end{axis}

(11 Jan, 12:44) Tischa

@Tischa Hast du an meinem Code wirklich absolut nichts verändert? Wenn das der Fall ist musst du eventuell ein Update von TeXlive machen.

(11 Jan, 12:58) Henri

@Nein. Zuerst hatte ich es in meinem eigentlichen Dokument eingepflegt und dann nur den Dateinamen der .csv geändert (natürlich mit demselben Dateinnamen im Code und die Datei selbst). Als das nicht funktioniert hat, hab ich ne Testdatei mit Deinem Code und eine Datei mit genau demselben Namen wie Deinem Code angelegt, und das einzige was ich problemlos kann. c+p. Der Inhalt der .csv beginnt. Date,Overnight CBI rates,CBI current account rates 2008-01-07,15.25,13.25 2008-01-08,15.25,13.25

(11 Jan, 13:12) Tischa

tischa@tischa:~$ tex --version TeX 3.14159265 (TeX Live 2015) tischa@tischa:~$ sudo /opt/texbin/tlmgr update --alltlmgr: package repository http://ftp.snt.utwente.nl/pub/software/tex/systems/texlive/tlnet tlmgr: saving backups to /usr/local/texlive/2015/tlpkg/backups tlmgr: no updates available

(11 Jan, 13:12) Tischa

@Tischa: Hast Du beachtet, dass die Originaldaten zunächst (mit sed) vorverarbeitet werden müssen, wie von Henri erklärt?

(11 Jan, 13:49) saputello

@saputello. Ja. Ich denke schon, dass ich das richtig gemacht habe. Im Terminal mit tischa@tischa:~$ sed -i 's/"//g; s/%//g; 2003,2005d' /home/tischa/Arbeitsflaeche/cbis-interest-rates.csv

der die Grundstruktur der *.csv Datei wie oben aufgeführt geändert hat.

(11 Jan, 13:58) Tischa

@Tischa: Leider habe ich die cvs-Datei, die heute Nacht noch problemlos heruntergeladen werden konnte, wieder gelöscht und jetzt funktioniert die Seite bei mir nicht mehr: Ich kann zwar noch Daten auswählen, bekomme sie aber weder angezeigt, noch kann ich sie runterladen.

(11 Jan, 14:21) saputello

@saputello. Ich hatte ne Short-Url angelegt. http://data.is/1K7a7b0. Sollte funktionierten. Oder der vollständige Link. http://sedlabanki.datamarket.com/en/data/set/231e/cbis-interest-rates#!ds=231e!2epz=4.6&display=line&s=apn&f=rolling:2 Bei mir funktioniert sie noch.

(11 Jan, 14:55) Tischa

@Tischa: Ja, ich weiß, dass du eine Short-URL angegeben hattest. Aber gerade hat der Download nicht funktioniert. Egal: Füg mal bei axis die Option date ZERO=2009-01-01, mit ein, also bsp. \begin{axis}[date ZERO=2009-01-01,.

(11 Jan, 16:40) saputello

@saputello. Super, es funktioniert.:-D Vielen Dank. Nur noch ein Detail. Die Label ragen in meinem Hauptdokument in den Rand hinnein. Wie kann ich einen Zeilenumbruch bei den Label "CBI current account rates" setzen? Der Plot beginnt mit dem Jahr 2009. Ich hab xtick={2008-01-01,2009-01-01,---}, um mit dem Jahr 2008 beim Nullpunkt der x-Achse zu beginnen. Hat leider nicht funktioneirt.

(11 Jan, 17:13) Tischa

@Tischa: Der Nullpunkt wird durch date ZERO bestimmt.

(11 Jan, 17:55) saputello

@saputello: Muss ich dann date ZERO=2008-01-01 setzen? Das funktioniert leider nicht.

(12 Jan, 10:09) Tischa
Ergebnis 5 von 15 Alle anzeigen

pgfplots erwartet als Datumsformat immer ein ISO-Datum der Form: Jahr-Monat-Tag, wobei das Jahr einschließlich dem Jahrhundert anzugeben ist. Monat und Tag können für Werte < 10 wahlweise mit oder ohne führende Null angegeben werden. Trotz mehrfacher entsprechender Kommentare verwendest Du leider noch immer teilweise Datumsangaben ohne Tag. Das funktioniert so nicht!

Darüber hinaus muss natürlich der Spaltenname auch im Datensatz zu finden sein. Wenn Du im Datensatz die erste Spalte mit Month bezeichnet hast, kannst Du beim Zugriff auf diese Spalte nicht einfach den Namen Year verwenden. Korrigiert man beide Fehler, dann funktioniert es auch:

Open in Online-Editor
\documentclass[tikz]{standalone}
\usepackage{pgfplots,filecontents}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=newest}% statt 1.13, wegen des Online-Editors
\begin{filecontents}{infla.csv}
Month,CPI,Central bank of Iceland inflation target
2000-01-1,5.8,2.5
2015-12-1,2.0,2.5
\end{filecontents}

\begin{document}
\sffamily
\begin{tikzpicture}
\sffamily
  \begin{axis}[
 date ZERO=2000-01-01,
    date coordinates in=x,
    no marks,
    width=12cm,height=6cm,
    enlargelimits=false,
    xticklabel={\tiny\year},% Schrift willkürlich verkleinert, damit es irgendwie passt!
    xtick={2000-1-1,2001-01-01,2002-01-01,2003-01-01,2004-01-01,2005-01-01,2006-01-01,2007-01-01,2008-01-01,2009-01-01,2010-01-01,2011-01-01,2012-01-01,2013-01-01,2014-01-01,2015-01-01},% Datumformat korrigiert!
    xtick pos=left,
    xtick align=outside,
    ymin=0,ymax=20,
    ytick={0,4,...,20},
    yticklabel={\pgfmathprintnumber[verbatim]{\tick}\%},
    ytick style={draw=none},
    yticklabel pos=right,
    ymajorgrids=true,
    legend style={
      draw=none,
      legend cell align=left,
      at={(1.12,1.05)},
      anchor=north west,
      legend image code/.code={
        \filldraw[##1] (-.5ex,-.5ex) rectangle (1ex,1ex);
      }
    }
    ]
    \addplot table[col sep=comma,x=Month,% Year gibt es im Datensatz nicht!
      y={Central bank of Iceland inflation target}] {infla.csv};
    \addlegendentry{Central bank of Iceland inflation target};
    \addplot table[col sep=comma,x=Month,% Year gibt es im Datensatz nicht!
      y={CPI}] {infla.csv};
    \addlegendentry{CPI};
  \end{axis}
\end{tikzpicture}
\end{document}

alt text

Die Einstellung compat=1.13 habe ich nur wegen des Online-Editors durch compat=newest ersetzt. Die TeX-Installation von Overleaf hat nämlich bisher nur ein pdfplots 1.12 und meldet dann bei compat=1.13 natürlich einen Fehler. Mit compat=newest wird im Online-Editor automatisch 1.12 verwendet und bei Dir zuhause 1.13 (oder was immer dort aktuell ist). Die Warnung aus Deiner Frage dürfte es weder mit dem von Dir verwendeten compat=1.13 geben noch mit compat=newest. Wenn es die bei Dir gibt, dann ist bei Deiner TeX-Installation etwas sehr, sehr merkwürdig. Eigentlich deutet das darauf hin, dass gar nicht das angegebene Beispiel verarbeitet wurde.

Ich finde es übrigens sehr schade, dass Du Deine neue Frage einfach in die alte hineingemischt hast, so dass @Henris ausgezeichnete Antwort als Antwort nicht mehr ausreichte. Stattdessen wäre eine wirklich neue Frage für dieses neue Problem sinnvoll gewesen.

Permanenter link

beantwortet 06 Feb, 12:29

saputello's gravatar image

saputello
16.3k22050

bearbeitet 06 Feb, 12:38

Genial. Super. Vielen Dank!!! Nachdem ich meinen gewerkelten und verputschten Code rausgenommen und mit Deinem ersetzt habe, funktioniert es. Ich wage mich gleich mal an die nächste Abbildung in guter Hoffnung, dass ich es jetzt alleine auf die Reihe bekomme. Deine Anmerkungen werde ich mir zu Herzen nehmen. Danke nochmal.

(06 Feb, 13:34) Tischa
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×18
×8
×2

Frage gestellt: 10 Jan, 13:43

Frage wurde angeschaut: 1,050 Mal

Zuletzt aktualisiert: 05 Mär, 07:43