在 Jake 的帮助下,我能够创建具有可变高度的条形图(条形之间的空间、图的高度和宽度)。有些条形图有单个非常长的yticklabel
s,需要换行。为了防止打印yticklabel
s 相互重叠,我必须增加“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
在这种情况下使用它是一种很好的做法。
还要注意,您不需要%
在键值列表中相邻的键之间进行拖尾(尽管它们不会造成伤害)。