1.概述

在本教程中,我们将讨论如何使用乳胶绘制图形。

我们首先首先列出我们可以用于图形的主要乳胶软件包,并表达了他们的特殊优势。

然后,我们将研究用这些包绘制的图表的一些示例,以及它们的变化。

在本教程结束时,我们将能够在乳胶文档中实现图形。

2.在图表上短暂回顾

2.1。图表的组件及其代表

一种图形g(v,e)包括一套V.顶点和一套E.边缘。边缘可以是指示或无向,并且通常连接两个顶点,不一定是不同的。为了超图,边缘也可以连接两个以上的边,但我们不会在这里对待它们。

顶点的标准表示由圆圈的图像组成:

QuickLatex.com呈现

如果顶点具有标签,则在圆圈内键入,如上面示例中的数字1的情况。我们还可以代表多个顶点,通过在图像中的任何位置以非重叠的方式置于非重叠的方式:

QuickLatex.com呈现

边缘的标准表示对应于针对有关边缘的无向边的行或箭头的行:

QuickLatex.com呈现

2.2。图的典型表示

因此,表示图形的图像包括在空场和连接它们的一组线或箭头上的一组圆圈。此外,如果图表是一个加权图,我们可以在边缘上指示重量作为边缘的标签:

QuickLatex.com呈现

最后,如果图表有循环,我们可以将它们表示为将顶点连接到自身的边缘:

QuickLatex.com呈现

这些是我们需要代表任何形式的元素复杂。在下一节中,我们将首先研究用于绘制图形的相关包,然后查看代码中的图形实现的一些示例。

2.3。图的替代表示

但是,我们也应该说明图形表示不是直观地描述图形的唯一方法。其他陈述,特别是边缘列表邻接清单, 或者邻接矩阵,在实践中也普遍存在。

在某些情况下,对人类读者可能比图形的绘制图像更提供信息。例如,具有26顶点的定向图v = \ {a,b,...,x,y,z}只有两个边缘e = \ {(x,y),(x,z)\},用正式表示法表示非常简单:

g(v,\ {(x,y),(x,z)\})

然而,它的完整图形表示将占据巨大的空间,并且大多是无关的。这是因为,如果我们使用的图形拥有超过少数节点或边缘,那么它就会通过观察其图像来了解其结构挑战。一些广泛的图表,如表示互联网节点的图表,拥有图形表示,虽然非常漂亮然而,对人来说毫无意义。

为此原因,如果我们的图表持有多个顶点或边缘,我们应该避免绘制它。相反,我们应该使用其他类型的形式表示,例如邻接矩阵,边缘列表或邻接列表:

\ begin {matrix} \ framebox {a} \\ \ framebox {b} \\ \ vdots \\\ framebox {x} \ lightarrow \ fbox {y} \ fbox {z} \\ \ framebox {y} \\ \FrameBox {z} \\\结尾{matrix}

3. Tikz.

我们现在可以讨论我们可以用来绘制乳胶图形的包。通常用于绘制的最常见的乳胶包装是Tikz.,这是一层PGF.这简化了其语法。TIKZ是一个强大的包,附带了一个专用于特定任务的图书馆,例如:

而且,与我们的目的相关,它包含一个graphDrawing.我们可以用于自动图形图书馆。TIKZ是我们用于绘制图形的标准包,我们将致力于大多数编码示例。

3.1。基本图形和节点

TIKZ的图纸包括在内tikzpicture.环境。我们能画的最简单的图形是由一个带标签的顶点组成的,用一个包含变量的圆表示:

\documentclass{article} \usepackage{tikz} \begin{document} \begin{tikzpicture}[main/.]{$x_1$}}; / /绘制节点\结束{tikzpicture} \结束{document}

QuickLatex.com呈现

这个单词主要的这里是指我们在引入时定义的风格tikzpicture.环境。在这种情况下,我们使用它来告诉编译器为节点绘制圆圈的形状。

上面代码中最重要的命令是\节点。它的语法是:

\ node [参数](nodeid){nodelabel};

我们可以反复使用此命令以向图形添加更多顶点:

\ node [main](2)[右侧= 1] {$ x_2 $};\ node [main](3)[右侧= 1] {$ x_3 $};\ node [main](4)[右侧= 3] {$ x_4 $};\ node [main](5)[右侧= 4] {$ x_5 $};\ node [main](6)[右侧= 4] {$ x_6 $};

QuickLatex.com呈现

请注意第二对方括号之间的术语是如何让我们定义节点相对于其他节点的位置的。我们可以通过使用关键字来做到这一点正确的剩下以上以下,后跟空白,然后是关键字以及它们所指的节点的标签。如果我们稍后需要重新排列图片上的图表,这是特别有用的。事实上,通过使用与绝对坐标相反的相对位置,我们可以在周围移动一个锚点以移动所有其他节点。

3.2。添加边缘

我们还可以使用使用的边缘\画命令:

\绘制[参数](从哪里) - (牵引);

例如,如果我们想要绘制与节点(2)和(4)之间的无向边缘对应的行,我们可以写入:

\绘制(2) - (4);

QuickLatex.com呈现

如果是,我们想为定向边缘添加箭头,我们可以给出参数- >到了\画命令:

\绘制[ - >](1) - (2);

QuickLatex.com呈现

3.3。距离和宽度

我们还可以注意到这些线路似乎太薄,并且难以区分指向和无向边缘。通过传递参数,我们可以使图形更可读厚的到了tikzpicture.环境,在介绍时:

\ begin {tikzpicture} [厚,main / .style = {draw,circle}] ... \结束{tikzpicture}

QuickLatex.com呈现

如果顶点彼此看起来太接近,我们也可以指定参数节点距离到了tikzpicture.环境进一步传播它们:

\ begin {tikzpicture} [节点距离= {15mm},厚,main / .style = {draw,circle}] ... \结束{tikzpicture}

QuickLatex.com呈现

3.4。更具挑战的边缘

我们可能还希望与某些节点连接,直接路径与其他边距或节点相交。假设我们尝试用直接路径连接节点(1)和(5):

QuickLatex.com呈现

它看起来并不好。相反,我们希望从图中循环循环,从外部和上方节点2,然后下降回图。幸运的是,我们可以通过指定参数来做到这一点松弛声明了一行的初始点后。为了更好地澄清我们希望优势的位置,我们还指定了角度出去分别表明的角度外出和凝固边缘

\绘制(1)至[OUT = 135,IN = 90,松散度= 1.5](5);

QuickLatex.com呈现

3.5。循环

我们可以使用相同的技术绘制循环在图表中,通过指示与松散线的起始和结束点相同的节点:

\绘制(1)至[OUT = 180,IN = 270,松散= 5](1);

QuickLatex.com呈现

3.6。绘制加权边缘

如果我们的图表是加权图,我们可以将加权边缘添加为幻像节点\画命令:

\绘制[ - >](6) - 节点[Midway,右边,倾斜,POS = 1] {+1}(4);

QuickLatex.com呈现

使用此命令,我们在顶点(6)和(4)之间的一个不可见节点,然后在边缘的中间点的右上角添加。标签{+1}表示图表的权重。参数倾斜p分别表示我们希望重量与边缘正交,并沿边缘的一定量移位。根据我们的图像的大小,我们可以通过试验和错误确定正确的金额。

3.7。完整的图形

最后,我们可以重复上面的所有指令填充图形,并使用我们所需的所有边缘填充图形:

\ DocumentClass {Stical} \ usepackage {tikz} \ begin {document} \ begin {tikzpicture} [节点距离= {15mm},厚,main / .style = {draw,circle}] \ node [main](1){$ x_1 $};\ node [main](2)[右侧= 1] {$ x_2 $};\ node [main](3)[右侧= 1] {$ x_3 $};\ node [main](4)[右侧= 3] {$ x_4 $};\ node [main](5)[右侧= 4] {$ x_5 $};\ node [main](6)[右侧= 4] {$ x_6 $};\绘制[ - >](1) - (2);\绘制[ - >](1) - (3);\绘制(1)至[OUT = 135,IN = 90,松散度= 1.5](5);\绘制(1)至[OUT = 180,IN = 270,松散= 5](1); \draw (2) -- (4); \draw (3) -- (4); \draw (5) -- (4); \draw[->] (5) to [out=315, in=315, looseness=2.5] (3); \draw[->] (6) -- node[midway, above right, sloped, pos=1] {+1} (4); \end{tikzpicture} \end{document}

QuickLatex.com呈现

4. NeuralNetwork.

用于生成图形的另一个有用的包神经网络。此套餐,顾名思义,令人难以易于借助绘制A的架构神经网络,特别是前馈神经网络

该包装简化了层的构造及其操纵。它通过缩短单层的所有命令到一行来实现

其主要优势在于迅速描述一个只有几行代码的完整图形。相反,其主要缺点在于图形的个性特征的稀缺可定制性。

4.1。包装的基础知识

在Latex包NeuralNetwork中,我们在具有相同名称的环境中定义图形:

\ begin {neuralnetwork} ... \结束{neuralnetwork}

在此环境中,我们可以通过使用它添加图层\ inputLayer.\ HiddenLayer., 和\ OutputLayer.命令分别是我们是否参考第一个,或者是神经网络的最后一层。语法类似于所有三个命令:

\ inputLayer [count = howManynode,bias = traworfalse,nodeclass = {classofnode}] {}

参数数数指定层内节点数。术语“偏见”则表示是否偏见对于该层,应将其计为单独的元素。在这种情况下,当建立链路时,此偏置不会连接到前一层。最后,节点的类由其中一个预定义的类组成输入节点隐藏的节点, 或者输出节点,或者也是我们的任何自定义类别。

4.2。绘制神经网络

我们可以绘制一个简单的神经网络,包括输入中的三个特征,一个隐藏层,其中具有两个神经元和偏置术语,以及输出层中的单个神经元。这与结构紧密相似一种用于XOR分类的神经网络

\ documentClass {intrical} \ usepackage {neuralnetwork} \ begin {document} \ begin {neuralnetwork} \ infug {neuralnetwork} \ inputLayer [count = 3,bias = false] {} \ hiddenlayer [count = 2] {} \ OutputLayer [count = 1] {} \结束{neuralnetwork} \结束{document}

QuickLatex.com呈现

4.3。添加边缘和标签

我们还可以通过遵循我们想要与前面的图层连接的每层来添加每个图层之间的边缘\ linklayers.命令:

... \ InputLayer [count = 3,bias = false] {} \ linklayers \ hiddenlayer [count = 2] {} \ linklayers \ OutputLayer [count = 1] {} ...

QuickLatex.com呈现

注意黄色节点如何指示中间层中的偏置项,未连接到输入层。我们还可以向节点添加标签,但这有点棘手。这样做的方法是通过定义新的乳胶命令,并将其传递为参数文本到一层:

... \ newcommand {\ x} [2] {$ x_#2 $} \ inputLayer [count = 3,bias = false,text = \ x] ...

QuickLatex.com呈现

我们还可以通过创建适当的命令来遵循与隐藏图层和输出层的相同标准:

... \ newcommand {\ h} [2] {$ h_#2 $} \ newcommand {\ y} [2] {$ y_#2 $} ... \ hiddenlayer [count = 2,text = \ h]{} \ linkLayers \ OutputLayer [count = 1,text = \ y] {} \ linklayers ...

QuickLatex.com呈现

隐藏层中的偏置项自动获取索引H_0.,在文献中常见,而无需指定任何特定的指示。

4.4。重量

我们还可以使用如下公式为边添加权重。我们必须首先定义一个新的命令,然后将它分配给链接的默认文本:

\ newcommand {\ w} [4] {$ w _ {#2,#4} $} \ setdefaultlinklabel {\ w}

QuickLatex.com呈现

其中,#1表示原点层,#2表示原点节点,#3和#4分别表示目标层和目标节点。注意,虽然隐藏层的权值看起来正常,但前一层中的一些权值却缺失了。

这是因为它们会被其他一些权重自动重写,因此我们只看到其中一些。解决此问题的唯一方法是单独定义所有链接,然后给出适当的标签。我们可以使用它来完成此操作\关联命令,而不是\ linklayers.

... \ InputLayer [count = 3,bias = false,text = \ x] {} \ hiddenlayer [count = 2,text = \ h] {} \ link [style = {},labelpos = rest start,从图层开始= 0,从节点= 1,到图层= 1,到节点= 1] ...

QuickLatex.com呈现

参数标签是我们用于转移到原产地的节点的那个。在这种情况下,边缘假设标签。反过来,这避免了边缘标签之间的重叠。

4.5。完成触摸

然后我们可以用两个嵌套重复此操作\ foreach.循环,这将让我们将所有标签放在正确的可读位置:

\ foreach \ n在{1,2} {1,2} {\ link [style = {},labelpos = rest,从tillay = 0,从node = n,to taylay = 1,to node = \ m]}}}

QuickLatex.com呈现

网络现在完成。我们可以使用此完整代码将其复制它在Latex编辑器中:

\ DocumentClass {Stical} \ usepackage {neuralnetwork} \ begin {document} \ begin {neuralnetwork} \ newcommand {\ newcommand {\ x} [2] {$ x_#2 $} \ newcommand {\ y} [2] {$ y_#2$} \ newcommand {\ h} [2] {$ h_#2 $} \ newcommand {\ w} [4] {$ w _ {#2,#4} $} \ setdefaultlinklabel {\ w} \ inputLayer [count =3,bias = false,text = \ x] \ hiddenlayer [count = 2,text = \ h] \ foreach \ n在{1,2} {\中{\链接[style = {},labelpos = rest,从tillay = 0,从节点= \ n,to taylay = 1,到节点= \ m]}} \ OutputLayer [count = 1,text = \ y] \ linkLayers\结束{neuralnetwork} \结束{document}

5.通过扩展转换为乳胶

还有另一种选择提到它与LaTeX包的自动转换为在其他图形编辑器中创建的图形的自动转换,而不是那么多。如果我们用于在其他编程语言中绘制图表,这是特别方便的,我们仍然学习如何在乳胶中绘制图形。

实际上,图书馆或扩展为自动转换成另一个编辑器的图形输出的乳胶代码:

  • 在Python中,我们可以转换使用的图形matplotlib.谢谢乳胶,感谢图书馆Tikzplotlib.
  • 在MATLAB中,我们可以使用脚本matlab2tikz.执行类似的操作
  • 在Blender 2.4中,我们可以使用Blend2tikz.将搅拌机曲线导出到乳胶代码中

六,结论

在本文中,我们研究了如何使用乳胶绘制图表。

2评论
最老的
最新
内联反馈
查看所有评论
新浪
新浪
8天前

哇这很棒。非常感谢。

吉米布鲁诺
吉米布鲁诺
3天前

非常有帮助。谢谢!

评论在本文上关闭!