更新

更新

我正在尝试绘制一个图表来显示风速对海洋混合的影响。这是我的尝试(抱歉代码太长,我猜这可以用更优雅的方式完成,但鉴于我对 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}

相关内容