Farbe der Fehlerbalken (je Messwert) ändern

Tabellen und Grafiken erstellen und anordnen


die_nase
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 50
Registriert: So 3. Mai 2015, 21:05

Farbe der Fehlerbalken (je Messwert) ändern

Beitrag von die_nase »

Hallo zusammen,

ich brauche noch einmal eure Hilfe: Ich habe einen Plot mit Messdaten und deren x- und y-Fehler(balken) erstellt. Jetzt möchte ich gerne die "Aussreißer" farbig von den übrigen Messdaten abheben. Das hat auch geklappt, wenn ich in den Ursprungsdaten einfach eine "Label"-Spalte hinzugefügt habe und mit scatter/classes unterschieden habe (siehe MB). Leider sind dann jeweils die Messpunkte in der entsprechenden Farbe, nicht jedoch die zugehörigen Fehlerbalken.

Hier wird ein ähnliches Problem beschrieben: error bar colors in scatter plot, allerdings habe ich es nicht hinbekommen, dass ich es auf mein Beispiel übertrage. Zudem lese ich die Fehler nicht aus der Quell-Datei aus, sondern lege sie direkt fest (also alle auf den gleichen Wert).

\documentclass[boarder=10mm]{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{width=15cm,compat=newest}
\usetikzlibrary{plotmarks}

% Zum testen: Quadratzahlen, label ist willkürlich
\begin{filecontents}{Daten.dat}
x	y	label
1	1	a
2	4	a
3	9	a
4	16	b
5	25	b
6	36	a
7	49	b
8	64	b
9	81	a
10	100	a
\end{filecontents}


\begin{document}
\pagestyle{empty}

\pgfplotsset{grid style={dotted,gray, thin}} 
\tikzstyle{every pin}=[fill=white,draw=black,font=\footnotesize] 

% Beginn TikZ
\begin{tikzpicture} 
	\begin{axis}[
		title=Titel,
  		xlabel={Messdaten $x$},
		ylabel={Messdaten $y$},
		legend pos=north west,
		scale only axis,
		grid=both,
		legend columns=2
			]

	\addplot[only marks, point meta=explicit symbolic, scatter,
		scatter/classes={ a={mark=square*,blue},	b={mark=triangle*,red}},
		blue, error bars/.cd, y dir=both,y fixed=3, x dir=both,x fixed=1] 
				table[meta=label] {Daten.dat};


	\legend{f(x), {../Daten.dat}};
	
	\end{axis}
\end{tikzpicture}

\end{document}
Dabei sollen quasi alle "normalen" Messpunkte Farbe_1 haben, alle Ausreißer die Farbe_2. Ich muss zugeben, dass es meistens nicht so viele Ausreißer gibt (bis jetzt zumindest), weshalb vielleicht auch eine Lösung funktionieren würde, bei der man händisch die Farben ändert. Und: Bekommt man es hin, dass der Legenden-Eintrag auch Farbe_1 hat?

Viele Grüße und Danke im Voraus!

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

Beitrag von esdd »

Wenn Du als label Zahlen statt Buchstaben verwenden kannst, dann ginge
\begin{filecontents*}{Daten.dat} 
 x   y   label 
 1   1    0
 2   4    0
 3   9    0
 4   16   1 
 5   25   1 
 6   36   0
 7   49   1 
 8   64   1 
 9   81   0
 10   100  0 
\end{filecontents*} 

\documentclass[border=10mm]{standalone} 
\usepackage{pgfplots} 
\pgfplotsset{width=15cm,compat=newest}
\colorlet{FarbeI}{blue}
\colorlet{FarbeII}{red}
\begin{document} 
\pgfplotsset{grid style={dotted,gray, thin}} 
%\tikzset{every pin/.style={fill=white,draw=black,font=\footnotesize}} 
\begin{tikzpicture} 
  \begin{axis}[ 
      title=Titel, 
      xlabel={Messdaten $x$}, 
      ylabel={Messdaten $y$}, 
      legend pos=north west, 
      scale only axis, 
      grid=both, 
      legend columns=2,
      legend style={nodes={text=FarbeI}}
    ] 
    %\addplot[FarbeI,forget plot]table{Daten.dat};% falls die Kurve auch gezeichnet werden soll
    \addplot[only marks,FarbeI, mark=square*,
      restrict expr to domain={\thisrow{label}}{0:0},
      error bars/.cd, y dir=both,y fixed=3, x dir=both,x fixed=1]table{Daten.dat};
    \addplot[only marks,FarbeII, mark=triangle*,
      restrict expr to domain={\thisrow{label}}{1:1},
      error bars/.cd, y dir=both,y fixed=3, x dir=both,x fixed=1]table{Daten.dat};
    \legend{f(x), {../Daten.dat}}; 
  \end{axis} 
\end{tikzpicture} 
\end{document} 
Das mit der Farbe des Legendeneintrags habe ich nicht so richtig verstanden, aber vielleicht ist es trotzdem das, was Du suchst.

Gruß
Elke

Bild
Dateianhänge
gl_ausreisser.png
gl_ausreisser.png (21.79 KiB) 1658 mal betrachtet

die_nase
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 50
Registriert: So 3. Mai 2015, 21:05

Beitrag von die_nase »

Ah, klasse. Vielen vielen Dank, das war genau das was ich suchte.

Deine Lösung ist super; so kann ich die "normalen" Messwerte und die "Ausreißer" in der Legende angeben.

Antworten