Beschriftungen von tikz-Grafik überlappen

Tabellen und Grafiken erstellen und anordnen


markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beschriftungen von tikz-Grafik überlappen

Beitrag von markusv »

Moin liebe LaTeX-Gemeinde!

Ich bin gerade beim überarbeiten einer BA und möchte ein Balkendiagramm mittels pgfplots//tikz darstellen. Bisher bin ich mit meinen beschränkten Kenntnissen in diesem Bereich gut zurecht gekommen oder konnte im Guide nachlesen.

Jedoch weiß ich hier nicht genau, wonach ich suchen könnte.

Mein Problem sind die relativ langen Bezeichnungen der Daten, was dazu führt, dass die Beschriftungen ineinander überlappen, siehe Beispiel:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        width  = 0.95*\textwidth,
        height = 8cm,
        major x tick style = transparent,
        ybar,
        bar width=25pt,
        ymajorgrids = true,
        symbolic x coords={überdurchschnittlicher Visus,durchschnittlicher Visus,unterdurchschnittlicher Visus},
        xtick = data,
        enlarge x limits = .4,
        %x tick label style={rotate=45,anchor=east},
        scaled y ticks = false,
        ymin=0,
    ]
        \addplot[style={blue,fill=blue}]
            coordinates {(überdurchschnittlicher Visus, 4.779) (durchschnittlicher Visus,4.838) (unterdurchschnittlicher Visus,4.307)};

        \addplot[style={red,fill=red}]
             coordinates {(überdurchschnittlicher Visus,4.512) (durchschnittlicher Visus,4.473) (unterdurchschnittlicher Visus,5.626)};

        \legend{Männer,Frauen}
    \end{axis}
\end{tikzpicture}
\end{document}
Gibt es eine Möglichkeit, die Beschriftungen umzubrechen oder so anzuordnen, dass sie nicht mehr ineinander ragen?
Das Rotieren der Beschriftungen (im Code auskommentiert) ist nicht wirklich praktikabel, da es aufgrund der Länge schlichtweg schei*e aussieht.

Vielen Dank für Eure Tipps!
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen.

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beitrag von markusv »

Manchmal steht man aber auch auf dem Schlauch:

wo ich doch schon x tick label style im Code stehen habe, ist es natürlich klar, wonach man suchen sollte.
x tick label style={yshift={-mod(\ticknum,2)*1em}}, 


erzeugt die gewünschte Versetzung der Beschriftungen, die mir aber nicht gefällt.

Nach kurzem Suchen bin ich nun auf
x tick label style={text width=3cm,align=right},
gestoßen, was aber aufgrund der langen einzelnen Wörter auch nur das Wort Visus auf eine zweite Zeile bringt.
Gibt es eine Möglichkeit, LaTeX zu sagen, dass es auch Wörter umbrechen darf?

EDIT: Die, wie ich finde, "quick-and-dirty"-Lösung:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        legend pos=outer north east,
        width  = 0.95*\textwidth,
        height = 8cm,
        major x tick style = transparent,
        ybar,
        bar width=25pt,
        ymajorgrids = true,
        symbolic x coords={überdurch-schnittlicher Visus,durchschnittlicher Visus,unterdurch-schnittlicher Visus},
        xtick = data,
        enlarge x limits = .4,
        %x tick label style={rotate=45,anchor=east},
        %x tick label style={yshift={-mod(\ticknum,2)*1.5em}},
        x tick label style={text width=3cm,align=center},
        scaled y ticks = false,
        ymin=0,
        nodes near coords={\pgfmathprintnumber[precision=3,zerofill,fixed]{\pgfplotspointmeta}},
    ]
        \addplot[style={blue,fill=blue}]
            coordinates {(überdurch-schnittlicher Visus, 4.779) (durchschnittlicher Visus,4.838) (unterdurch-schnittlicher Visus,4.307)};

        \addplot[style={red,fill=red}]
             coordinates {(überdurch-schnittlicher Visus,4.512) (durchschnittlicher Visus,4.473) (unterdurch-schnittlicher Visus,5.626)};

        \legend{Männer,Frauen}
    \end{axis}
\end{tikzpicture}
\end{document}
Status setze ich trotzdem auf "beantwortet", da es mir für meine Ansprüche dazu genügt.

Schönes Wochenende!
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen.

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

Beitrag von esdd »

Du kannst mit
symbolic x coords={überdurchschnittlicher Visus,durchschnittlicher Visus,unterdurchschnittlicher Visus},
xticklabels={{überdurch-\\schnittlicher Visus},{durchschnittlicher Visus},{unterdurch-\\schnittlicher Visus}},
xtick = data, 
x tick label style={text width=3cm,align=center}, 
 
Deine drei symbolischen Koordinaten definieren und deren Beschriftung an den Achsen vorgeben. Allerdings wäre ich da schreibfaul und würde auf die symbolischen Koordinaten verzichten und nur die Beschriftung ändern:


\documentclass{scrartcl} 
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage{pgfplots} 
\pgfplotsset{compat=newest}
\begin{document} 
\begin{tikzpicture} 
     \begin{axis}[ 
        width  = 0.95*\textwidth, 
        height = 8cm, 
        major x tick style = transparent, 
        ybar, 
        bar width=25pt, 
        ymajorgrids = true,
        xtick={1,2,3},
        xticklabels={{überdurch-\\schnittlicher Visus},{durchschnittlicher Visus},{unterdurch-\\schnittlicher Visus}},
        x tick label style={text width=3cm,align=center}, 
        enlarge x limits = .4, 
        scaled y ticks = false, 
        ymin=0, 
     ] 
         \addplot[style={blue,fill=blue}] 
             coordinates {(1, 4.779) (2,4.838) (3,4.307)}; 
         \addplot[style={red,fill=red}] 
              coordinates {(1,4.512) (2,4.473) (3,5.626)}; 
         \legend{Männer,Frauen} 
     \end{axis} 
\end{tikzpicture} 
\end{document}

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beitrag von markusv »

Danke für deine Antwort!

So hatte ich es auch gesehen, aber im Prinzip entspricht es ja meiner Variante, vielleicht nicht ganz sooo dirty.

Automatische Zeilenumbrüche können aber generell nicht generiert werden?
Bspw. falls ich noch weitere Balken einfügen möchte, die Diagrammbreite verkleinern will etc. müsste ich die Umbrüche ja immer wieder neu anpassen.
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen.

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

Beitrag von esdd »

markusv hat geschrieben:Bspw. falls ich noch weitere Balken einfügen möchte, die Diagrammbreite verkleinern will etc. müsste ich die Umbrüche ja immer wieder neu anpassen.
Um so problematischer wäre Deine Variante. Außerdem kann es passieren, dass über-durchschnittlich am Ende doch in einer Zeile steht.

Ich würde noch babel mit passender Sprachoption laden. Dass das erste Wort nicht automatisch getrennt wird, kannst Du wie folgt umgehen:
xticklabels={{\hspace{0pt}überdurchschnittlicher Visus},{\hspace{0pt}durchschnittlicher Visus},{\hspace{0pt}unterdurchschnittlicher Visus}},

Gast

Beitrag von Gast »

Bei Verwendung von lualatex braucht man die \hspace{0pt}-Tricks übrigens nicht.

Antworten