实现 TikZ 标签偏移的更好方法

实现 TikZ 标签偏移的更好方法

在下图中, 划分为三个子区间的函数图 由以下 Ti 生成Z 代码,

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{figure}[h] \centering
\begin{tikzpicture}[scale=2,
    % function
    declare function={ f(\x) = pow(\x,4)/16-pow(\x,3)/4+1.1*\x+0.5; },
    % styles
    faint/.style={thin, gray},
    normal/.style={thin, black}]
% axes
\draw [thick, ->] (0, 0) -- (0, 5);
\draw [thick, ->] (0, 0) -- (4.5, 0);
\foreach \x/\xstr/\ystr in {0.6/$a = x_1$\kern 21pt/$f(a) = y_1$, 2.0/$x_2$/$y_2$, 3.3/$x_3$/$y_3$, 3.8/$\kern 19pt x_4 = b$/$f(b) = y_4$} {
    % partitions (x-axis, y-axis)
    \draw [faint] (\x, {f(\x)}) -- (\x, 0) node [normal, below, text height=8pt] {\xstr};
    \draw [faint] (\x, {f(\x)}) -- (0, {f(\x)}) node [normal, left] {\ystr};
    % points
    \fill (\x, {f(\x)}) circle (1pt);
}
% curve
\draw [thick, <->, domain=-0.5:4, samples=50] plot(\x, {f(\x)});
\end{tikzpicture}
\end{figure}

\end{document}

我使用\kern偏移标签 $a = x_1$ 和 $x_4 = b$,以便 $x$ 始终位于图形上的分区线正下方。这似乎有点不靠谱,我认为应该有更好的方法,比如我如何&align环境中插入一个以使文本与特定字符对齐。

那么还有更好的方法吗?

答案1

您也可以使用\phantom它,因为移位量不是恒定的,因此不值得自动化。但是我会使用 pgfplots。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}[declare function={f(\x)=pow(0.5*\x,4)-pow(\x,3)/4+1.1*\x+0.5;}]
\begin{axis}[
  axis lines*=middle,
  xtick={0.6,2,3.3,3.8},ytick=data,
  xticklabels={$a=x_1\phantom{a=}$,$x_2$,$x_3$,$\phantom{{}=b}x_4=b$},
  yticklabels={$f(a)=y_1$,$y_2$,$y_3$,$f(b)=y_4$},
  typeset ticklabels with strut]

\addplot[only marks,samples at={0.6,2,3.3,3.8}] {f(x)};
\addplot[thick, <->, domain=-0.2:4, samples=50] {f(x)};
\pgfplotsextra{
  \foreach\x in{0.6,2,3.3,3.8}{
    \draw[thin, gray] (\x,0) |- (0,{f(\x)});
  }
}
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容