较长的 yticklabel 会过多地增加条形图的高度

较长的 yticklabel 会过多地增加条形图的高度

在 Jake 的帮助下,我能够创建具有可变高度的条形图(条形之间的空间、图的高度和宽度)。有些条形图有单个非常长的yticklabels,需要换行。为了防止打印yticklabels 相互重叠,我必须增加“y”(参见 MWE)。但“y”适用于每一个,yticklabel即使它不是必需的。MWE 显示的条形图增长超过必要范围,不再适合页面。是否可以仅对具有长 yticklabels 的条形图增加“y”?

梅威瑟:

\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}

对应剧情(见剧情左下角页码): 在此处输入图片描述

答案1

样式symbolic y coords将条形放置在 y=0,1,2,3,... 处。可以更改放置选项,即手动为“巨大”标签选择不同的坐标。

yticklabels这可以通过使用而不是symbolic y coords并明确提供 y 位置来实现:

\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}

在这里,我为最后四个条目选择了不同的位置。

您还可以将刻度标签放入同一张表中并使用yticklabels from table加载标签;这将简化您的查找。

编辑由于我最后一段的信息对您有用,因此我在这里添加了该信息:

在此处输入图片描述

\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}

如您所见,您的评论中提到的代码是几乎正确:除了一个小误会。你说\addplot table [y expr=\coordindex, x=0];可能是某个旧原型的遗物。当然,\coordindex会忽略你精心选择的立场。写作y=1修复了它。

y=1, x=0注意相同就像y index=1, x index=0您的情况一样,因为您没有列名(并且 pgfplots 分配列名 = 列索引)。通常,y index=1, x index=0在这种情况下使用它是一种很好的做法。

还要注意,您不需要%在键值列表中相邻的键之间进行拖尾(尽管它们不会造成伤害)。

相关内容