代码

代码

在此处输入图片描述

我知道tikz它可以用来生成图表,我也熟悉了生成轴和添加坐标的基础知识,但我不知道如何得到这样的图形,即使它本质上只是一堆线。有人能给我建议吗?或者我应该使用其他程序来绘制这样的图表。

答案1

以下代码应该可以帮助您入门。由于我假设您是 tikz 初学者,因此我将在代码后提供一些基本解释:

代码

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}

\begin{document}
\begin{tikzpicture}
\node (I)    at ( 4,0)   {I};
\node (II)   at (-4,0)   {II};
\node (III)  at (0, 2.5) {III};
\node (IV)   at (0,-2.5) {IV};

\path  % Four corners of left diamond
  (II) +(90:4)  coordinate[label=90:$i^+$]  (IItop)
       +(-90:4) coordinate[label=-90:$i^-$] (IIbot)
       +(0:4)   coordinate                  (IIright)
       +(180:4) coordinate[label=180:$i^0$] (IIleft)
       ;
\draw (IIleft) -- 
          node[midway, above left]    {$\cal{J}^+$}
          node[midway, below, sloped] {$\bar{u}=\infty$}
      (IItop) --
          node[midway, below, sloped] {$\bar{u}=0$}
      (IIright) -- 
          node[midway, below, sloped] {$\bar{u}=0$}
      (IIbot) --
          node[midway, above, sloped] {$\bar{v}=-\infty$}
          node[midway, below left]    {$\cal{J}^-$}    
      (IIleft) -- cycle;

\path % Four conners of the right diamond (no labels this time)
   (I) +(90:4)  coordinate (Itop)
       +(-90:4) coordinate (Ibot)
       +(180:4) coordinate (Ileft)
       +(0:4)   coordinate (Iright)
       ;
% No text this time in the next diagram
\draw  (Ileft) -- (Itop) -- (Iright) -- (Ibot) -- (Ileft) -- cycle;

% Squiggly lines
\draw[decorate,decoration=zigzag] (IItop) -- (Itop)
      node[midway, above, inner sep=2mm] {$r=0$};

\draw[decorate,decoration=zigzag] (IIbot) -- (Ibot)
      node[midway, below, inner sep=2mm] {$r=0$};

\end{tikzpicture}
\end{document}

结果

结果

解释

Tikz 的语法非常强大且灵活。你可以用不同的方式指定绘图的坐标。

  • 第一种也是最直接的方法是使用标准笛卡尔坐标,例如(4,0)。默认单位是cm
  • 您还可以指定极坐标,例如(90:4)。第一个数字是角度,第二个数字是半径(默认以厘米为单位)。
  • 您可以为坐标命名,并使用它的名称,例如(I)(II)
  • 构建路径时,您可以将坐标指定为绝对坐标(所有坐标均相对于位于 的原点进行测量(0,0))或相对坐标(所有坐标均相对于某个给定原点进行测量)。对于相对语法,请在坐标前加上+。要给出原点,请指定第一个坐标,不带+

有了上面的内容,您现在可以阅读前几行。每个初始命令在给定的绝对笛卡尔坐标处\node定义一个命名坐标,名称为(I),等等。它们还会在这些坐标处放置一些文本(括号,等之间的文本)。(II)(4,0)(-4,0){I}{II}

下一个\path命令执行了很多操作。它首先将坐标设置(II)为其余相对坐标的原点。然后,使用相对于的极坐标(II),定义一些其他命名坐标,以直角围绕(II)和距离4单位。我使用另一种语法将这些坐标命名为(IItop)(IIbot),该语法将关键字用作coordinate路径的一部分。同时,我使用选项在这些坐标上排版了一些标签label

一旦以这种方式定义了菱形的四个角,就用线将它们连接起来,并在这些线的上方和下方添加一些标签。这是在下一个\draw命令中完成的。--两个坐标之间的指定应绘制一条线。在每个段的最终坐标之前,我使用关键字node在这些线的上方和下方放置文本。

对于右边的菱形,我删除了所有标签,只留下了绘图命令。放置标签的方式应该与第一个菱形几乎相同,这留作练习。

最后,添加波浪线,连接菱形顶部和底部的相应坐标。我再次使用 在node[midway]这些线条上方(或下方)放置一些文本。

希望这有助于您入门,或者至少激励您阅读手册并尝试 Tikz。

更新

OP 在评论中请求:

Ibot从您调用的到 顶部III标记的波浪线中心绘制一条曲线。这可以通过连接和r=0的线的路径大约 0.75 倍。IIrightItop

这让我有机会介绍其他有用的 Tikz 功能,包括计算坐标。为了使用此功能,您需要将其添加calc到参数列表中\usetikzlibrary。在本例中:

\usetikzlibrary{decorations.pathmorphing,calc}

借助此库,您可以在任何需要坐标的地方使用数学表达式(括在内$),其中涉及加法或其他坐标运算。它还定义了一种称为“插值”的特殊运算,其语法如下: ($(A)!x!(B)$),其中AB是坐标(笛卡尔坐标、极坐标、命名坐标……),x是 0 到 1 之间的数字。结果坐标是位于直线 AB 上的一个点,与成比例x(0 表示 A,1 表示 B)。事实上,x 可以是负数或大于 1,允许外推

使用此功能,“顶部波浪线中间”的点将是:($(IItop)!.5!(Itop)$),因此下一个命令将绘制一条连接两个所需点的直线:

\draw[->]  % The -> adds an arrow tip
    (Ibot) -- ($(IItop)!.5!(Itop)$);

但是原作者要求的是曲线,而不是直线。要得到曲线,最简单的方法(tikz 也有几种方法)是用 运算符替换--to这个没有选项的运算符画的是直线,和 一样--,但是你可以给它选项弯曲線。

例如,您可以指定线从 出发的角度Ibot,以及它在终点进入的角度。这样就产生了一条曲线。但是,这些参数本身并不定义一条曲线,而是一组曲线。您可以使用参数 微调获得的曲线looseness,默认情况下该参数为 1。增加此参数会使曲线“更弯曲”,而减少此参数会使曲线更接近原始直线。

通过反复试验,我发现了以下值:

\draw[->] 
    (Ibot) to[out=70, in=-15, looseness=1.5] ($(IItop)!.5!(Itop)$);

结果是:

在此处输入图片描述

答案2

一种可能性是(杰利迪亚兹在他的评论中提到)是使用坐标来指定点,然后绘制连接相应坐标的线;装饰库可用于绘制之字形线。起点(玩我的代码并阅读 TikZ 文档,您可以添加缺少的元素并自定义结果):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,decorations.pathmorphing}

\begin{document}

\begin{tikzpicture}[node distance=2cm]
% coordinates for the nodes
\coordinate (A) at (0,0);
\coordinate[above right = of A,label=$i^{\ast}$] (B);
\coordinate[right = 3cm of B,label=$i^{\ast}$] (C);
\coordinate[below right = of C] (D);
\coordinate[below right = of A] (E);
\coordinate[right = 3cm of E] (F);
% some straight lines uning the coordinates and adding labels 
\draw (A) -- node[above] {$f^{\ast}$} (B) -- node[below,sloped,pos=0.25] {$\bar{v}=0$} node[below,sloped,pos=0.75] {$H^{-}$}
(F) -- (D);
\draw (A) -- (E) -- (C) -- (D);
% some decorated lines uning the coordinates and adding labels 
\draw[decorate,decoration=zigzag] (B) -- node[above] {$r=0$} (C);
\draw[decorate,decoration=zigzag] (E) -- node[below] {$r=0$} (F);
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

您有不同的可能性。您可以使用 tikz 的一些基本命令尝试一下。我更新了第一个代码。最终结果并不完整,但自己完成它是一个很好的练习。

解释

JLDIAZ 的回答中有很多很好的解释。我尝试添加一些解释来理解代码之间的区别。

在绘制某些内容之前,我想知道是否需要调整图片的大小。如果我需要缩放图片,scale我更愿意避免这样做。positioning library

\draw是 的简写\path[draw]。可以定义path来绘制此路径,并定义 来同时绘制一些坐标和节点。

使用下一个代码,我可以使用,但使用定义一些变量(如这里 4 表示 4 厘米)[scale=2]也很有趣。\myunit\pgfmathsetmacro command

那么就不可能用一条路径绘制这种图形。第一条路径以 开始 \draw (0,0),以 结束cycle;

当您添加新的坐标(相对或绝对)时,您可以添加到路径中nodes。如您所见,代码非常简单,但您需要知道为什么有时需要使用coordinate或有时nodecoordinate是一个具有一些不同参数的特殊节点。

--++(45:\myunit)在获得原点与极坐标之间的一条线后(45:\myunit),现在我可以在两点之间添加一些节点。

  • coordinate (a)指出了最后一点
  • 我在node [above]{$i^+$}最后一个点上方放置了一个基本节点
  • node[pos=.5, above left] {$\cal{J}^+$}将一个节点放置在由最后的点定义的线的中间上方。

最后一个有趣的可能性是在最后一条路径中使用

  • `\draw ... 节点[上方=6pt] {$r=0$} 节点[下方=1 cm] {III}``

可以将节点放置在您想要的位置,例如[below=1 cm]

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}

\begin{document}

\begin{tikzpicture}%[scale=2]
\pgfmathsetmacro\myunit{4} 
 \draw     (0,0)            node [left] {$i^0$} 
       --++(45:\myunit)     coordinate (a)
                            node[pos=.5, above left]    {$\cal{J}^+$}
                            node[pos=.5, below, sloped] {$\bar{u}=\infty$}    
                            node [above]{$i^+$}
       --++(-45:2*\myunit)  node[pos=.25, below, sloped] {$\bar{u}=0$} 
                            coordinate (d)    
                            node [below]{$i^-$}
       --++(45:\myunit)     node [right]{$i^0$}
       --++(135:\myunit)    coordinate (b)    
                            node [above]{$i^+$}
       --++(-135:2*\myunit) coordinate (c)    
                            node [below]{$i^-$}
       --cycle;

 \draw [decorate, decoration=zigzag] (a) -- node[above=6pt] {$r=0$}
                                            node[below=1 cm] {III}
                                            (b) 

                                     (c) -- (d);

\end{tikzpicture}
\end{document} 

在此处输入图片描述

相关内容