Einfacher Scatterplot mit pgfplots

Tabellen und Grafiken erstellen und anordnen


Thomas_Leibundgut
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 16. Dez 2015, 14:39

Einfacher Scatterplot mit pgfplots

Beitrag von Thomas_Leibundgut »

Guten Abend

Ich schreibe eine Master-Arbeit über historische Demographie, und habe einige Zensuszahlen aus der römischen Republik, die ich gerne graphisch darstellen möchte.

Ich habe jeweils ein Doppeljahr (z.B. 204/3 v. Chr.) und eine korrespondierene Zahl (z.B. 137'108), die ich in LaTeX gerne ähnlich wie in der angehängten Datei (in Excel erstellt) darstellen möchte.

Am liebsten hätte ich eine x-Achse, auf der für jeden Punkt das korrespondierende Jahr eingezeichnet ist, auf der y-Achse 100'000er-Schritte, sowie die Punkte unverbunden in schwarz, gemeinsam mit einer linearen Trendlinie. Wenn die Formatierung "-204/3" unmöglich ist, so wäre auch "-204" für mich möglich, genau wie eine x-Achsen-Beschriftung in 25-Jahr-Intervallen; die Trendlinie muss auch nicht unbedingt sein.

Die Zahlenpaare im Anhang (in einer als CSV gespeicherten Kopie) möchte ich gerne darstellen. Ich habe es folgendermassen probiert:
\documentclass{article}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
		\begin{axis}[
			title={Zensuszahlen},
			xlabel={Jahr},
			ylabel={Zensus},
			]
			\addplot table[x=Jahr, y=Zensus] {test2.csv};
		\end{axis}
\end{tikzpicture}

\end{document}
Leider kriege ich eine ganze Reihe Fehlermeldungen, mit denen ich ehrlich gesagt nichts anfangen kann:

Package pgfplots Error: Sorry, could not retrieve column 'Jahr' from table '\name aliases).. ...dplot table[x=Jahr, y=Zensus] {Test2.csv};

Package PGF Math Error: Could not parse input '-234;270713' as a floating point number, sorry. The unreadable part was near ';270713'.. \addplot table {Test2.csv};

Package pgfplots Error: Sorry, the requested column number '1' in table 'Test2.csv' does not exist!? Please verify you used the correct index 0 <= i < N.. \addplot table {Test2.csv};

Da die Dokumentation von pgfplots sehr ausführlich ist, und eine enorme Anzahl von (Spezial)Fällen behandelt, die ich weder versehe noch dem hier gewünschten Niveau angemessen erscheinen, dachte ich mir, ich stelle die Frage hier.

Ich würde mich über eine simple Antwort und evtl. ein Beispiel freuen.

Vielen Dank, und einen schönen Abend!
Lg, Thomas
Dateianhänge
Zensuszahlen.pdf
(22.32 KiB) 234-mal heruntergeladen
Daten.xls
(25 KiB) 241-mal heruntergeladen

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2466
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Der BBCode dürfte in Deinem Beitrag abgeschaltet sein, weil Dein Beispiel trotz Markierung nicht farblich hervorgehoben wird.

Nutze für die Daten in Deiner xls-Datei besser die Umgebung, welche Du in meinem Beispiel siehst. Damit haben mögliche Helfer einen einfacheren Zugang.

Soll der Text, der title zugewiesen wird, die einzige Beschriftung der Abbildung sein, oder gibt es in Deiner Arbeit noch einen zur Grafik gehörenden caption-Aufruf?

Der folgende Quelltext ist lediglich eine Annäherung an das Bild in der pdf-Datei.
\begin{filecontents}{test2.csv}
Jahr Zensus
-234 270713
-209 137108
-204 214000
-194 143704
-189 258318
-179 258794
-174 269015
-169 312805
-164 337022
-159 328316
-154 324000
-147 322000
-142 327442
-136 317933
-131 318823
-125 394736
-115 394336
-86 463000
-70 910000
\end{filecontents}

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{
	compat=1.12, % nur für Overleaf, sonst bitte 1.13
	/pgf/number format/.cd,
		fixed,
		set thousands separator = \thinspace, % Änderung des Tausendertrennzeichens
		min exponent for 1000 sep=4 % nicht bei vierstelligen Zahlen
}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
	title={Zensuszahlen 234--70 BC},
	xlabel={Jahr},
	ylabel={Zensus},
	scatter,
	only marks,
	ymajorgrids,
	ymin=0,
	ymax=1000000,
	xmin=-250,
	xmax=-50,
	scaled y ticks = false
]

\addplot table[x=Jahr, y=Zensus] {test2.csv};
\end{axis}
\end{tikzpicture}

\end{document}

Thomas_Leibundgut
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 16. Dez 2015, 14:39

Beitrag von Thomas_Leibundgut »

Lieber Bartman

Vielen Dank für deine rasche Antwort, und die schon einmal sehr tolle Annäherung! Damit kann ich sicher weiter arbeiten.

Hmm, eine Bildunterschrift wäre wohl auch noch elegant. Zur Not ginge es wohl auch ohne, aber wenn es nicht allzu viel Aufwand wäre, würde ich mich sehr über einen Hinweis bzw. eine Lösung freuen.

Wenn wir schon gerade dabei sind (nachdem ich es rund eine Stunde selbst probiert habe): Wäre es möglich,
a) die Graphik irgendwie so zu referenzieren, dass ich ein automatisches Graphenverzeichnis haben kann?
b) die Punkte alle schwarz darzustellen?
c) das Tausendertrennzeichen auf das normale Hochkomma zu ändern, das auch sonst bei 100'000 erscheint?

Vielen Dank für all deine Hilfe, und einen schönen Abend!
Lg, Thomas

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2466
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Beim Thema Hochkomma in der Zifferngruppierung gibt es offenbar länderabhängige Unterschiede.

Ich bin mir nicht sicher, ob im Beispiel alles richtig eingestellt ist, aber was anderes fiel mir gerade nicht ein.
\begin{filecontents}{test2.csv}
Jahr Zensus
-234 270713
-209 137108
-204 214000
-194 143704
-189 258318
-179 258794
-174 269015
-169 312805
-164 337022
-159 328316
-154 324000
-147 322000
-142 327442
-136 317933
-131 318823
-125 394736
-115 394336
-86 463000
-70 910000
\end{filecontents}

\documentclass[ngerman]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{babel}
\usepackage{pgfplots}
\usepackage{cleveref} % für benannte Querverweise
\usepackage{showframe} % nur für die Seitenränder

\pgfplotsset{
   compat=1.12, % nur für Overleaf, sonst bitte 1.13
   /pgf/number format/.cd,
      fixed,
      set thousands separator = $'$, % Änderung des Tausendertrennzeichens
      min exponent for 1000 sep=4 % nicht bei vierstelligen Zahlen
}

\begin{document}

\listoffigures

\chapter{Ein Kapitel}

\begin{figure}[htbp]
\centering
\begin{tikzpicture}
\begin{axis}[
   width=13.5cm,
   height=8cm,
   xlabel={Jahr},
   ylabel={Zensus},
   scatter,
   scatter/use mapped color = {
      draw=black,
      fill=black
   },
   only marks,
   ymajorgrids,
   ymin=0,
   ymax=1000000,
   xtick={-250,-225,...,-50},
   xmin=-250,
   xmax=-50,
   scaled y ticks = false
]

\addplot table[x=Jahr, y=Zensus] {test2.csv};
\end{axis}
\end{tikzpicture}
\caption{Zensuszahlen 234--70 BC}
\label{fig:zensuszahlen}
\end{figure}

\Cref{fig:zensuszahlen}

\end{document}
Bild
Dateianhänge
Streudiagramm.png
Streudiagramm.png (29.16 KiB) 2375 mal betrachtet
Zuletzt geändert von Bartman am Fr 29. Apr 2016, 22:00, insgesamt 1-mal geändert.

Thomas_Leibundgut
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mi 16. Dez 2015, 14:39

Beitrag von Thomas_Leibundgut »

Lieber Bartman

Wow, vielen Dank für deine tolle Arbeit! So ziemlich genau so hatte ich mir das vorgestellt. Damit kann ich die bisher benötigten Abbildungen gut machen, und kann wohl auch ähnliche weitere erstellen.

Danke nochmals für deine super Unterstützung, und eine gute Zeit.
Lg, Thomas

Antworten