我怎样在乳胶上创建这个图表?

我怎样在乳胶上创建这个图表?

所以……我用 paint(!) 制作了这个图表……看起来很糟糕。我曾使用 tikz 创建过类似的图表,但这个似乎更难。图1

答案1

这是一种方法。大多数部分都是简单的 TikZ 语法。此图的独特之处在于多部分节点和平滑曲线,我将在此答案中进一步解释。

对于多部分节点,我定义了一种样式mysplit,应用于我们要拆分的每个节点。这样可以避免重复,并确保绘图的一致性。第一个节点文本放置在one节点的子部分中,接下来\nodepart{<part>}的文本放置在<part>节点的子部分中。然后我们可以引用每个特定子部分的锚点(最后两个\draw命令)。

有些人.. controls ..(包括我自己)发现创建贝塞尔曲线的界面对于某些曲线来说太冗长了。在这里,我改用to路径。to路径的每个部分都采用in参数out:曲线的入角和出角。这些角度可以变化以产生不同的曲线。looseness参数(默认值为 1.0)也是可调整的。

完整代码如下:

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.multipart}
\tikzset{mysplit/.style={%
  draw,
  anchor=text,
  rectangle split,
  rectangle split horizontal,
  rectangle split parts=2,
}}

\begin{document}
\begin{tikzpicture}[align=left]
  \draw[looseness=0.7] (0.5,2.8) coordinate (OutMoney)
    to[out=-45,in=180] (3,1.5) coordinate (AtMoney)
    to[out=0,in=210] coordinate[pos=0.75] (InMoney) (6,2.8);
  \draw[dashed] (OutMoney) |- (3,0) -| (InMoney);
  \draw (AtMoney) -- (3,0) node[midway,fill=white] {At the money};
  \draw[thick] (0,3) node[below left] {Implied\\volatility} 
    |- (6,0) node[below] {Strike};
  \node[mysplit] (Out) at (-1.5,-2) {Out of the\\money\\put 
                                      \nodepart{two} 
                                     In the\\money\\call};
  \node[mysplit] (In)  at ( 4.5,-2) {In the\\money\\put 
                                      \nodepart{two} 
                                     Out of the\\money\\call};
  \draw (Out.one north) to[out=90,in=210] (1.25,1.5);
  \draw  (In.one north) to[out=90,in=-30] (4.25,1.25);
\end{tikzpicture}
\end{document}

输出结果如下:

在此处输入图片描述

相关内容