Error-Bar Diagramm mit gruppierten x-ticks

Tabellen und Grafiken erstellen und anordnen


mypTx

Error-Bar Diagramm mit gruppierten x-ticks

Beitrag von mypTx »

Hallo,

bei meinem letzten Problem wurde mir hier wunderbar geholfen.
Nun wende ich mich erneut an auch, diesmal mit einem Problem im Bereich der Diagramme.

Im folgenden Minimalbeispiel sind zwei Varianten eines Error-Bar-Plots dargestellt.
Das erste Plot gibt die Werte in richtiger Reihenfolge (1,2,3...15) aus.
Das gewünschte Ergebnis ähnelt jedoch dem zweiten Plot.
Wobei hier die einzelnen Werte für "V1" alle auf einer "Linie" liegen, und diese aber wie im ersten Plot jeder auf einem eigenen xtick verteilt.

Also prinzipiell geht es um die x-Achsen Beschriftungen bzw. die Gruppierung von xticks über mehrere Werte.

Hoffe ihr versteht einigermaßen was ich meine.
Anhand einer Fotomontage habe ich das gewünschte Ergebnis einmal hingepfuscht.

Bild
\documentclass[a4paper,11pt]{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest,compat/show suggested version=false, width=\textwidth}

\usepackage{tikz}
\usetikzlibrary{positioning, patterns}

\usepackage{filecontents}

\begin{document}

\begin{filecontents}{daten.txt}
x bez y err label
1 V1 19.0 0.4 a
2 V1 24.5 0.0 b
3 V1 19.3 0.9 c
4 V2 53.3 2.1 a
5 V2 47.1 0.5 b
6 V2 18.1 0.3 c
7 V4 20.6 0.3 a
8 V4 19.5 0.4 b
9 V4 26.5 0.1 c
10 V5 23.6 0.4 a
11 V5 22.3 0.4 b
12 V5 35.4 1.2 c
13 T1 43.7 0.5 a
14 T1 15.8 0.0 b
15 T1 14.3 0.2 c
\end{filecontents}

\begin{center}
\begin{tikzpicture}
  \begin{axis}[
		axis x line=bottom,
		axis y line=left,
		enlargelimits=true,
		xmax=15,
		ymax=60,
		xtick={1,...,15},
		legend entries={$700$,$1000$,$1300$},
		]
		
    \addplot[scatter, only marks,
	  point meta=explicit symbolic,
	  scatter/classes={
		a={mark=x,blue},%
		b={mark=triangle,red},%
		c={mark=o,draw=black}},
		]
    plot[error bars/.cd, y dir=both, y explicit]
    table[meta=label,x=x, y=y, y error=err]{daten.txt};
      
  \end{axis}
\end{tikzpicture}
\end{center}

\begin{center}
\begin{tikzpicture}
  \begin{axis}[
		axis x line=bottom,
		axis y line=left,
		enlargelimits=true,
		xtick={data},
		symbolic x coords={V1,V2,V4,V5,T1},
		ymax=60,
		legend entries={$700$,$1000$,$1300$},
		]	
    \addplot[scatter, only marks,
	  point meta=explicit symbolic,
	  scatter/classes={
		a={mark=x,blue},%
		b={mark=triangle,red},%
		c={mark=o,draw=black}},
		]
    plot[error bars/.cd, y dir=both, y explicit]
    table[meta=label,x=bez, y=y, y error=err]{daten.txt};
      
  \end{axis}
\end{tikzpicture}
\end{center}
\end{document}
Vielen Dank schon mal.

Viele Grüße,
mypTx

mypTx

Bitte um Verschiebung

Beitrag von mypTx »

Sorry, habs im falschen Forum erstellt.

Bitte um Verschiebung des Threads nach "Tabellen und Grafiken"

Gruß,
mypTx

prankenandi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 60
Registriert: Di 8. Apr 2014, 13:59

Beitrag von prankenandi »

Hallo,

ist zwar vielleicht etwas unkonventionell gelöst, aber erfüllt den Zweck.

MfG
\documentclass[a4paper,11pt]{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest,compat/show suggested version=false, width=\textwidth}

\usepackage{tikz}
\usetikzlibrary{positioning, patterns}

\usepackage{filecontents}

\begin{document}

\begin{filecontents}{daten.txt}
x bez y err label
1 V1 19.0 0.4 a
2 V1 24.5 0.0 b
3 V1 19.3 0.9 c
4 V2 53.3 2.1 a
5 V2 47.1 0.5 b
6 V2 18.1 0.3 c
7 V4 20.6 0.3 a
8 V4 19.5 0.4 b
9 V4 26.5 0.1 c
10 V5 23.6 0.4 a
11 V5 22.3 0.4 b
12 V5 35.4 1.2 c
13 T1 43.7 0.5 a
14 T1 15.8 0.0 b
15 T1 14.3 0.2 c
\end{filecontents}

\begin{center}
\begin{tikzpicture}
  \begin{axis}[
      axis x line=bottom,
      axis y line=left,
      enlargelimits=true,
      xmax=15,
      xtick={1,...,15},
      legend entries={$700$,$1000$,$1300$},
      ymax=60,
      %ymin=10,
      xticklabels=none,
      xmajorticks=false,
      clip=false,
      ]
     
    \addplot[scatter, only marks,
     point meta=explicit symbolic,
     scatter/classes={
      a={mark=x,blue},%
      b={mark=triangle,red},%
      c={mark=o,draw=black}},
      ]
    plot[error bars/.cd, y dir=both, y explicit]
    table[meta=label,x=x, y=y, y error=err]{daten.txt};
 %
\node[anchor=north] at (axis cs:2,9.5){V1};
\node[anchor=north] at (axis cs:5,9.5){V2};
\node[anchor=north] at (axis cs:8,9.5){V4};
\node[anchor=north] at (axis cs:11,9.5){V5};
\node[anchor=north] at (axis cs:14,9.5){T1};
%
\draw[black] (axis cs:3.5,60) -- (axis cs:3.5,10);
\draw[black] (axis cs:6.5,60) -- (axis cs:6.5,10);
\draw[black] (axis cs:9.5,60) -- (axis cs:9.5,10);
\draw[black] (axis cs:12.5,60) -- (axis cs:12.5,10);
%
\end{axis}
\end{tikzpicture}
\end{center}
\end{document} 
Debian 7 (Wheezy) mit Texlive 2013 und Texmaker

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

Beitrag von esdd »

Hier ist noch ein alternativer Vorschlag:
\documentclass[a4paper,11pt]{article} 
\usepackage{pgfplots} 
\pgfplotsset{
  compat=1.11,compat/show suggested version=false,
  width=\textwidth}  

%\usepackage{filecontents} 
%\begin{filecontents}{daten.txt} 
 %x bez y err label 
 %1 V1 19.0 0.4 a 
 %2 V1 24.5 0.0 b 
 %3 V1 19.3 0.9 c 
 %4 V2 53.3 2.1 a 
 %5 V2 47.1 0.5 b 
 %6 V2 18.1 0.3 c 
 %7 V4 20.6 0.3 a 
 %8 V4 19.5 0.4 b 
 %9 V4 26.5 0.1 c 
 %10 V5 23.6 0.4 a 
 %11 V5 22.3 0.4 b 
 %12 V5 35.4 1.2 c 
 %13 T1 43.7 0.5 a 
 %14 T1 15.8 0.0 b 
 %15 T1 14.3 0.2 c 
%\end{filecontents} 

\begin{document} 
\begin{center} 
\begin{tikzpicture} 
   \begin{axis}[ 
       axis x line=bottom, 
       axis y line=left, 
       enlargelimits=true, 
       ymax=60, 
       xtick={2,5,...,98},
       xtick style={draw=none},
       xticklabels={V1,V2,V4,V5,T1},
       legend entries={$700$,$1000$,$1300$}, 
       ] 
       
     \addplot[scatter, only marks, 
      point meta=explicit symbolic, 
      scatter/classes={ 
       a={mark=x,blue},% 
       b={mark=triangle,red},% 
       c={mark=o,draw=black}},
       ] 
     plot[error bars/.cd, y dir=both, y explicit] 
     table[meta=label,x=x, y=y, y error=err]{daten.txt};
   \pgfplotsinvokeforeach{0,...,5}{
      \draw[help lines]({rel axis cs:0,0}-|3*#1+.5,0)--(0,50-|3*#1+.5,0);}
   \end{axis}
\end{tikzpicture} 
\end{center} 
\end{document} 
pgfplots lädt übrigens sowieso tikz.

Falls Du eine ältere Version von pgfplots verwendest müsste der Code für das Zeichnen der Hilfslinien so aussehen:
\draw[help lines]({rel axis cs:0,0}-|{axis cs:3*#1+.5,0})--({axis cs:0,50}-|{axis cs:3*#1+.5,0});}
Gruß
Elke

mypTx

Vielen Dank

Beitrag von mypTx »

Hi Elke,
Hi prankenandi,

ich bin immer wieder überrascht wie schnell man wirklich gute Antworten bekommt.

In meinen Augen seid ihr beide wirklich gute Zauberer :D

@Elke: Danke für den Hinweis mit dem tikz package load, bin leider kein versierter LaTeX Nutzer und finde immer wieder relikte von anderen "copy/paste" Lösungen in meinem Dokument. Doch zunehmend wird das Ganze sauberer und sauberer.

Vielen vielen Dank nochmals an euch beide.

Viele Grüße,
mypTx

mypTx

y-Achsen unteres Limit

Beitrag von mypTx »

Hallo nochmal,

ich wollte die y-Achse so formatieren, dass das untere Limit fix auf "0" ist und bei dieser auch die x-Achse beginnt.

wenn ich jetzt in den "axis" Optionen
%...
ymin=0,
%...
einfüge, verschiebt sich die x-Achse nach unten und beginnt bei Schätzungsweise -0.5. (Der Fehler beruft sich auf den Quellcode von "esdd/Elke")

Kann man das irgendwie unterdrücken?

Vielen Dank.

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

Beitrag von esdd »

Die Achsen werden standardmäßig in jede Richtung um 10% verlängert. Das kannst Du aber ändern:
ymin=0,ymax=60,
enlarge y limits={rel=0.1,upper},
Dann wird die y-Achse nur noch nach oben um 10% verlängert.

Gruß
Elke

mypTx

Beitrag von mypTx »

sehr sehr geil 8)

wie halt alles einfach direkt funktioniert.

Danke!

Antworten