Anzeige:
Ergebnis 1 bis 11 von 11

Thema: pgfplots - nodes near coords

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.06.2011
    Beiträge
    32

    pgfplots - nodes near coords

    Hallo an euch,

    im Rahmen meiner Masterarbeit würde ich gerne den Diagrammtyp x- oder ybar stacked verwenden, um den einen oder anderen Sachverhalt zu verdeutlichen. Leider bin ich mit der Darstellung der "nodes near coords" Option nicht zufrieden. Ich hab folgendes Minimalbeispiel aus der pgfplots Doku erweitert, um die Probleme deutlich zu machen.

    Code:
    %Header
    \documentclass[]{standalone}
    								
    %Sprachpakete
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    
    %\usetikzlibrary{decorations.pathmorphing}
    \usepackage{pgfplots}							
    \pgfplotsset{compat=newest}
    \usepackage{graphicx}										%Kompatibiltätsmodus für die jeweilige Version
    
    \begin{document}
    
    
    \begin{tikzpicture}
    \begin{axis}[
    			ybar stacked,% configures `bar shift
    			x tick label style={/pgf/number format/1000 sep=},
    			ylabel=Population,
    			enlargelimits=0.15,
    			legend style={at={(0.5,-0.15)},
    			anchor=north,
    			legend columns=-1},
    			bar width=9pt,
    			nodes near coords,
    			%nodes near coords align={vertical},
    			point meta=y *10^-7 % the displayed number
    			]
    \addplot	coordinates {(1930,50e6) (1940,33e6) (1950,40e6) (1960,50e6) (1970,70e6)};
    \addplot  coordinates {(1930,02e6) 	(1940,42e6) (1950,43e6) (1960,45e6) (1970,65e6)};
    \legend{Far,Near}
    \end{axis}
    \end{tikzpicture}
    \end{document}
    1. Ich hätte gerne, dass ich den Wert einer jeden Teilsäule bei z. B. 1930 gezeigt bekomme und nicht das Ergebnis der roten Säule kumuliert ausgegeben wird, d. h. ich hätte gerne, dass die rote Säule mit 02e6 beschriftet wird. Weiß einer von euch, ob es dafür einen Schalter o. Ä. gibt, um das Ergebnis nach meinen Vorstellungen hinzubekommen? -->> Lösung Gefunden: meta point = rawy!! wie folgt einfügen:

    \addplot[meta point=rawy] coordinates {(1930,50e6) (1940,33e6) (1950,40e6) (1960,50e6) (1970,70e6)};

    Dies hat jedoch den Nachteil, dass man dann die Farben der Säulen selbst definieren muss, oder kennt jemand von euch eine Möglichkeit, wie dies umgangen werden kann?

    2. in der pgfplots-Doku werden die Balken und Säulen mittig beschriftet und nicht, wie hier, an der oberen Kante der jeweiligen Säule. Wisst ihr, wie ich das einstellen kann?

    3. und auch meine letzte Frage an euch. Gerade, wenn, wie z. B. bei 1930 zu sehen, die rote Säule sehr "dünn ist", stehen die Werte beider Säulen z. T. übereinander. Wisst ihr, wie ich das verhinden kann?

    Ich hoffe, es gibt jemanden, der das Problem bereits hatte und mir mit einer Lösung aushelfen kann. Danke euch und einen schönen Sonntag noch.
    Geändert von HumanDelight (29-03-2015 um 19:51 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    1. Du könntest \addplot+[point meta=rawy] coordinates {(1930,50e6) (1940,33e6) (1950,40e6) (1960,50e6) (1970,70e6)}; verwenden oder bei den axis Optionen point meta=rawy angeben oder dort die Angabe der Option point meta einfach weglassen.

    2. Hört sich danach an, als ob bei Dir noch die Version 1.8 genutzt wird. Aktuell ist aber derzeit 1.12.

    3. Siehe 2.

    Im folgenden Beispiel lasse ich mir die genutzte Version mit anzeigen:

    Code:
    \documentclass[margin=5pt]{standalone}
    \usepackage{pgfplots}
    \pgfplotsset{compat=newest}
    
    \begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        ybar stacked,% configures `bar shift
        x tick label style={/pgf/number format/1000 sep=},
        ylabel=Population,
        enlarge x limits=0.15,
        enlarge y limits={.15,upper},
        ymin=0,
        legend style={at={(0.5,-0.15)},
        anchor=north,
        legend columns=-1},
        bar width=9pt,
        nodes near coords,
      ]
    \addplot coordinates {(1930,50e6) (1940,33e6) (1950,40e6) (1960,50e6) (1970,70e6)};
    \addplot  coordinates {(1930,02e6) 	(1940,42e6) (1950,43e6) (1960,45e6) (1970,65e6)};
    \legend{Far,Near}
    \end{axis}
    % genutzte Version anzeigen
    \node[anchor=south east,orange]at(current axis.outer north east){pgfplots Version \pgfplotsversion};
    \end{tikzpicture}
    \end{document}
    Gruß
    Elke
    Angehängte Grafiken Angehängte Grafiken

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.06.2011
    Beiträge
    32
    Hallo Elke,

    danke dir für den Support. Ich werde das mit der Versionsanzeige erst einmal unbedingt ausprobieren und berichten. Es sollte eigentlich eingestellt sein, dass die Updates von Paketen "on-the-fly" installiert werden.

    Zum Thema "Daten in zu kleinen Abschnitten der Säule ausblenden":
    Ist das bei V1.12 automatisch hinterlegt oder muss ich Modifikation wie z. B. hier (http://tex.stackexchange.com/questio...rom-ybar-chart) vornehmen?

    Bis später
    Markus
    Geändert von HumanDelight (30-03-2015 um 13:43 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Zitat Zitat von HumanDelight Beitrag anzeigen
    Zum Thema "Daten in zu kleinen Abschnitten der Säule ausblenden":
    Ist das bei V1.12 automatisch hinterlegt oder muss ich Modifikation wie z. B. hier (http://tex.stackexchange.com/questio...rom-ybar-chart) vornehmen?
    Das musst Du selbst vornehmen, aber Du hast ja schon einen Lösungsvorschlag gefunden.

    Gruß
    Elke

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.06.2011
    Beiträge
    32
    Hallo,

    hier ist also die Antwort auf die Frage, wie ich zu kleine Säulen ausblenden kann.

    Code:
    \documentclass[margin=5pt]{standalone}
    \usepackage{pgfplots}
    \pgfplotsset{compat=newest}
    %\pgfplotsset{/pgf/number format/use comma} %Schalter: ein/aus
    
    \begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        ybar stacked,% configures `bar shift
        x tick label style={/pgf/number format/1000 sep=},
        %ylabel=Population,
        enlarge x limits=0.15,
        enlarge y limits={.15,upper},
        ymin=0,
        %legend style={at={(0.5,-0.15)},anchor=north,legend columns=-1},
        bar width=9pt,
        nodes near coords={%
        \pgfmathprintnumberto[fixed,assume math mode=true]{\pgfplotspointmeta}{\myval}%
        \pgfmathparse{\myval<5?:\myval}\pgfmathresult%
    },
    		%nodes near coords align=left
      ]
    \addplot  coordinates {(1930,50) (1940,33) (1950,40) (1960,50) (1970,70)};
    \addplot  coordinates {(1930,02) 	(1940,42) (1950,43) (1960,45) (1970,65)};
    \addplot  coordinates {(1930,15) 	(1940,15) (1950,15) (1960,15) (1970,15)};
    %\legend{Far,Near,Zero}
    \end{axis}
    % genutzte Version anzeigen
    \node[anchor=south east,orange]at(current axis.outer north east){pgfplots Version \pgfplotsversion};
    \end{tikzpicture}
    \end{document}
    Der relevanten Wert, für alle die, die das Problem in Zukunft haben sollte, ist "myval". Hier die Balkenhöhe bitte selbst nach eigenem Ermessen definieren.

    Danke!

    PS:

    So ganz gelöst hat sich das Problem doch noch nicht ! Wenn ich das Diagramm in meine Arbeit einbauen will, möchte ich auch, dass "Werte", die ein "," enthalten in der deutschen Darstellung dargestellt werden. Dazu wird im Header der Zusatz

    \pgfplotsset{/pgf/number format/use comma}

    gemacht. Dann kann ich das obige Minimalbeispiel leider nicht mehr kompilieren. Kann mir diesbezüglich bitte noch einmal jemand aus der Patsche helfen, da meine gefundenen Lösungen (wie z. B. every node near coord/.append style={anchor=-40, /pgf/number format/.cd, use comma}) nicht funktionieren ?
    Geändert von HumanDelight (31-03-2015 um 17:01 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Dein Code läuft mit oder ohne use comma fehlerfrei durch, zeigt das Problem also nicht. Ich habe deshalb jetzt einfach mal aus der 40 eine 40.2 gemacht.

    Ändere nodes near coords wie im folgenden Beispiel:

    Code:
    \documentclass[margin=5pt]{standalone}
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.12}
    \pgfplotsset{/pgf/number format/use comma}
    
    \begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        ybar stacked,% configures `bar shift
        x tick label style={/pgf/number format/1000 sep=},
        %ylabel=Population,
        enlarge x limits=0.15,
        enlarge y limits={.15,upper},
        ymin=0,
        %legend style={at={(0.5,-0.15)},anchor=north,legend columns=-1},
        bar width=9pt,
        nodes near coords={%
        \pgfmathprintnumberto[fixed,assume math mode=true,use period]{\pgfplotspointmeta}{\myval}%
        \pgfmathparse{\myval<5?:"\noexpand\pgfmathprintnumber[use comma]{\myval}"}\pgfmathresult%
    },
      ]
    \addplot  coordinates {(1930,50) (1940,33) (1950,40.2) (1960,50) (1970,70)};
    \addplot  coordinates {(1930,02) (1940,42) (1950,43) (1960,45) (1970,65)};
    \addplot  coordinates {(1930,15) (1940,15) (1950,15) (1960,15) (1970,15)};
    %\legend{Far,Near,Zero}
    \end{axis}
    % genutzte Version anzeigen
    \node[anchor=south east,orange]at(current axis.outer north east){pgfplots Version \pgfplotsversion};
    \end{tikzpicture}
    \end{document}
    Gruß
    Elke

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.06.2011
    Beiträge
    32
    Hallo Elke,

    vielen Dank dir für die wieder schnelle Antwort. Es tut. Vielen, vielen Dank . Beim Kopieren in die Masterarbeit ist jedoch ein weiteres Problemchen aufgetaucht.

    Ich definiere dort logischerweise zusätzlich
    Code:
    %Sprachpakete
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    Dann kommen wieder zig Fehlermeldungen, dass "}" vergessen wurden. Kommentiere ich babel aus, compiliert es wieder fehlerfrei durch. Liegt das an der pgfplots Version? Im Büro, wo ich zeitweilig auch an meiner Arbeit schreibe, ist noch pgfplots V1.9 installiert und der Update Manager muss erst über den IT-Support nachinstalliert werden.


    Guten Start in den Tag und ich hoffe, dass es danach nichts mehr gibt.
    Markus
    Geändert von HumanDelight (01-04-2015 um 11:08 Uhr)

  8. #8
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Ich kann Dein Problem bei mir nachvollziehen. Vielleicht reicht es schon, wenn Du nach dem Laden von pgfplots

    Code:
    \usetikzlibrary{babel}
    einfügst?

    Gruß
    Elke

  9. #9
    Registrierter Benutzer
    Registriert seit
    28.06.2011
    Beiträge
    32
    Hallo,

    tikzlirbraby - nein, dass funktioniert leider (noch) nicht. Fehlermeldung dabei ist:
    Code:
    I can't find tikzlibrarybabel.code.tex
    Ich werde mal zu Hause schauen, ob bei den aktuellsten Paketen (pgfplots 1.12 und babel 3.9l) das Diagramm problemlos compiliert wird (wie bei dir). Und dann werde ich die Lösung hoffentlich posten können. Das Problem light in der Umdefinition, die durch dich im Verlauf des Threads vorgenommen wurde, um mein ursprüngliches Problem zu lösen:
    Code:
    "\noexpand\pgfmathprintnumber[use comma]{\myval}"}
    Lösche ich diesen Part aus der "node near coords"-Definition, kann ich das Diagramm problemlos mit [ngerman]{babel} compilieren. Ich hoffe, dass es mit der aktuellsten pgfplots-Version durchläuft.

    Danke dir noch einmal.
    Markus

  10. #10
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Dann ist die pgf/tikz Version auch nicht aktuell. Die babel Bibliothek ist erst seit der Version 3.0 dabei, die aber auch schon deutlich über ein Jahr alt ist.

    Alternativ kannst Du zwischen \begin{tikzpicture} und \begin{axis}

    Code:
    \shorthandoff{"}
    setzen.

    Gruß
    Elke

  11. #11
    Registrierter Benutzer
    Registriert seit
    28.06.2011
    Beiträge
    32
    Hi,

    also bei mir zu Hause mit allen Versionen up to date läuft es mit \usetikzlibrary{babel} durch. Ich werde mal im Büro den IT-Support kontaktieren und mir den Update-Manager nachinstallieren lassen.

    Vielen, vielen Dank dir für den super guten Support.

Lesezeichen

Berechtigungen

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