我刚刚开始使用pgfplots
,并取得了不错的成果,但是在使用 LaTeX 完成这个时遇到了困难:
曲线本身没有问题,但多个 x 轴(我不需要顶部的,只需要中间和底部的)以及特别是图中间的“68.2%”不起作用。
以下是我目前得到的信息:
\pgfmathdeclarefunction{gauss}{2}{%
\pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}
\begin{tikzpicture}
\begin{axis}[
hide y axis, tick align=outside,
domain=-3:3, samples=50,
axis lines*=left, xlabel=$IQ-Werte$, ylabel=$~$,
height=5cm, width=13cm,
xtick={-2,-1,0,1,2}, ytick=\empty,
xticklabels={%
$70$,
$85$,
$100$,
$115$,
$130$}
]
\addplot [thick,black!50!black] {gauss(0,1)};
\addplot [fill=black!10, domain=-1:1] {gauss(0,1)} \closedcycle;
\end{axis}
\end{tikzpicture}
答案1
简短回答:看看Christian 对这个问题的回答:关于同一图表上有多个 y 轴并适应。
较长的答案:请记住,pgfplotsaxis
环境只是一种特殊类型的tikz
节点。它具有特殊的坐标系,其中一种用于在绘图上绘图的坐标系称为axis cs
。使用此坐标系,您可以将 TikZ 绘图命令放置在绘图窗口的任何部分。
您可以通过创建第二个轴环境来实现第二个 x 轴,其规格相同,但没有绘制实际函数,并进行适当偏移。如果绘制了函数,它将与第一个轴重叠,但如果没有函数,您看到的只是轴。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{icomma}
\begin{document}
\pgfmathdeclarefunction{gauss}{2}{%
\pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}
\begin{tikzpicture}
% options common to all axes here
\pgfplotsset{
axis x line*=middle,
hide y axis,
tick align=outside,
ytick=\empty,
xmin=-3,xmax=3,
width=13cm,height=7cm,
xtick={-2,-1,0,1,2},
}
% main plot
\begin{axis}[
samples=50,
xlabel={IQ-Werte},
domain=-3:3,
xticklabels={%
$70$,
$85$,
$100$,
$115$,
$130$}
]
\addplot [thick,fill=blue!10,domain=-3.1:3.1] {gauss(0,1)} \closedcycle;
\addplot [fill=blue!20, domain=-1:1] {gauss(0,1)} \closedcycle;
\draw[thick,arrows={<->}] (axis cs:-1,0.125) -- (axis cs:1,0.125)
node[pos=0.5,above] {$68,2\%$};
\end{axis}
% extra x axis
\begin{axis}[yshift=-1.5cm,
xlabel={Prozentr\"ange},
xticklabels={{$2,3$}, {$15,9$}, {$50$}, {$84,1$}, {$97,7$}}
]
\addplot[draw=none]{1};
\end{axis}
\end{tikzpicture}
\end{document}
笔记:
- 这
icomma
包允许使用逗号分隔符,就像您以前使用的那样。您可能使用其他包来实现这一点。 - 您使用了
$IQ-Werte$
x 轴标签,但这会在数学模式下设置文本。这意味着字体形状会变成数学斜体,没有连字符,连字符会变成减号。您可能只想要纯文本。\textit{IQ-Werte}
如果您想要斜体,请使用。 - 我需要进行一次破解,以确保第二个绘制的刻度
axis
被注意到:我绘制了一个常数函数,并用键使其不可见draw=none
。 - @maetra 注意到,早期版本在轴和第一个图之间有一些空白。我通过将其设为 来解决这个问题
\closedcycle
,然后稍微扩展域,这样产生的垂直边缘就会被窗口剪掉xmin:xmax
。