PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Pgfplots Balkendiagram und symbolischen x coordinaten mit Unterstrichen



Harsesis
02-03-2015, 08:20
Hallo Zusammen,

ich habe ein Problem beim erstellen eines Balkendiagramms mit Pgfplots. Ich habe ein einfaches Balkendiagramm bei dem ich jedoch einen weiteren Node einfügen möchte für einen speziellen Balken. Das Problem jedoch ist, dass manche der Namen Unterstriche enthalten (welche geescaped wurden). Hier einfach mal ein mini Beispiel:



\documentclass[ a4paper]{scrbook}

\usepackage{pgfplots}
\pgfplotsset{compat=1.11}


\pgfplotstableread{
name value
dataset1 1.03861829357920759003
dataset2 1.89021547610307613244
dataset\_x1 1.03574989317761002706
dataset\_x2 1.20431768667062784709
}\datatable

\begin{document}
\begin{tikzpicture}
\begin{axis}[
major x tick style = transparent,
ybar,
symbolic x coords={dataset1, dataset2, dataset\_x1, dataset\_x2},
xtick = data,
xticklabel style={ inner sep=0pt, anchor=north east, rotate=45 },
scaled y ticks = false,
]
\addplot plot table[x=name, y=value] {\datatable};

\node[above] at (axis cs:dataset2, 1.5) {200};
%\node[above] at (axis cs:dataset\_x2, 1.5) {200};
\end{axis}
\end{tikzpicture}

\end{document}


In dem Beispiel wird ein Node auf einem Balken ohne Unterstrich eingefügt. Auskommentiert dann noch ein Node auf einem Balken mit Unterstrich im Namen. Dies führt zu der Fehlermeldung:


! Package pgfplots Error: Sorry, the input coordinate `dataset\protect \unhbox
\voidb@x \kern .06em\vbox {\hrule width.3em}x2' has not been defined with 'symb
olic x coords={dataset1, dataset2, dataset\_x1, dataset\_x2}... Maybe it has be
en misspelled? Or did you mean something like [normalized]dataset\protect \unhb
ox \voidb@x \kern .06em\vbox {\hrule width.3em}x2?.
See the pgfplots package documentation for explanation.

Es liegt offensichtlich irgendwie am escaping, ich bin jedoch überfragt wie ich das Problem lösen kann.

Vielen Dank im Voraus für jede Hilfe!

esdd
02-03-2015, 09:55
Du kannst das entweder mit


\node[above] at (axis cs:dataset\detokenize{\_}x2, 1.5) {200};

oder


\node[above] at (axis cs:{[normalized]3},1.5){200};

lösen. 3 ist dabei die Nummer der symbolischen Koordinate, wobei die Zählung bei 0 beginnt.

Gruß
Elke

Harsesis
02-03-2015, 12:54
Hallo Elke,

danke für die schnelle Antwort! Das hat super geklappt!

Ich habe noch eine kleine erweiternde Frage: ist es auch möglich als wert für den Node den Wert des Balkens abzufragen? Also das der Node den Wert des ausgewählten Balkens darstellt?

Grüße

esdd
02-03-2015, 23:37
Falls Du alle beschriften möchtest, ginge das einfach mit der Option nodes near coords.


\documentclass[ a4paper]{scrbook}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}


\pgfplotstableread{
name value
dataset1 1.03861829357920759003
dataset2 1.89021547610307613244
dataset\_x1 1.03574989317761002706
dataset\_x2 1.20431768667062784709
}\datatable

\begin{document}
\begin{tikzpicture}
\begin{axis}[
major x tick style = transparent,
ybar,
symbolic x coords={dataset1, dataset2, dataset\_x1, dataset\_x2},
xtick = data,
xticklabel style={ inner sep=0pt, anchor=north east, rotate=45 },
scaled y ticks = false,
nodes near coords
]
\addplot plot table[x=name, y=value] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}

Gruß
Elke

Harsesis
03-03-2015, 08:27
Hallo,

mir geht es um die Beschriftung von genau einem Balken. Das darüber legen eines Nodes klappt ja jetzt super, optimal wäre jetzt noch das dieser eine Knoten als Text den Wert des Balken hätte.

Grüße

esdd
03-03-2015, 09:00
Dann mache vorher einen Plot mit der Option forget plot, bei dem lediglich die Beschriftung dieses einen Balkens ausgegeben wird.


\documentclass[ a4paper]{scrbook}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\pgfplotstableread{
name value
dataset1 1.03861829357920759003
dataset2 1.89021547610307613244
dataset\_x1 1.03574989317761002706
dataset\_x2 1.20431768667062784709
}\datatable

\begin{document}
\begin{tikzpicture}
\begin{axis}[
major x tick style = transparent,
ybar,
symbolic x coords={dataset1, dataset2, dataset\_x1, dataset\_x2},
xtick = data,
xticklabel style={ inner sep=0pt, anchor=north east, rotate=45 },
scaled y ticks = false,
]
% Beschriftung des einen Balkens, muss vorher erfolgen
\addplot[draw=none,fill=none,nodes near coords,forget plot]
plot table[x=name, y=value,restrict expr to domain={\coordindex}{3:3}] {\datatable};
% eigentlicher Plot
\addplot plot table[x=name, y=value] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}

Gruß
Elke

Harsesis
03-03-2015, 12:52
Hi,

Vielen dank, das hat geklappt!

Grüße!