PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pgfplots: Säulendiagramm (Anfängerfragen)



ElGato
26-10-2012, 09:16
Liebes Forum,

Ziel vorerst ist die Erstellung eines Säulendiagramms mit Fehlerbalken nach oben – was bisher auch geklappt hat.

Aber einige Verbesserung wären ganz nett :-)

1. Daten
- Wie sollte ich die Daten am besten eingeben? Ist es sinnvoll "coordinates" anzugeben? oder besser "addplot table" wie im Manual auf Seite 28? (http://pgfplots.sourceforge.net/pgfplots.pdf)
Am liebsten wäre mir, wenn ich Daten aus Excel einfach über Copy & Paste eingeben kann, so dass ich nichts mehr anpassen muss.
In Excel sehen meine Daten so aus:

Gruppe E/P Standardabweichung
Sham 1,1 0,5

2. Fehlerbalken
Ich wusste nicht genau wie und habe den Fehler nach oben und nach unten angegeben, obwohl nur nach oben gebraucht wird. Wie kann ich den unteren Wert auslassen, dass es zu keinem LaTeX-Fehler kommt?

3. y-Achse
Wie erreicht man, dass keine Zwischenzahlen ausgelassen werden?

4. Serifenlose Schrift wäre ganz nett, aber das scheint wohl nur global möglich zu sein (Thread (http://www.mrunix.de/forums/showthread.php?t=73405))

Auch über Schönheitstipps freue ich mich!



\documentclass{scrbook}
\usepackage{xltxtra} % XeLaTeX
\usepackage{pgfplots}
\usepackage{tikz}

%\addplot table[x=dof,y=Lmax] {
%1 5
%2 3
%3 6
%4 4
%5 0
%6 1
%};


\begin{document}

\begin{tikzpicture}
\begin{axis}[
title = {EC/P},
ybar,
width=10cm,
ymin=0,
ymax=16.5,
bar width=20pt,
xtick={1,...,5},
xticklabels={%
Sham,
STZ,
MG,
MG+Ala,
MG+BSO}
]
\addplot[fill=black,draw=black,ybar,error bars/.cd,y dir=plus,y explicit]
coordinates
{
(1,10.6666666667) +- (0.5773502692,0.5773502692)
(2,10.6666666667) +- (4.1633319989,4.1633319989)
(3,8.6666666667) +- (2.0816659995,2.0816659995)
(4,8.33333333334) +- (3.0550504633,3.0550504633)
(5,9) +- (4.582575695,4.582575695)
};
\end{axis}
\end{tikzpicture}
\end{document}

ElGato
29-10-2012, 08:43
Mittlerweile bin ich weitergekommen ...

1. Die Daten aus Excel kopiere ich einfach in die tex-Datei.

2. Fehlerbalken gehen noch immer nicht (bin weiter daran).

3. bin weiter dran

4. lässt sich einstellen



\usepackage{pgfplots}
\pgfplotsset{every axis label/.append style={font=\sffamily\small},
every axis legend label/.append style={font=\sffamily\small},
every tick label/.append style={font=\sffamily\small},
every axis title/.append style={font=\sffamily\bfseries}}


Neues Problem: Die Säulen sind nicht mehr schwarz gefüllt mit schwarzem Rand :(

Der bisherige Code:


\documentclass{scrbook}
\usepackage{xltxtra} % XeLaTeX
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{tikz}


\begin{document}

\begin{filecontents}{data.dat}
Gruppe X-Position MW SD
Sham 1 8.15525 0.5773502692
STZ 2 12.15485 4.1633319989
MG 3 8.354654 2.0816659995
MG+Ala 4 8.5646546 3.0550504633
MG+BSO 5 9 4.582575695
\end{filecontents}

\begin{tikzpicture}
\begin{axis}[
ylabel=EC/P,
ybar,
width=10cm,
ymin=0,
ymax=16.5,
bar width=20pt,
xtick=data,
xticklabels from table={data.dat}{Gruppe}
]
\addplot table [
x=X-Position,
y=MW,
error bars/.cd=SD% ???
] {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}

hakaze
29-10-2012, 09:33
Die Fehlerbalken lassen sich wie folgt definieren:
- für table für die SD-SPalte als y error übergeben
- bei den Ploteinstellungen kommt dann "error bars/.cd, y dir=plus, y explicit" hinzu
- für alle Plots in einer Axis-Umgebung musst du "error bars/.cd, error bars/y dir=plus, error bars/y explicit" bei den Optionen für Axis angeben

Die schwarze Farbe habe ich auch nochmal explizit als Option für den Plot übergeben.


\documentclass{scrbook}
%\usepackage{xltxtra} % XeLaTeX
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{tikz}
%\pgfplotsset{compat=1.7}

\begin{document}

\begin{filecontents}{data.dat}
Gruppe X-Position MW SD
Sham 1 8.15525 0.5773502692
STZ 2 12.15485 4.1633319989
MG 3 8.354654 2.0816659995
MG+Ala 4 8.5646546 3.0550504633
MG+BSO 5 9 4.582575695
\end{filecontents}

\begin{tikzpicture}
\begin{axis}[
ylabel=EC/P,
ybar,
width=10cm,
ymin=0,
ymax=16.5,
bar width=20pt,
xtick=data,
xticklabels from table={data.dat}{Gruppe}
% alternativ für mehrere Plots mit Fehlerbalken
%, error bars/.cd, error bars/y dir=plus, error bars/y explicit
]
\addplot[draw=black, fill=black, error bars/.cd, y dir=plus, y explicit] table [
x=X-Position,
y=MW,
y error=SD
] {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}

ElGato
29-10-2012, 11:08
Läuft perfekt :)

Nesrin
04-09-2013, 13:11
Hallihallo! Ich habe zwei Fragen zu obigem Beispiel. Wäre nett, wenn mir da jemand weiterhelfen könnte! :)

1) Gibt es Einschränkungen für das Benennen der dat-Datei?

\begin{filecontents}{data.dat}

Bei mir funktioniert ein anderer Name bislang nicht, auch wenn ich

xtick=data,
xticklabels from table={data.dat}{Gruppe}

und

] {data.dat};
\end{axis}

angleiche.

2) Könnte mir jemand zeigen, wie man in das obige Beispiel zu jedem Balken jeweils noch eine zweiten Balken hinzufügt - mit anderen x-Werten, in anderer Farbe aber mit derselben Beschriftung?

LG, Nesrin

sudo
04-09-2013, 13:45
Bei xtick=data, darfst du glaube ich nichts anpassen. Für weitere Balken fügst du ein \addplot mit den entsprechenden Einstellungen hinzu.

Nesrin
04-09-2013, 15:57
Vielen Dank, sudo! Das läuft perfekt. :)

Nesrin
08-09-2013, 20:37
Ach, jetzt häng ich wieder an was. Gibt es eine Möglichkeit, eine waagrechte Linie in das Balkendiagramm zu zeichnen? Eine, die das Ende eines Balkens markiert und die anderen schneidet, damit Unterschiede deutlich werden?

Bis jetzt habe ich sowas hier ausprobiert (für Mac!):


\documentclass[a4paper,12pt]{article}
\usepackage[ngerman]{babel}
\usepackage[applemac]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pdfpages}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{filecontents}




\usepackage{color}
\usepackage{colortbl}
\definecolor{grauschwarz}{rgb}{0.45,0.45,0.45}
\definecolor{grau}{rgb}{0.6,0.6,0.6}
\definecolor{dunkelgrau}{rgb}{0.8,0.8,0.8}
\definecolor{hellgrau}{rgb}{0.95,0.95,0.95}





\begin{document}


\begin{figure}
\begin{center}
\begin{filecontents}{anzahl.dat}
Gruppe X-Position MW SD
A 1 4.7 1.5
B 2 5.4 1.8
C 3 5.6 2.4
D 4 7.1 1.2

\end{filecontents}

\begin{tikzpicture}
\begin{axis}[
title = {default},
ybar,
width=12cm,
ymin=0,
ymax=10,
bar width=20pt,
xtick=data,
xticklabels from table={anzahl.dat}{Gruppe},
]
\addplot[draw=black, fill=dunkelgrau,
error bars/.cd, y dir=both, y explicit] table [
x=X-Position,
y=MW,
y error=SD
] {anzahl.dat};
\addplot+[sharp plot] coordinates
{(0.75,4.7) (4.25,4.7)};
\end{axis}
\end{tikzpicture}
\caption{default}
\label{fig:anzahl}
\end{center}
\end{figure}


\end{document}

Aber, am schönsten fände ich es, wenn die Linie von Anfang bis Ende des Diagramms ginge, ohne dass sich etwas verschiebt. Gibt es einen bestimmten Grund warum sie rot ist? Kann man den Linienstil ändern (gestrichelt)?

Nesrin
08-09-2013, 20:43
Es wäre in dem Fall wohl auch besser, wenn das eher als Hilfslinie und nicht als neuer Plot angesehen würde. Dann würde sich der eigentliche Plot auch nicht durch die Linie verschieben....?

esdd
08-09-2013, 21:14
Dann lass doch an Stelle des zweiten Plots einfach eine gestrichelte Linie zeichnen, zum Beispiel mit:


\draw[dashed] (axis cs:0,4.7)--(axis cs:8,4.7);

Nesrin
09-09-2013, 00:35
Ja, das funktioniert. Ohje - so naheliegend... Danke! :)