有人知道如何在我的 pgfplot 的条形图之间留出一些空间吗?我想在它们之间添加一些文本。我尝试在数据中添加一个空行,但它会弄乱 yticklabels(参见所附屏幕截图)。我想避免使用符号 y 坐标,因为有很多 y 坐标(我在 MWE 中只包含了 6 个)。也许有更简单的解决方案?也许使用 groupplots 库?
任何建议都将不胜感激!✌
答案1
你可以加
{} 0 0 0 0
在数据文件中,每个“组”之间。
\RequirePackage{filecontents}
\begin{filecontents*}{Nachwuchsgewinnung.dat}
GR A B C D
Göttingen\ (n=62) 1.6129 8.0645 45.1613 45.1613
Sachsen\ (n=90) 0 13.3333 40 46.6667
Coburg\ (n=24) 4.1667 37.5 37.5 20.8333
{} 0 0 0 0
Göttingen\ (n=61) 3.2787 24.5902 37.7049 34.4262
Sachsen\ (n=89) 0 22.4719 42.6966 34.8315
Coburg\ (n=25) 8 48 16 28
\end{filecontents*}
\documentclass{standalone}
\usepackage[utf8]{inputenc}
%\usepackage{newpxtext,newpxmath}
\usepackage{pgfplots}
\pgfplotsset{%
compat=1.14,
/pgf/number format/assume math mode=true,
title style={font=\bfseries\footnotesize\sffamily},
every axis/.append style={font=\scriptsize\sffamily}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
title style={yshift=-1ex},
xbar stacked,
bar shift=0pt,
bar width=6pt,
scale only axis,
width=9.75cm,
y=1em,
xmin=0, xmax=100,
minor x tick num=1,
xtick style={black,thin},
xticklabel={\pgfmathprintnumber[precision=0]\tick\%},
ytick style={draw=none},
yticklabel style={xshift=0.5ex},
enlarge y limits={abs=10pt},
%/pgf/number format/.cd,fixed,fixed zerofill,precision=0,
%nodes near coords,
legend style={
at={(0.5,-0.25)},
anchor=north,
legend columns=-1,
draw=none,
legend cell align=left},
title=Attraktivität der Region zur Gewinnung von Jungmedizinern erhöhen durch…,
ytick=data,
y dir=reverse,
yticklabels from table={Nachwuchsgewinnung.dat}{GR}]
\addplot+[fill] table[x=A,y expr=\coordindex]{Nachwuchsgewinnung.dat};
\addplot+[fill] table[x=B,y expr=\coordindex]{Nachwuchsgewinnung.dat};
\addplot+[fill] table[x=C,y expr=\coordindex]{Nachwuchsgewinnung.dat};
\addplot+[fill] table[x=D,y expr=\coordindex]{Nachwuchsgewinnung.dat};
\legend{sehr unwichtig, eher unwichtig, eher wichtig, sehr wichtig}
\node at (50,3) {some text here};
\end{axis}
\end{tikzpicture}
\end{document}
每 n 个小节添加空格
如果您需要每三小节添加一个空格,那么您可以y expr
稍微修改一下以自动实现这一点,而无需更改输入。
为了使修改更容易,我定义了一个函数
declare function={
Y(\x)={\x+floor(\x/3)};
}
并使用
y expr=Y(\coordindex)
\RequirePackage{filecontents}
\begin{filecontents*}{Nachwuchsgewinnung.dat}
GR A B C D
Göttingen\ (n=62) 1.6129 8.0645 45.1613 45.1613
Sachsen\ (n=90) 0 13.3333 40 46.6667
Coburg\ (n=24) 4.1667 37.5 37.5 20.8333
Göttingen\ (n=61) 3.2787 24.5902 37.7049 34.4262
Sachsen\ (n=89) 0 22.4719 42.6966 34.8315
Coburg\ (n=25) 8 48 16 28
Göttingen\ (n=62) 1.6129 8.0645 45.1613 45.1613
Sachsen\ (n=90) 0 13.3333 40 46.6667
Coburg\ (n=24) 4.1667 37.5 37.5 20.8333
Göttingen\ (n=61) 3.2787 24.5902 37.7049 34.4262
Sachsen\ (n=89) 0 22.4719 42.6966 34.8315
Coburg\ (n=25) 8 48 16 28
Göttingen\ (n=62) 1.6129 8.0645 45.1613 45.1613
Sachsen\ (n=90) 0 13.3333 40 46.6667
Coburg\ (n=24) 4.1667 37.5 37.5 20.8333
Göttingen\ (n=61) 3.2787 24.5902 37.7049 34.4262
Sachsen\ (n=89) 0 22.4719 42.6966 34.8315
Coburg\ (n=25) 8 48 16 28
\end{filecontents*}
\documentclass[border=5mm]{standalone}
\usepackage[utf8]{inputenc}
%\usepackage{newpxtext,newpxmath}
\usepackage{pgfplots}
\pgfplotsset{%
compat=1.14,
/pgf/number format/assume math mode=true,
title style={font=\bfseries\footnotesize\sffamily},
every axis/.append style={font=\scriptsize\sffamily}
}
\begin{document}
\begin{tikzpicture}[
declare function={
Y(\x)={\x+floor(\x/3)};
}]
\begin{axis}[
title style={yshift=-1ex},
xbar stacked,
bar shift=0pt,
bar width=6pt,
scale only axis,
width=9.75cm,
y=1em,
xmin=0, xmax=100,
minor x tick num=1,
xtick style={black,thin},
xticklabel={\pgfmathprintnumber[precision=0]\tick\%},
ytick style={draw=none},
yticklabel style={xshift=0.5ex},
enlarge y limits={abs=10pt},
%/pgf/number format/.cd,fixed,fixed zerofill,precision=0,
%nodes near coords,
legend style={
at={(0.5,-0.25)},
anchor=north,
legend columns=-1,
draw=none,
legend cell align=left},
title=Attraktivität der Region zur Gewinnung von Jungmedizinern erhöhen durch…,
ytick=data,
y dir=reverse,clip=false,
yticklabels from table={Nachwuchsgewinnung.dat}{GR}
]
\addplot+[fill] table[x=A,y expr=Y(\coordindex)]{Nachwuchsgewinnung.dat};
\addplot+[fill] table[x=B,y expr=Y(\coordindex)]{Nachwuchsgewinnung.dat};
\addplot+[fill] table[x=C,y expr=Y(\coordindex)]{Nachwuchsgewinnung.dat};
\addplot+[fill] table[x=D,y expr=Y(\coordindex)]{Nachwuchsgewinnung.dat};
\legend{sehr unwichtig, eher unwichtig, eher wichtig, sehr wichtig}
\node at (50,3) {some text here};
\end{axis}
\end{tikzpicture}
\end{document}