X Tick Labels abwechselnd versetzt

Tabellen und Grafiken erstellen und anordnen


hansiglaser
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Mi 18. Feb 2015, 13:33

X Tick Labels abwechselnd versetzt

Beitrag von hansiglaser »

Hi!

Für eine Grafik hab ich sehr viele und sehr lange X Tick Labels (das sind Kategorie-Bezeichnungen, keine Koordinaten). Dadurch überdecken sich die teilweise. Ich würde daher gerne jedes zweite X Tick Label ein bisschen nach unten verschieben.

Bei einer Grafik habe ich die Label händisch eingegeben und dann einfach bei jedem Zweiten am Anfang "\\[1em]". Das funktioniert wunderbar ("x tick label style={align=center}" ist dafür zusätzlich notwendig).

Im nächsten Bild lese ich diese aber aus einer Tabelle mit "xticklabels from table" und kann sie nicht mehr händisch angreifen (außerdem sinds viel mehr).

Drum wollte ich um eine Möglichkeit fragen, ob ich automatisch jedes zweite versetzen kann.

Danke
Hansi

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Kannst du das unseren fleißigen TikZ-Helfern anhand eines Minimalbeispiels verdeutlichen? Das macht das Erarbeiten einer Lösung einfacher und damit kommst du schneller an eine gute Lösung.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Stamm-

Modifizierung aller Markierungen an der Achse

Beitrag von Stamm- »

Trotz des fehlenden Beispiels vermute ich, dass x tick label style={rotate=45,anchor=east} hilfreich sein könnte. Dadurch werden alle Marken gedreht und an ihrem Ende den Abschnitten angeheftet. Die Behandlung einzelner Marken würde dadurch entfallen. Wenn man die Anleitung nach diesem Schlüssel durchsucht, findet man auch Code-Beispiele zur .

hansiglaser
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Mi 18. Feb 2015, 13:33

Beitrag von hansiglaser »

Hi!

Danke für eure bisherigen Antworten.

Hier ein bisschen Code:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}

\begin{document}

  \pgfplotstableread[col sep=comma]{
    Label,Value
    abcdefgh,1
    bcdefgha,2
    cdefghab,3
    defghabc,4
    efghabcd,5
    fghabcde,6
  }\data
  \begin{tikzpicture}
    \begin{axis}[
        ybar,
        height=7cm,
        xtick=data,
        xticklabels from table={\data}{Label},
        %xticklabels={abcdefgh,\\[1em]bcdefgha,cdefghab,\\[1em]defghabc,efghabcd,\\[1em]fghabcde},
        %x tick label style={align=center},   % align=... is required for linebreaks in tick labels
        tick label style={font=\footnotesize},
        xtick pos=left,
        ytick pos=left,
        xtick align=outside,
        reverse legend,
      ]
      \addplot table [x expr=\coordindex,y={Value}] {\data};
    \end{axis}
  \end{tikzpicture}

\end{document}
Die Variante mit 45° gedrehten Labels habe ich bereits probiert, allerdings ist das in meinem Fall wirklich hässlich und ich möchte unbedingt abwechselnde Labels.

Gibt es eine Möglichkeit beim Label-Style jedes zweite zu ändern?

Danke
Hansi

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

Beitrag von esdd »

Vorschlag:
x tick label style={yshift={-mod(\ticknum,2)*1em}},
Bild

Code:
\documentclass[border=5mm]{standalone} 
\usepackage{pgfplots}% lädt auch tikz
\usepackage{pgfplotstable} 
\pgfplotsset{compat=1.11} 

\begin{document} 
   \pgfplotstableread[col sep=comma]{ 
     Label,Value 
     abcdefgh,1 
     bcdefgha,2 
     cdefghab,3 
     defghabc,4 
     efghabcd,5 
     fghabcde,6 
   }\data 
   \begin{tikzpicture} 
     \begin{axis}[ 
         ybar, 
         height=7cm, 
         xtick=data, 
         xticklabels from table={\data}{Label},
         x tick label style={yshift={-mod(\ticknum,2)*1em}},
         tick label style={font=\footnotesize}, 
         xtick pos=left, 
         ytick pos=left, 
         xtick align=outside, 
         reverse legend, 
       ] 
       \addplot table [x expr=\coordindex,y={Value}] {\data}; 
     \end{axis} 
   \end{tikzpicture} 
\end{document}
Gruß
Elke

Edit: \tick durch \ticknum ersetzt.
Dateianhänge
gl_tlversch.png
gl_tlversch.png (11.85 KiB) 2842 mal betrachtet
Zuletzt geändert von esdd am Sa 21. Feb 2015, 01:31, insgesamt 1-mal geändert.

hansiglaser
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Mi 18. Feb 2015, 13:33

Beitrag von hansiglaser »

Hi!
esdd hat geschrieben:Vorschlag:
x tick label style={yshift={-mod(\tick,2)*1em}},
Super, danke, das funktioniert 1a!

Noch eine kleine Frage: In einem zweiten Bild hab ich "symbolic x coords", gibts da eine Möglichkeit, den "yshift"-Modulo-Trick auch zu verwenden? "\tick" wird da leider ein String, und "\coordindex" (wie für "x expr=\coordindex") kennt er dort gar nicht.

Danke
Hansi

Stamm-

Verwendung anderer Schlüssel

Beitrag von Stamm- »

hansiglaser hat geschrieben:[…] In einem zweiten Bild hab ich "symbolic x coords", gibts da eine Möglichkeit, den "yshift"-Modulo-Trick auch zu verwenden? "\tick" wird da leider ein String, und "\coordindex" (wie für "x expr=\coordindex") kennt er dort gar nicht. […]
Wenn statt des Schlüssels »symbolic x coords« die Kombination der Schlüssel »xtick« und »xticklabels« in der Umgebung »axis« verwendet wird, hat die Versetzung der Marken eine Chance.
\documentclass[
  11pt,
  border=2pt
]{standalone}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß}
}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}

\pgfplotsset{
  compat=1.12,
  xlabel near ticks,
  ylabel near ticks
}

\begin{document}
  \begin{tikzpicture}[font=\footnotesize]
    \begin{axis}[
      width=13cm,
      height=8cm,
      enlargelimits=0.05,
      xmin=1,
      xmax=12,
      xtick={1,2,...,12},
      xticklabels={Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember},
      x tick label style={yshift={-mod(\tick,2)*1em}},
      ybar,
      bar width=7pt,
      /pgf/number format/1000 sep=\,
    ]
      \addplot coordinates {
        (1,5036)
        (2,3386)
        (3,4096)
        (4,5106)
        (5,7026)
        (6,3806)
        (7,4296)
        (8,4356)
        (9,4516)
        (10,6526)
        (11,4356)
        (12,4516)
      };
      \addplot coordinates {
        (1,3806)
        (2,4296)
        (3,4356)
        (4,4516)
        (5,6526)
        (6,5036)
        (7,3386)
        (8,4096)
        (9,5106)
        (10,7026)
        (11,4096)
        (12,5106)};
    \end{axis}
  \end{tikzpicture}
\end{document}
Bild

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

Beitrag von esdd »

hansiglaser hat geschrieben: Noch eine kleine Frage: In einem zweiten Bild hab ich "symbolic x coords", gibts da eine Möglichkeit, den "yshift"-Modulo-Trick auch zu verwenden? "\tick" wird da leider ein String, und "\coordindex" (wie für "x expr=\coordindex") kennt er dort gar nicht.
Verwende \xticknum statt \xtick
x tick label style={yshift={-mod(\ticknum,2)*1em}}
Das habe ich jetzt auch oben so geändert. Dann funktioniert das auch mit symbolic x coords.
\documentclass[ 
   11pt, 
   border=2pt 
]{standalone} 
\usepackage[T1]{fontenc} 
\usepackage{selinput} 
\SelectInputMappings{ 
   adieresis={ä}, 
   germandbls={ß} 
} 
\usepackage{pgfplots} 

\pgfplotsset{ 
   compat=1.11, 
} 

\begin{document} 
   \begin{tikzpicture}[font=\footnotesize] 
     \begin{axis}[ 
       width=13cm, 
       height=8cm, 
       enlargelimits=0.05, 
       symbolic x coords={Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember}, 
       x tick label style={yshift={-mod(\ticknum,2)*1em}}, 
       ybar, 
       bar width=7pt, 
       /pgf/number format/1000 sep=\, 
     ] 
       \addplot coordinates { 
         (Januar,5036) 
         (Februar,3386) 
         (März,4096) 
         (April,5106) 
         (Mai,7026) 
         (Juni,3806) 
         (Juli,4296) 
         (August,4356) 
         (September,4516) 
         (Oktober,6526) 
         (November,4356) 
         (Dezember,4516) 
       }; 
       \addplot coordinates { 
         (Januar,3806) 
         (Februar,4296) 
         (März,4356) 
         (April,4516) 
         (Mai,6526) 
         (Juni,5036) 
         (Juli,3386) 
         (August,4096) 
         (September,5106) 
         (Oktober,7026) 
         (November,4096) 
         (Dezember,5106)}; 
     \end{axis} 
   \end{tikzpicture} 
\end{document}
Gruß
Elke

hansiglaser
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Mi 18. Feb 2015, 13:33

Beitrag von hansiglaser »

esdd hat geschrieben:
hansiglaser hat geschrieben: Noch eine kleine Frage: In einem zweiten Bild hab ich "symbolic x coords", gibts da eine Möglichkeit, den "yshift"-Modulo-Trick auch zu verwenden? "\tick" wird da leider ein String, und "\coordindex" (wie für "x expr=\coordindex") kennt er dort gar nicht.
Verwende \xticknum statt \xtick
x tick label style={yshift={-mod(\ticknum,2)*1em}}
Großartig, danke, das ist perfekt!

Danke
Hansi

Antworten