Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

With the help of Jake I'm able to create bar plots with variable heights ( Space between bars, height and width of the plot ). Some bar plots have single very long yticklabels that need line breaks. To prevent printing yticklabels into one another I have to increase “y” (see MWE). But “y” applies to every yticklabel even if it's not needed. The MWE shows a bar plot that grows more than necessary, not fitting on the page any more. Can “y” be increased only for bars with long yticklabels?

MWE:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    xbar, %
    y=-1.5cm,%
    bar width=0.5cm,%
    enlarge y limits={abs=0.45cm},
    xlabel={Häufigkeit},%
    symbolic y coords={
      Einhaltung der Hygienestandards,%
      Zeitintensität des Programms,%
      Zubereitung des O+G,%
      Lagerung des O+G,%
      Müllentsorgung und Reinigung,%
      Sonstige,%
      Keine Probleme,%
      Abstimmung mit dem Lieferanten/Warennahme/Lieferzeitpunkt,%
      Verteilung des O+G auf die Klassen,%
      Qualität der Lieferung/Lieferung an zwei aufeinanderfolgenden Tagen ist schlecht/bessere Verteilung,%
      Keine Lieferung an allen Schultagen/nach Ferien öfters holpriger Beginn,%
      Auswahl des Obstes,%
      Ausstattung mit Materialien (Schneidebrett),%
      Anmeldung zum SOP
    },%
    ytick=data,%
    yticklabel style={text width=5cm,align=right},%
    nodes near coords,%
    nodes near coords align={horizontal},%
    ]%
    \addplot table[col sep=comma,header=false] {%
      23, Einhaltung der Hygienestandards
      20, Zeitintensität des Programms
      18, Zubereitung des O+G
      16, Lagerung des O+G
      7, Müllentsorgung und Reinigung
      6, Sonstige
      4, Keine Probleme
      4, Abstimmung mit dem Lieferanten/Warennahme/Lieferzeitpunkt
      1, Verteilung des O+G auf die Klassen
      1, Qualität der Lieferung/Lieferung an zwei aufeinanderfolgenden Tagen ist schlecht/bessere Verteilung
      1, Keine Lieferung an allen Schultagen/nach Ferien öfters holpriger Beginn
      1, Auswahl des Obstes
      1, Ausstattung mit Materialien (Schneidebrett)
      1, Anmeldung zum SOP
    };
  \end{axis}
\end{tikzpicture}
\end{document}

Corresponding plot (see page number in the lower left corner of the plot): enter image description here

share|improve this question

1 Answer 1

up vote 5 down vote accepted

The symbolic y coords style places the bars at y=0,1,2,3,... . It is possible to change the placement options, i.e. to choose a different coordinate for "huge" labels manually.

This could be done by using yticklabels instead of symbolic y coords and by providing the y positions explicitly:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    xbar, %
    y=-1.5cm,%
    bar width=0.5cm,%
    enlarge y limits={abs=0.45cm},
    xlabel={Häufigkeit},%
    yticklabels={
      Einhaltung der Hygienestandards,%
      Zeitintensität des Programms,%
      Zubereitung des O+G,%
      Lagerung des O+G,%
      Müllentsorgung und Reinigung,%
      Sonstige,%
      Keine Probleme,%
      Abstimmung mit dem Lieferanten/Warennahme/Lieferzeitpunkt,%
      Verteilung des O+G auf die Klassen,%
      Qualität der Lieferung/Lieferung an zwei aufeinanderfolgenden Tagen ist schlecht/bessere Verteilung,%
      Keine Lieferung an allen Schultagen/nach Ferien öfters holpriger Beginn,%
      Auswahl des Obstes,%
      Ausstattung mit Materialien (Schneidebrett),%
      Anmeldung zum SOP
    },%
    ytick=data,%
    yticklabel style={text width=5cm,align=right},%
    nodes near coords,%
    nodes near coords align={horizontal},%
    ]%
    \addplot table[col sep=comma,header=false] {%
      23,0
      20,1
      18,2
      16,3
      7, 4
      6, 5
      4, 6
      4, 7
      1, 8
      1, 9
      1, 10.5
      1, 11.5
      1, 12.5
      1, 13.5
    };
  \end{axis}
\end{tikzpicture}
\end{document}

Here, I chose a different position for the last four entries.

You could also place the tick labels into the very same table and use yticklabels from table to load the labels; that would simplify the lookup for you.

EDIT Since the information of my last paragraph is of use to you, I added that one here:

enter image description here

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots, pgfplotstable}

\pgfplotstableread[col sep=comma, header=false]{
      23,0,    Einhaltung der Hygienestandards
      20,1,    Zeitintensitaet des Programms
      18,2,    Zubereitung des O+G
      16,3,    Lagerung des O+G
      7, 4,    Muellentsorgung und Reinigung
      6, 5,    Sonstige
      4, 6,    Keine Probleme
      4, 7.2,  Abstimmung mit dem Lieferanten/Warennahme/Lieferzeitpunkt
      1, 8.5,  Verteilung des O+G auf die Klassen
      1, 10.5, Qualitaet der Lieferung/Lieferung an zwei aufeinanderfolgenden Tagen ist schlecht/bessere Verteilung
      1, 12.7, Keine Lieferung an allen Schultagen/nach Ferien oefters holpriger Beginn
      1, 14,   Auswahl des Obstes
      1, 15,   Ausstattung mit Materialien (Schneidebrett)
      1, 16,   Anmeldung zum SOP
}\datatable

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    xbar, 
    y=-.8cm,
    bar width=0.5cm,
    enlarge y limits={abs=0.45cm},
    xlabel={Haeufigkeit},
    yticklabels from table={\datatable}{2},
    ytick=data,
    yticklabel style={text width=5cm,align=right},
    nodes near coords,
    nodes near coords align={horizontal},
    ]
    \addplot table [y=1, x=0] {\datatable};
  \end{axis}
\end{tikzpicture}
\end{document}

As you see, the code mentioned in your comment was almost right: except for a small misunderstanding. You said \addplot table [y expr=\coordindex, x=0]; probably a relic of some older prototype. Of course, \coordindex will ignore your carefully chosen positions. Writing y=1 repairs it.

Note that y=1, x=0 is the same as y index=1, x index=0 in your case because you do not have column names (and pgfplots assigns column names = column indices). In general, it would be a good practice to use y index=1, x index=0 in such a case.

Note furthermore that you do not need trailing % between adjacent keys in key-value-lists (although they do not hurt).

share|improve this answer
    
Thank you!! Though I don't know how to implement your last tip (dl.dropbox.com/u/18529526/pgfplots-beschriftung-platzieren.tex does not work) I can now make the first version up. –  typokurz Nov 28 '12 at 18:35
    
you almost got it - see my edit. –  Christian Feuersänger Nov 28 '12 at 18:59
    
Thanks again! I even tried “y=1”. But I did not delete “y expr=\coordindex”; just because I'm not in the know. pgfplots is quite a cool package---but in some ways much too powerful for me … Thanks for pgfplots! –  typokurz Nov 28 '12 at 19:18

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.