我正在尝试绘制一个图表来显示风速对海洋混合的影响。这是我的尝试(抱歉代码太长,我猜这可以用更优雅的方式完成,但鉴于我对 tikz 还比较陌生,这是我的最佳努力):
\documentclass[border = 0.12cm,tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing,snakes,shapes}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[x = 4in, y = 2in]
\fill [blue!20]
(0,0) -- (0.75,0) -- (0.75,0.5)
decorate [decoration={snake, segment length = 1cm, amplitude = 0.125cm}]
{ -- (0,0.5) } -- cycle;
\foreach \y in {-0.1,-0.2,-0.3,-0.4,-0.5}{
\draw[blue!20,line width = 1.5pt,dashed] (0,\y) -- (0.75,\y);
}
% arrow for wind
\draw[->, >=latex, gray!20!white, line width = 3pt] (0.08,0.57) -- (0.48,0.57) ;
% draw eddies
\foreach \x in {0.04,0.19,0.3,0.38,0.65}
\draw [>=stealth,->] (\x,0.05) arc (280:0:.1cm) -- +(283:0.05cm);
\foreach \x in {0.09,0.17,0.25,0.35,0.45,0.55}
\draw [>=stealth,->] (\x,0.1) arc (280:0:.1cm) -- +(283:0.05cm);
\foreach \x in {0.03,0.19,0.27,0.338,0.42,0.51,0.6,0.69}
\draw [>=stealth,->] (\x,0.2) arc (280:0:.1cm) -- +(283:0.05cm);
\foreach \x in {0.08,0.16,0.35,0.39,0.45,0.55,0.65}
\draw [>=stealth,->] (\x,0.3) arc (280:0:.1cm) -- +(283:0.05cm);
\foreach \x in {0.03,0.1,0.187,0.3,0.46,0.51,0.55}
\draw [>=stealth,->] (\x,0.4) arc (280:0:.1cm) -- +(283:0.05cm);
\foreach \x in {0.405,0.599}
\draw [>=stealth,->] (\x,0.42) arc (280:0:.1cm) -- +(283:0.05cm);
\draw [>=stealth,->] (0.26,0.31) arc (280:0:.2cm) -- +(283:0.05cm);
\draw [>=stealth,->] (0.1,0.2) arc (160:0:.2cm) -- +(283:0.05cm);
\draw [>=stealth,->] (0.6,0.1) arc (180:0:.2cm) -- +(283:0.05cm);
\draw [>=stealth,->] (0.35,0.4) arc (280:0:.2cm) -- +(283:0.01cm);
\draw [>=stealth,->] (0.5,0.05) arc (283:0:.2cm) -- +(280:0.01cm);
\end{tikzpicture}
\end{document}
它说明了风是如何导致上层海洋混合的。我的问题是,有人能建议一种方法让这个图表看起来更专业,或者“更好看”吗?我希望将它纳入科学评论中,目前它看起来并不那么令人印象深刻。任何建议都将不胜感激。
答案1
由于我并不完全确定您到底需要展示什么,或者底层科学到底是什么,因此很难对图表进行任何重大的变革。不过,这里有一些暂定的建议:
- 将风向箭头颜色调深,以便将其与显示涡流的箭头联系起来,并确保其经得起打印、复印等。浅灰色对于风向来说看起来不错,但无法经受住机构复制过程的严格考验。(至少,它无法在这里经受住考验——你的机构可能装备更好,但如果你的报告可能在其他地方被阅读,你就不能指望这一点了。)
- 也许可以使用阴影来传达海洋深度的增加。
- 用于
pics
简化漩涡的产生(正如 John Kormylo 的评论所建议的那样)。 - 稍微调整虚线,使它们不那么规则,更细但更长,并与现在更深的海洋颜色更好地融合。
结果是这样的:
\documentclass[border = 0.12cm,tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
[
x = 100mm,% better to stick to either imperial or metric measurements since it makes it easier to keep things consistent [translation: I find it hard to think in both at the same time and fairly hard to think in imperial for lengths at all!]
y = 50mm,
pics/eddy/.style n args={4}{%
code={
\path [>=stealth, ->, draw=black, pic actions] (0,0) arc (#1:0:#2) -- +(#3:#4);
}
},
]
\begin{scope}% eliminate squared off part of ocean at left, also use a shading to convey the idea of ocean depth
\clip (0,-.575) -- (0.75,-.575) -- (0.75,0.525) -- (0,.525) -- cycle;
\path [bottom color=blue!80!green!15!black, top color=blue!20!green!20, middle color=blue!80!green]
(-.05,-.575) -- (0.8,-.575) -- (0.8,0.5)
decorate [decoration={snake, segment length = 1cm, amplitude = 0.125cm}]
{ -- (-.05,0.5) } -- cycle;
\end{scope}
\foreach \y [count=\yno] in {-0.1,-0.15,...,-0.55}{% do you need these at all? I'm not clear what they are meant to convey exactly
\draw[blue!20, opacity=.65, line width = .5pt, dashed, dash phase=2*\yno mm, dash pattern=on 3.5mm off 1.25mm] (0,\y) -- (0.75,\y);
}
% arrow for wind
\draw[->, >=latex, draw=darkgray, line width=3pt] (0.08,0.57) -- (0.48,0.57) ;% make this darker - if people print or photocopy your report, you don't want the arrow to disappear
% draw eddies
\foreach \i/\j/\k/\l/\m/\n in {%
0.04/0.05/280/1mm/283/.5mm, 0.19, 0.3, 0.38, 0.65,
0.09/0.1/280/1mm/283/.5mm, 0.17, 0.25, 0.35, 0.45, 0.55,
0.03/.2/280/1mm/283/.5mm, 0.19, 0.27, 0.338, 0.42, 0.51, 0.6, 0.69,
0.08/.3/280/1mm/283/.5mm, 0.16, 0.35, 0.39, 0.45, 0.55, 0.65,
0.03/.4/280/1mm/283/.5mm, 0.1, 0.187, 0.3, 0.46, 0.51, 0.55,
0.405/.42/280/1mm/283/.5mm, 0.599,
0.26/0.31/280/.2cm/283/0.05cm,
0.1/0.2/160/.2cm/283/0.05cm,
0.6/0.1/180/.2cm/283/0.05cm,
0.35/0.4/280/.2cm/283/0.01cm,
0.5/0.05/283/.2cm/280/0.01cm}
{%
\ifx\j\i
\pic at (\i,\myj) {eddy={\myk}{\myl}{\mym}{\myn}};
\else
\pic at (\i,\j) {eddy={\k}{\l}{\m}{\n}};
\global\let\myj\j
\global\let\myk\k
\global\let\myl\l
\global\let\mym\m
\global\let\myn\n
\fi
}
\end{tikzpicture}
\end{document}
然后我会思考以下问题:
- 虚线是必须的吗?我不确定它们应该传达什么,但我觉得它们相当令人困惑。(意思是风直接穿过这片海洋而不是使其转向?大概不是……)既然阴影已经到位,没有箭头能建立静止吗?如果可以,你能把虚线去掉吗?
- 所有涡流箭头都以弧线的同一点结束,并从大致相同的点开始,这是否有意义?在我看来,这种力量似乎来自海洋内部,而不是风,因为大多数方向似乎都是从与风向相反的方向开始的,而且似乎没有一个方向与风向一致。也许这是有意为之,如果是这样,那显然很好。如果不是,我会重新考虑一下方向。
这可能会给你类似这样的结果:
\documentclass[border = 0.12cm,tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
[
x = 100mm,% better to stick to either imperial or metric measurements since it makes it easier to keep things consistent [translation: I find it hard to think in both at the same time and fairly hard to think in imperial for lengths at all!]
y = 50mm,
pics/eddy/.style n args={5}{%
code={
\path [>=stealth, ->, draw=black, pic actions] (0,0) arc (#1:#2:#3) -- +(#4:#5);
}
},
]
\begin{scope}% eliminate squared off part of ocean at left, also use a shading to convey the idea of ocean depth
\clip (0,-.575) -- (0.75,-.575) -- (0.75,0.525) -- (0,.525) -- cycle;
\path [bottom color=blue!80!green!15!black, top color=blue!20!green!20, middle color=blue!80!green]
(-.05,-.575) -- (0.8,-.575) -- (0.8,0.5)
decorate [decoration={snake, segment length = 1cm, amplitude = 0.125cm}]
{ -- (-.05,0.5) } -- cycle;
\end{scope}
% arrow for wind
\draw[->, >=latex, draw=darkgray, line width=3pt] (0.08,0.57) -- (0.48,0.57) ;% make this darker - if people print or photocopy your report, you don't want the arrow to disappear
% draw eddies
\foreach \i/\j/\k/\l [count=\mycount] in {%
0.04/0.05/1mm/.5mm, 0.19, 0.3, 0.38, 0.65,
0.09/0.1/1mm/.5mm, 0.17, 0.25, 0.35, 0.45, 0.55,
0.03/.2/1mm/.5mm, 0.19, 0.27, 0.338, 0.42, 0.51, 0.6, 0.69,
0.08/.3/1mm/.5mm, 0.16, 0.35, 0.39, 0.45, 0.55, 0.65,
0.03/.4/1mm/.5mm, 0.1, 0.187, 0.3, 0.46, 0.51, 0.55,
0.405/.42/1mm/.5mm, 0.599,
0.26/0.31/.2cm/0.05cm,
0.35/0.4/.2cm/0.01cm,
0.5/0.05/.2cm/0.01cm}
{%
\pgfmathsetmacro{\mymodeddy}{mod(\mycount,4)}
\ifx\j\i
\pic at (\i,\myj) {eddy={\mymodeddy*90}{\mymodeddy*90 - 280}{\myk}{\mymodeddy*90}{\myl}};
\else
\pic at (\i,\j) {eddy={\mymodeddy*90}{\mymodeddy*90 - 280}{\k}{\mymodeddy*90}{\l}};
\global\let\myj\j
\global\let\myk\k
\global\let\myl\l
\fi
}
\pic at (.1,.2) {eddy={160}{0}{2mm}{283}{.5mm}};
\pic at (.6,.1) {eddy={180}{0}{2mm}{280}{.5mm}};
\end{tikzpicture}
\end{document}
或许在顶部更明确地标明进入海洋的风也是合适的:
\documentclass[border = 0.12cm,tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
[
x = 100mm,% better to stick to either imperial or metric measurements since it makes it easier to keep things consistent [translation: I find it hard to think in both at the same time and fairly hard to think in imperial for lengths at all!]
y = 50mm,
pics/eddy/.style n args={5}{%
code={
\path [>=stealth, ->, draw=black, pic actions] (0,0) arc (#1:#2:#3) -- +(#4:#5);
}
},
]
\begin{scope}% eliminate squared off part of ocean at left, also use a shading to convey the idea of ocean depth
\clip (0,-.575) -- (0.75,-.575) -- (0.75,0.525) -- (0,.525) -- cycle;
\path [bottom color=blue!80!green!15!black, top color=blue!20!green!20, middle color=blue!80!green]
(-.05,-.575) -- (0.8,-.575) -- (0.8,0.5)
decorate [decoration={snake, segment length = 1cm, amplitude = 0.125cm}]
{ -- (-.05,0.5) } -- cycle;
\end{scope}
% arrow for wind
\draw[->, >=latex, draw=darkgray, line width=3pt] (0.08,0.57) -- (0.48,0.57) ;% make this darker - if people print or photocopy your report, you don't want the arrow to disappear
% draw eddies
\foreach \i/\j/\k/\l [count=\mycount] in {%
0.04/0.05/1mm/.5mm, 0.19, 0.3, 0.38, 0.65,
0.09/0.1/1mm/.5mm, 0.17, 0.25, 0.35, 0.45, 0.55,
0.03/.2/1mm/.5mm, 0.19, 0.27, 0.338, 0.42, 0.51, 0.6, 0.69,
0.08/.3/1mm/.5mm, 0.16, 0.35, 0.39, 0.45, 0.55, 0.65,
0.03/.4/1mm/.5mm, 0.1, 0.187, 0.3, 0.46, 0.51, 0.55,
0.405/.42/1mm/.5mm, 0.599,
0.26/0.31/.2cm/0.05cm,
0.35/0.4/.2cm/0.01cm,
0.5/0.05/.2cm/0.01cm}
{%
\pgfmathsetmacro{\mymodeddy}{mod(\mycount,4)}
\ifx\j\i
\pic at (\i,\myj) {eddy={\mymodeddy*90}{\mymodeddy*90 - 280}{\myk}{\mymodeddy*90}{\myl}};
\else
\pic at (\i,\j) {eddy={\mymodeddy*90}{\mymodeddy*90 - 280}{\k}{\mymodeddy*90}{\l}};
\global\let\myj\j
\global\let\myk\k
\global\let\myl\l
\fi
}
\pic at (.1,.2) {eddy={160}{0}{2mm}{283}{.5mm}};
\pic at (.6,.1) {eddy={180}{0}{2mm}{280}{.5mm}};
\path (-.05,.5125) -- (.8,.5125) foreach \i [count=\ino] in {.0882,.2059,...,1} { coordinate [pos=\i] (o\ino) };
\pic foreach \i in {1,...,8} at (o\i) {eddy={90}{-90}{1.5mm}{180}{.5mm}};
\end{tikzpicture}
\end{document}
更新
由于我从您的评论中看到混合逐渐减少,也许可以使用较低级别的更少和更小的箭头来传达:
\documentclass[border = 0.12cm,tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
[
x = 100mm,% better to stick to either imperial or metric measurements since it makes it easier to keep things consistent [translation: I find it hard to think in both at the same time and fairly hard to think in imperial for lengths at all!]
y = 50mm,
pics/eddy/.style n args={5}{%
code={
\path [>=stealth, ->, draw=black, pic actions] (0,0) arc (#1:#2:#3) -- +(#4:#5);
}
},
]
\begin{scope}% eliminate squared off part of ocean at left, also use a shading to convey the idea of ocean depth
\clip (0,-.575) -- (0.75,-.575) -- (0.75,0.525) -- (0,.525) -- cycle;
\path [bottom color=blue!80!green!15!black, top color=blue!20!green!20, middle color=blue!80!green]
(-.05,-.575) -- (0.8,-.575) -- (0.8,0.5)
decorate [decoration={snake, segment length = 1cm, amplitude = 0.125cm}]
{ -- (-.05,0.5) } -- cycle;
\end{scope}
% arrow for wind
\draw[->, >=latex, draw=darkgray, line width=3pt] (0.08,0.57) -- (0.48,0.57) ;% make this darker - if people print or photocopy your report, you don't want the arrow to disappear
% draw eddies
\foreach \i/\j/\k/\l [count=\mycount] in {%
.23/-.2/.5mm/.5mm, .54,
.05/-.125/.75mm/.5mm, .356, .71,
.125/-.075/1mm/.5mm, .284, .5, .675,
0.04/0.05/1mm/.5mm, 0.19, 0.3, 0.38, 0.65,
0.09/0.1/1mm/.5mm, 0.17, 0.25, 0.35, 0.45, 0.55,
0.03/.2/1mm/.5mm, 0.19, 0.27, 0.338, 0.42, 0.51, 0.6, 0.69,
0.08/.3/1mm/.5mm, 0.16, 0.35, 0.39, 0.45, 0.55, 0.65,
0.03/.4/1mm/.5mm, 0.1, 0.187, 0.3, 0.46, 0.51, 0.55,
0.405/.42/1mm/.5mm, 0.599,
0.26/0.31/.2cm/0.05cm,
0.35/0.4/.2cm/0.01cm,
0.5/0.05/.2cm/0.01cm}
{%
\pgfmathsetmacro{\mymodeddy}{mod(\mycount,4)}
\ifx\j\i
\pic at (\i,\myj) {eddy={\mymodeddy*90}{\mymodeddy*90 - 280}{\myk}{\mymodeddy*90}{\myl}};
\else
\pic at (\i,\j) {eddy={\mymodeddy*90}{\mymodeddy*90 - 280}{\k}{\mymodeddy*90}{\l}};
\global\let\myj\j
\global\let\myk\k
\global\let\myl\l
\fi
}
\pic at (.1,.2) {eddy={160}{0}{2mm}{283}{.5mm}};
\pic at (.6,.1) {eddy={180}{0}{2mm}{280}{.5mm}};
\path (-.05,.5125) -- (.8,.5125) foreach \i [count=\ino] in {.0882,.2059,...,1} { coordinate [pos=\i] (o\ino) };
\pic foreach \i in {1,...,8} at (o\i) {eddy={90}{-90}{1.5mm}{180}{.5mm}};
\end{tikzpicture}
\end{document}
答案2
我不是一名艺术家,但我有一些有趣的sin
功能应用。
\documentclass[landscape]{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,fadings}
\begin{document}
\hspace*{-9cm}\begin{tikzpicture}[scale=.25]
\begin{scope}[ultra thick,-{Stealth[length=5mm]},bend right=20]
\foreach\s in{1,...,10}{
\draw[shift={(95-\s*\s,5)}](0,5)to(10,0);}
\end{scope}
\begin{scope}[smooth,variable=\t,domain=0:100,samples=100]
\path[fill=blue!10]
(0,-5.1)--(0,0)--
plot(\t+\t*\t/2000,{sin(\t r)*(1+\t*\t/4000))})
--(110,-0)--(110,-5.1)--cycle;
\path[fill=blue!30]
(0,-5.1)--(0,0)--
plot(.4+\t+\t*\t/1600,{sin(\t r)*(1+\t*\t/4000))})
--(110,-0)--(110,-5.1)--cycle;
\path[fill=blue!50]
(0,-5.1)--(0,0)--
plot(.8+\t+\t*\t/1280,{sin(\t r)*(1+\t*\t/4000))})
--(110,-0)--(110,-5.1)--cycle;
\end{scope}
\begin{scope}
\fill[blue!60](0,-5)rectangle(110,-15.1);
\fill[blue!72](0,-15)rectangle(110,-25.1);
\fill[blue!100](0,-25)rectangle(110,-35.1);
\end{scope}
\begin{scope}[blue!50]
\fill[path fading=west](20,-5)rectangle(90.1,-35);
\fill(90,-5)rectangle(110,-35);
\end{scope}
\begin{scope}[thin,-{Stealth},start angle=90,end angle=-90]
\foreach\s in{1,...,20}{
\draw[shift={(105-\s*\s/4,-18-13*sin(8*\s r))}](0,2.4)arc[radius=2];
\draw[shift={(105-\s*\s/4,-18-13*sin(8*\s r))}](0,-2.4)arc[radius=-2];}
\end{scope}
\end{tikzpicture}
\end{document}