Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Problem mit Pgfplots Balkendiagram und symbolischen x coordinaten mit Unterstrichen

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.03.2015
    Beiträge
    4

    Problem mit Pgfplots Balkendiagram und symbolischen x coordinaten mit Unterstrichen

    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:

    Code:
    \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!

  2. #2
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Du kannst das entweder mit

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

    Code:
    \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

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.03.2015
    Beiträge
    4
    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

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Falls Du alle beschriften möchtest, ginge das einfach mit der Option nodes near coords.

    Code:
    \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

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.03.2015
    Beiträge
    4
    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

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Dann mache vorher einen Plot mit der Option forget plot, bei dem lediglich die Beschriftung dieses einen Balkens ausgegeben wird.

    Code:
    \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

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.03.2015
    Beiträge
    4
    Hi,

    Vielen dank, das hat geklappt!

    Grüße!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •