# plot

## 语法

``plot(G)``
``plot(G,LineSpec)``
``plot(___,Name,Value)``
``plot(ax,___)``
``h = plot(___)``

## 说明

``plot(G)` 绘制图 `G` 中的节点和边。`

``plot(G,LineSpec)` 设置线型、标记符号和颜色。例如，`plot(G,'-or')` 对节点使用红色圆圈，对边使用红线。`

``plot(___,Name,Value)` 使用一个或多个名称-值对组参量（采用上述语法中的任意输入参量组合）指定的其他选项。例如，`plot(G,'Layout','circle')` 绘制图形的圆环形布局，`plot(G,'XData',X,'YData',Y,'ZData',Z)` 指定图形节点的 `(X,Y,Z)` 坐标。`
``plot(ax,___)` 将图形绘制到 `ax` 指定的坐标区中，而不是当前坐标区 (`gca`) 中。选项 `ax` 可以位于上述语法中的任何输入参量组合之前。`

``h = plot(___)` 返回 `GraphPlot` 对象。使用此对象可检查和调整所绘制图的属性。`

## 示例

```n = 10; A = delsq(numgrid('L',n+2)); G = graph(A,'omitselfloops')```
```G = graph with properties: Edges: [130x2 table] Nodes: [75x0 table] ```
`plot(G)`

```G = graph(bucky); plot(G,'-.dr','NodeLabel',{})```

```G = digraph(1,2:5); G = addedge(G,2,6:15); G = addedge(G,15,16:20)```
```G = digraph with properties: Edges: [19x1 table] Nodes: [20x0 table] ```
`plot(G,'Layout','force')`

```s = [1 1 1 1 1 2 2 7 7 9 3 3 1 4 10 8 4 5 6 8]; t = [2 3 4 5 7 6 7 5 9 6 6 10 10 10 11 11 8 8 11 9]; weights = [1 1 1 1 3 3 2 4 1 6 2 8 8 9 3 2 10 12 15 16]; G = graph(s,t,weights)```
```G = graph with properties: Edges: [20x2 table] Nodes: [11x0 table] ```

```x = [0 0.5 -0.5 -0.5 0.5 0 1.5 0 2 -1.5 -2]; y = [0 0.5 0.5 -0.5 -0.5 2 0 -2 0 0 0]; z = [5 3 3 3 3 0 1 0 0 1 0]; plot(G,'XData',x,'YData',y,'ZData',z,'EdgeLabel',G.Edges.Weight)```

`view(2)`

```s = [1 1 1 1 2 2 3 4 4 5 6]; t = [2 3 4 5 3 6 6 5 7 7 7]; weights = [50 10 20 80 90 90 30 20 100 40 60]; G = graph(s,t,weights)```
```G = graph with properties: Edges: [11x2 table] Nodes: [7x0 table] ```

```LWidths = 5*G.Edges.Weight/max(G.Edges.Weight); plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',LWidths)```

```s = [1 1 1 2 2 3 3 4 4 5 6 7]; t = [2 3 4 5 6 5 7 6 7 8 8 8]; G = digraph(s,t)```
```G = digraph with properties: Edges: [12x1 table] Nodes: [8x0 table] ```
```eLabels = {'x' 'y' 'z' 'y' 'z' 'x' 'z' 'x' 'y' 'z' 'y' 'x'}; nLabels = {'{0}','{x}','{y}','{z}','{x,y}','{x,z}','{y,z}','{x,y,z}'}; plot(G,'Layout','force','EdgeLabel',eLabels,'NodeLabel',nLabels)```

```s = [1 1 1 2 2 3 3 4 5 5 6 7 7 8 8 9 10 11]; t = [2 3 10 4 12 4 5 6 6 7 9 8 10 9 11 12 11 12]; G = digraph(s,t)```
```G = digraph with properties: Edges: [18x1 table] Nodes: [12x0 table] ```
`p = plot(G)`

```p = GraphPlot with properties: NodeColor: [0 0.4470 0.7410] MarkerSize: 4 Marker: 'o' EdgeColor: [0 0.4470 0.7410] LineWidth: 0.5000 LineStyle: '-' NodeLabel: {'1' '2' '3' '4' '5' '6' '7' '8' '9' '10' '11' '12'} EdgeLabel: {} XData: [2.5000 1.5000 2.5000 2 3 2 3 3 2.5000 4 3.5000 2.5000] YData: [7 6 6 5 5 4 4 3 2 3 2 1] ZData: [0 0 0 0 0 0 0 0 0 0 0 0] Use GET to show all properties ```

```p.Marker = 's'; p.NodeColor = 'r';```

`p.MarkerSize = 7;`

`p.LineStyle = '--';`

```p.XData = [2 4 1.5 3.5 1 3 1 2.1 3 2 3.1 4]; p.YData = [3 3 3.5 3.5 4 4 2 2 2 1 1 1];```

## 输入参数

`"-"`实线

`"--"`虚线

`":"`点线

`"-."`点划线

`"o"`圆圈

`"+"`加号

`"*"`星号

`"."`

`"x"`叉号

`"_"`水平线条

`"|"`垂直线条

`"square"`方形

`"diamond"`菱形

`"^"`上三角

`"v"`下三角

`">"`右三角

`"<"`左三角

`"pentagram"`五角形

`"hexagram"`六角形

`"red"``"r"``[1 0 0]`

`"green"``"g"``[0 1 0]`

`"blue"``"b"``[0 0 1]`

`"cyan"` `"c"``[0 1 1]`

`"magenta"``"m"``[1 0 1]`

`"yellow"``"y"``[1 1 0]`

`"black"``"k"``[0 0 0]`

`"white"``"w"``[1 1 1]`

### 名称-值参数

`ArrowSize` 仅影响使用 `digraph` 创建的有向图的显示。

• `'none'` - 不绘制边。

• `'flat'` - 每条边的颜色取决于 `EdgeCData` 的值。

• 矩阵 - 每行都是一个 RGB 三元组，表示一条边的颜色。矩阵的大小为 `numedges(G)`×`3`

• RGB 三元组、十六进制颜色代码或颜色名称 - 边使用指定的颜色。

RGB 三元组和十六进制颜色代码对于指定自定义颜色非常有用。

• RGB 三元组是包含三个元素的行向量，其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 `[0,1]` 范围内，例如 ` [0.4 0.6 0.7]`

• 十六进制颜色代码是字符向量或字符串标量，以井号 (`#`) 开头，后跟三个或六个十六进制数字，范围可以是 `0``F`。这些值不区分大小写。因此，颜色代码 `"#FF8800"``"#ff8800"``"#F80"``"#f80"` 是等效的。

此外，还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
`"red"``"r"``[1 0 0]``"#FF0000"`

`"green"``"g"``[0 1 0]``"#00FF00"`

`"blue"``"b"``[0 0 1]``"#0000FF"`

`"cyan"` `"c"``[0 1 1]``"#00FFFF"`

`"magenta"``"m"``[1 0 1]``"#FF00FF"`

`"yellow"``"y"``[1 1 0]``"#FFFF00"`

`"black"``"k"``[0 0 0]``"#000000"`

`"white"``"w"``[1 1 1]``"#FFFFFF"`

以下是 MATLAB® 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。

RGB 三元组十六进制颜色代码外观
`[0 0.4470 0.7410]``"#0072BD"`

`[0.8500 0.3250 0.0980]``"#D95319"`

`[0.9290 0.6940 0.1250]``"#EDB120"`

`[0.4940 0.1840 0.5560]``"#7E2F8E"`

`[0.4660 0.6740 0.1880]``"#77AC30"`

`[0.3010 0.7450 0.9330]``"#4DBEEE"`

`[0.6350 0.0780 0.1840]``"#A2142F"`

`'auto'`（默认值）

`'circle'`

`'Center'` - 圆形布局的中心节点

`'force'`

`'Iterations'` - 力导向图布局迭代次数

`'WeightEffect'` - 边权重对布局的影响效果

`'UseGravity'` - 多分量布局的引力切换

`'XStart'` - 节点的起始 x 坐标

`'YStart'` - 节点的起始 y 坐标

`'layered'`

`'Direction'` - 层的方向

`'Sources'` - 第一层包含的节点

`'Sinks'` - 最后一层包含的节点

`'AssignLayers'` - 层分配方法

`'subspace'`

`'Dimension'` - 嵌入式子空间的维度

`'force3'`三维力导向图布局。

`'Iterations'` - 力导向图布局迭代次数

`'WeightEffect'` - 边权重对布局的影响效果

`'UseGravity'` - 多分量布局的引力切换

`'XStart'` - 节点的起始 x 坐标

`'YStart'` - 节点的起始 y 坐标

`'ZStart'` - 节点的起始 z 坐标

`'subspace3'`三维子空间嵌入式布局。

`'Dimension'` - 嵌入式子空间的维度

`'-'`实线

`'--'`虚线

`':'`点线

`'-.'`点划线

`'none'`无线条无线条

`"o"`圆圈

`"+"`加号

`"*"`星号

`"."`

`"x"`叉号

`"_"`水平线条

`"|"`垂直线条

`"square"`方形

`"diamond"`菱形

`"^"`上三角

`"v"`下三角

`">"`右三角

`"<"`左三角

`"pentagram"`五角形

`"hexagram"`六角形

`"none"`无标记不适用

• `'none'` - 不绘制节点。

• `'flat'` - 每个节点的颜色取决于 `NodeCData` 的值。

• 矩阵 - 每行都是一个 RGB 三元组，表示一个节点的颜色。矩阵的大小为 `numnodes(G)`×`3`

• RGB 三元组、十六进制颜色代码或颜色名称 - 节点使用指定的颜色。

RGB 三元组和十六进制颜色代码对于指定自定义颜色非常有用。

• RGB 三元组是包含三个元素的行向量，其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 `[0,1]` 范围内，例如 ` [0.4 0.6 0.7]`

• 十六进制颜色代码是字符向量或字符串标量，以井号 (`#`) 开头，后跟三个或六个十六进制数字，范围可以是 `0``F`。这些值不区分大小写。因此，颜色代码 `"#FF8800"``"#ff8800"``"#F80"``"#f80"` 是等效的。

此外，还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
`"red"``"r"``[1 0 0]``"#FF0000"`

`"green"``"g"``[0 1 0]``"#00FF00"`

`"blue"``"b"``[0 0 1]``"#0000FF"`

`"cyan"` `"c"``[0 1 1]``"#00FFFF"`

`"magenta"``"m"``[1 0 1]``"#FF00FF"`

`"yellow"``"y"``[1 1 0]``"#FFFF00"`

`"black"``"k"``[0 0 0]``"#000000"`

`"white"``"w"``[1 1 1]``"#FFFFFF"`

以下是 MATLAB 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。

RGB 三元组十六进制颜色代码外观
`[0 0.4470 0.7410]``"#0072BD"`

`[0.8500 0.3250 0.0980]``"#D95319"`

`[0.9290 0.6940 0.1250]``"#EDB120"`

`[0.4940 0.1840 0.5560]``"#7E2F8E"`

`[0.4660 0.6740 0.1880]``"#77AC30"`

`[0.3010 0.7450 0.9330]``"#4DBEEE"`

`[0.6350 0.0780 0.1840]``"#A2142F"`

• 对于不带名称的节点（即 `G.Nodes` 不包含 `Name` 变量），节点标签是元胞数组中包含的值 `unique(G.Edges.EndNodes)`

• 对于具有名称的节点，节点标签是 `G.Nodes.Name'`

`XData``YData` 必须同时指定，以使每个节点具有一个有效的 (x,y) 坐标。您还可以选择为三维坐标指定 `ZData`

`XData``YData` 必须同时指定，以使每个节点具有一个有效的 (x,y) 坐标。您还可以选择为三维坐标指定 `ZData`

`XData``YData` 必须同时指定，以使每个节点具有一个有效的 (x,y) 坐标。您还可以选择为三维坐标指定 `ZData`

## 参考

[1] Fruchterman, T., and E. Reingold. “Graph Drawing by Force-directed Placement.” Software — Practice & Experience. Vol. 21 (11), 1991, pp. 1129–1164.

[2] Gansner, E., E. Koutsofios, S. North, and K.-P Vo. “A Technique for Drawing Directed Graphs.” IEEE Transactions on Software Engineering. Vol.19, 1993, pp. 214–230.

[3] Barth, W., M. Juenger, and P. Mutzel. “Simple and Efficient Bilayer Cross Counting.” Journal of Graph Algorithms and Applications. Vol.8 (2), 2004, pp. 179–194.

[4] Brandes, U., and B. Koepf. “Fast and Simple Horizontal Coordinate Assignment.” LNCS. Vol. 2265, 2002, pp. 31–44.

[5] Y. Koren. “Drawing Graphs by Eigenvectors: Theory and Practice.” Computers and Mathematics with Applications. Vol. 49, 2005, pp. 1867–1888.