分段线性 Tikz 图中标签的对齐

分段线性 Tikz 图中标签的对齐

我有以下代码来绘制分段线性函数并标记它。

\begin{tikzpicture}[
  declare function={
func(\x)= (\x<=4) * (50)   +
 and (\x>=4, \x<7) * (49.999 - 2*(\x-4))     +
 and (\x>=7,  \x<=10) * (42-10*(\x-7)) ;
  }
]    \begin{axis}[ticks=none,
axis x line=middle, axis y line=middle,
ymin=20, ymax=60, ytick={}, ylabel=$x_D(t)$,
xmin=0, xmax=12, xtick={}, xlabel=$t$,
]
\addplot[blue, domain=0:10]{func(x)};
\filldraw (38,380) circle (1pt) node [right,font=\tiny] {$(t_B, x_D $)};
\filldraw (67,325) circle (1pt) node [right,font=\tiny] {$(t_C, x_D^\prime$)};
\filldraw (92,83) circle (1pt) node [right,font=\tiny] {$(t_D, 0$)};

\end{axis}
\end{tikzpicture} 

我有三个问题:

  1. 我没有得到三条漂亮的分段线性段,而是得到了前两条线之间的轻微倾斜。

  2. 坐标filldraw极难找到,我不得不反复试验——有没有办法将它们直接映射到实际的轴坐标?

  3. 最后一个标签$(t_D,0)$放在里面,几乎看不见。

在此处输入图片描述

答案1

首先,绘制分段函数时,必须绘制函数两次在角点处,因为使用了两个不同的公式。例如,您在 处绘制了图x=4,5。该图应该绘制在 处x=3.99,4.01(或者在 处绘制两次,使用不同的公式)。所以我修改了代码,使用选项手动放置样本samples at

同样,在此代码中,如果样本恰好位于 4 上,则两个公式都会执行。您可能应该将其中一个不等式更改为严格不等式(就像您对 7 所做的那样)。

此外,公式本身也存在一些连续性问题(除非是故意的)。我也纠正了这个问题。始终评估并查看角点处左公式和右公式的值是否匹配(如果您想要分段连续的功能)。

为了在角落放置标签,我使用了轴坐标系axis cs。此选项使用轴来定义坐标,而不是默认的 tikz 坐标。

注意最后一个标签消失的问题目前已通过更改ymin选项修复。可能有更好的方法。

\documentclass[]{article}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}[
  declare function={
func(\x)= (\x<=4) * (50)   +
 and (\x>=4, \x<7) * (50 - 2*(\x-4))     +
 and (\x>=7,  \x<=10) * (44-10*(\x-7)) ;
  }
]    \begin{axis}[ticks=none,
axis x line=middle, axis y line=middle,
ymin=14, ymax=60, ytick={}, ylabel=$x_D(t)$,
xmin=0, xmax=12, xtick={}, xlabel=$t$,
]
\addplot[blue, samples at ={0,1,2,3,3.99,
                           4.01, 6.99, 7.01, 10}
        ]{func(x)};
\filldraw (axis cs: 4,50) circle (1pt) node [right,font=\tiny] {$(t_B, x_D $)};
\filldraw (axis cs: 7,44) circle (1pt) node [right,font=\tiny] {$(t_C, x_D^\prime$)};
\filldraw (axis cs: 10,14) circle (1pt) node
          [above, anchor=south west, font=\tiny] {$(t_D, 0$)};

\end{axis}
\end{tikzpicture} 

\end{document}

分段连续函数标签

相关内容