所以……我用 paint(!) 制作了这个图表……看起来很糟糕。我曾使用 tikz 创建过类似的图表,但这个似乎更难。
答案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}
输出结果如下: