我希望生成下图:
到目前为止我已经做到了:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\begin{tikzpicture}[transition/.style = {rectangle,draw = black!50, fill = black!20, thick}]
\draw [>=stealth, ->](0,0) -- (0cm,-10cm) node[left, midway] {Depth};
\draw [>=stealth, ->](0cm,0cm) -- (10cm,0cm) node[above, midway] {Temperature [$^{o}$C]};
\draw[dashed] (1.99,0) -- (1.99,-10);
\draw (10,0).. controls (9.5,-2) and (8,-4) .. (7,-4) .. controls (5,-5) and (3,-7) .. (2.5,-8);
\end{tikzpicture}
\end{document}
正如您所看到的,我在生成曲线时遇到了困难。除了我选择的方法之外,似乎一定有更好的方法来生成这样的线。
此外,我不确定如何在图表中间生成矩形(当我尝试执行此操作时,矩形会出现在页面的左上角)。
此外,我如何指定节点“温度”位于数字上方?请注意,我已缩放图表,以便图表上的 20 等于 10 厘米,因此我可以使用它来分隔显示的值。
答案1
您要绘制的曲线是一条贝塞尔曲线。
贝塞尔曲线的端点和相应控制点之间的线与端点处的曲线相切。因此,您的控制点必须具有x
与相应端点相同的坐标。
端点和相应控制点之间的线段长度决定了曲线填充“跟随”控制段的“长度”。由于您的曲线是对称的,因此控制段的长度应相等。除此之外,我已经通过y
以下实验确定了控制点的位置。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\begin{tikzpicture}
[
x=2mm,y=7mm,
transition/.style = {rectangle,draw = black!50, fill = black!20,thick},
]
\draw [>=stealth, ->](0,0) -- (0,-10) node[left, midway] {Depth};
\draw [>=stealth, ->](0,0) -- (42,0) node[above=7mm, midway] {Temperature [$^{o}$C]};
\foreach \x in {0,4,10,20} { \draw(\x,-2mm)--(\x,2mm) node[above]{\x};}
\draw[transition] (0,-6) rectangle (40,-2);
\draw[thick] (0,-4) -- (41,-4) node[anchor=west]{Thermocline};
\draw[dashed] (4,0) -- (4,-10);
\draw (4,-10) .. controls (4,-4) and (18,-4) .. (18,0);
\end{tikzpicture}
代码的其余部分应该是不言自明的。与原始代码相比,唯一的重大变化是我设置了坐标系xy
,因此使用的单位可以是实际的物理单位。(好吧,我不知道深度单位。)