使用 tikz 绘制不连续符号

使用 tikz 绘制不连续符号

有没有一种简单的方法可以用 tikz 绘制不连续符号?

它是下图中 y 轴上显示的符号(取自 pgfplots 文档)。

我总是可以手动绘制,但这并不总是那么容易,尤其是当线条有角度时。我尝试用一​​种风格来做,但我搞不懂。

最佳情况下,我只想指定线段的起点和终点,并且符号应绘制在中心。

我的照片

更新

Jake 的解决方案很不错,但填充效果不佳。有没有办法在填充继续工作的同时绘制符号?

Leo Liu 的答案适用于填充,但每次使用时都必须调整参数。

答案1

这是一个使用该decorations 库并声明新装饰的解决方案,该装饰本质上是路径第一段中间的discontinuity一个装饰。不连续符号的长度和幅度使用标准装饰选项和来控制。zigzagsegment lengthamplitude

不连续符号

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}

\begin{document}

\pgfdeclaredecoration{discontinuity}{start}{
  \state{start}[width=0.5\pgfdecoratedinputsegmentremainingdistance-0.5\pgfdecorationsegmentlength,next state=up from center]
  {}
  \state{up from center}[width=+.5\pgfdecorationsegmentlength, next state=big down]
  {
    \pgfpathlineto{\pgfpointorigin}
    \pgfpathlineto{\pgfqpoint{.25\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
  }
  \state{big down}[next state=center finish]
  {
    \pgfpathlineto{\pgfqpoint{.25\pgfdecorationsegmentlength}{-\pgfdecorationsegmentamplitude}}
  }
  \state{center finish}[width=0.5\pgfdecoratedinputsegmentremainingdistance, next state=do nothing]{
    \pgfpathlineto{\pgfpointorigin}
    \pgfpathlineto{\pgfpointdecoratedinputsegmentlast}
  }
  \state{do nothing}[width=\pgfdecorationsegmentlength,next state=do nothing]{
    \pgfpathlineto{\pgfpointdecoratedinputsegmentlast}
  }
  \state{final}
  {
    \pgfpathlineto{\pgfpointdecoratedpathlast}
  }
}

\begin{tikzpicture}
\draw [fill=yellow,decoration={discontinuity,amplitude=1ex},decorate](0,0) -- (3,2)  --  (5,1) -- cycle;
\end{tikzpicture}
\end{document}

答案2

pgfplots轴上有不连续装饰。请参阅手册中的“4.8.11 轴不连续”。

手册中的示例:

% \usepackage{pgfplots}
\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=center,
tick align=outside,
axis y discontinuity=crunch,
ymin=95, enlargelimits=false
]
\addplot[blue,mark=none,
domain=-4:4,samples=20]
{x*x+x+104};
\end{axis}
\end{tikzpicture}

在此处输入图片描述

它是使用锯齿形装饰实现的。然后你可以自己绘制它,例如(这不是一个好的实现):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\tikzset{discont/.style={decoration={zigzag,segment length=12pt, amplitude=4pt},decorate}}
\def\discontarrow(#1)(#2)(#3)(#4);{
  \draw[discont] (#2) -- (#3);
  \draw[->] (#1) -- (#2) (#3) -- (#4);
}
\begin{document}
\begin{tikzpicture}
\discontarrow(0,0)(1,0)(1.5,0)(4,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

\documentclass{minimal}
\usepackage{pst-coil}
\begin{document}
\begin{pspicture}(4,2)
  \pszigzag[coilarm=1.5cm](0,0)(4,2)
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容