matlab使用教程(16)—圖論中圖的定義與修改

1.修改現有圖的節點和邊

????????此示例演示如何使用 addedge rmedge addnode rmnode findedge findnode subgraph 函數訪問和修改 graph digraph 對象中的節點和/或邊。

1.1 添加節點

????????創建一個包含四個節點和四條邊的圖。s t 中的對應元素用于指定每條圖邊的結束節點。
s = [1 1 1 2];
t = [2 3 4 3];
G = graph(s,t)
G =
graph with properties:
Edges: [4x1 table]
Nodes: [4x0 table]
????????查看圖的邊列表。
G.Edges
ans=4×1 table
EndNodes
________
1 2
1 3
1 4
2 3
????????使用 addnode 向圖中添加五個節點。該命令將添加五個節點 ID 分別為 5 6 7 8 9 的不相連節點。
G = addnode(G,5)
G =
graph with properties:
Edges: [4x1 table]
Nodes: [9x0 table]

1.2 刪除節點

????????使用 rmnode 從圖中刪除節點 3、5 和 6。與其中一個已刪除節點相連的所有邊也會被刪除。對圖中剩余的六個節點重新進行編號,以反映新的節點數量。
G = rmnode(G,[3 5 6])
G =
graph with properties:
Edges: [2x1 table]
Nodes: [6x0 table]

1.3 添加邊

????????使用 addedge G 添加兩條邊。第一條邊位于節點 1 和節點 5 之間,第二條邊位于節點 2 和節點 5 之間。該命令將向 G.Edges 添加兩個新行。
G = addedge(G,[1 2],[5 5])
G =
graph with properties:
Edges: [4x1 table]
Nodes: [6x0 table]

1.4 刪除邊

????????使用 rmedge 刪除節點 1 和節點 3 之間的邊。該命令將從 G.Edges 中刪除一個行。
G = rmedge(G,1,3)
G =
graph with properties:
Edges: [3x1 table]
Nodes: [6x0 table]

1.5 確定邊索引

????????確定節點 1 和 5 之間的邊的邊索引。邊索引 ei G.Edges 中的行號。
ei = findedge(G,1,5)
ei = 2

1.6 確定節點索引

????????在圖中添加節點名稱,然后確定節點 'd' 的節點索引。數值節點索引 ni G.Nodes 中的行號。使用其他圖函數(例如 shortestpath )時,可以同時使用 ni 和節點名稱 'd' 來表示節點。
G.Nodes.Name = { 'a' 'b' 'c' 'd' 'e' 'f' }';
ni = findnode(G, 'd' )
ni = 4

1.7 提取子圖

????????使用 subgraph 提取僅包含兩個節點的圖部分。
H = subgraph(G,[1 2])
H =
graph with properties:
Edges: [1x1 table]
Nodes: [2x1 table]
????????查看子圖的邊列表。

H.Edges
ans=table
EndNodes
______________
{'a'} {'b'}

1.8 通過變量編輯器修改節點和邊表格

????????圖對象的節點和邊信息包含在 Nodes Edges 這兩個屬性中。這兩個屬性都是包含變量的表,用于說明圖中的節點和邊的特性。由于 Nodes Edges 都是表,因此您可以使用變量編輯器以交互方式查看或編輯這些表。您不能使用變量編輯器添加或刪除節點或邊,也不能編輯 Edges 表的 EndNodes 屬性。變量編輯器適用于管理 Nodes Edges 表中的額外節點和邊屬性。

2.添加圖節點名稱、邊權重和其他屬性

????????此示例演示如何向使用 graph digraph 創建的圖中的節點和邊添加屬性。當您最初調用 graphdigraph 來創建圖時,可以指定節點名稱或邊權重。但是,此示例演示了如何在創建圖后向圖添加屬性。

2.1 創建圖

????????創建一個有向圖。s t 中的對應元素用于定義圖中每條邊的源節點和目標節點。
s = [1 1 2 2 3];
t = [2 4 3 4 4];
G = digraph(s,t)
G =
digraph with properties:
Edges: [5x1 table]
Nodes: [4x0 table]

2.2 添加節點名稱

????????通過將變量 Name 添加到 G.Nodes 表中來向圖中添加節點名稱。 Name 變量必須指定為 N × 1 字符向量元胞數組或字符串數組,其中 N = numnodes(G) 。添加節點名稱時請務必使用 Name 變量,因為該變量名稱會被一些圖函數進行特殊處理。
G.Nodes.Name = { 'First' 'Second' 'Third' 'Fourth' }';
????????查看新的 Nodes 表。
G.Nodes
ans=4×1 table
Name
__________
{'First' }
{'Second'}
{'Third' }
{'Fourth'}
????????使用表索引查看節點 1 和 4 的名稱。
G.Nodes.Name([1 4])
ans = 2x1 cell
{'First' }
{'Fourth'}

2.3 添加邊權重

????????通過將變量 Weight 添加到 G.Edges 表中來向圖添加邊權重。 Weight 變量必須是 M×1 數值向量,其中 M = numedges(G) 。添加邊權重時請務必使用 Weight 變量,因為該變量名稱會被一些圖函數進行特殊處理。
G.Edges.Weight = [10 20 30 40 50]';
????????查看新的 Edges 表。
G.Edges
ans=5×2 table
EndNodes Weight
________________________ ______
{'First' } {'Second'} 10
{'First' } {'Fourth'} 20
{'Second'} {'Third' } 30
{'Second'} {'Fourth'} 40
{'Third' } {'Fourth'} 50
????????使用表索引查看 G.Edges 的第一行和第三行。
G.Edges([1 3],:)
ans=2×2 table
EndNodes Weight
________________________ ______
{'First' } {'Second'} 10
{'Second'} {'Third' } 30

2.4 添加自定義屬性

????????原則上,您可以將任何變量添加到 G.Nodes G.Edges 中,來定義圖節點或邊的屬性。添加自定義屬性很有用,因為 subgraph reordernodes 之類的函數可以保留圖屬性。例如,可以向 G.Edges 添加名為 Power 的變量,來指示每條邊是 'on' 還是 'off'G.Edges.Power = { 'on' 'on' 'on' 'off' 'off' }';
G.Edges
ans=5×3 table
EndNodes Weight Power
________________________ ______ _______
{'First' } {'Second'} 10 {'on' }
{'First' } {'Fourth'} 20 {'on' }
{'Second'} {'Third' } 30 {'on' }
{'Second'} {'Fourth'} 40 {'off'}
{'Third' } {'Fourth'} 50 {'off'}
????????向 G.Nodes 添加名為 Size 的變量,來指示每個節點的實際大小。
G.Nodes.Size = [10 20 10 30]';
G.Nodes
ans=4×2 table
Name Size
__________ ____
{'First' } 10
{'Second'} 20
{'Third' } 10
{'Fourth'} 30

2.5?為圖論圖的節點和邊添加標簽

????????繪制圖時,您可以使用 G.Nodes G.Edges 中的變量為圖節點和邊添加標簽。這種做法很方便,因為已經確保這些變量具有正確數量的元素。
????????繪制圖,并使用 G.Edges 中的 Power 變量為邊添加標簽。使用 G.Nodes 中的 Size 變量為節點添加標簽。
p = plot(G, 'EdgeLabel' ,G.Edges.Power, 'NodeLabel' ,G.Nodes.Size)
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: {'10' '20' '10' '30'}
EdgeLabel: {'on' 'on' 'on' 'off' 'off'}
XData: [2 1.5000 1 2]
YData: [4 3 2 1]
ZData: [0 0 0 0]
Show all properties

3.圖的繪制和自定義

????????此示例演示如何繪制圖,然后自定義顯示內容以向圖節點和邊添加標簽或高亮顯示。

3.1 繪圖對象

????????使用 plot 函數繪制 graph digraph 對象。默認情況下, plot 會檢查圖的大小和類型,以確定要使用的布局。生成的圖窗窗口不包含軸刻度線。但是,如果使用 XData YData ZData 名稱-值對組指定節點的 (x,y) 坐標,圖窗將包含軸刻度線。
????????節點數不超過 100 的圖會自動包含節點標簽。節點標簽使用節點名稱(如果可用);否則標簽為數值節點索引。
????????例如,使用巴基球鄰接矩陣創建一個圖,然后使用所有的默認選項繪制該圖。如果您調用 plot 并指定輸出參數,則此函數將返回 GraphPlot 對象的句柄。隨后,您可以使用該對象調整繪圖的屬性。例如,可以更改邊的顏色或樣式、節點的大小和顏色等。
G = graph(bucky);
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: {1x60 cell}
EdgeLabel: {}
XData: [0.1033 1.3374 2.2460 1.3509 0.0019 -1.0591 -2.2901 -2.8275 -1.9881 -0.8836 1.5240 0.4128 0.6749 1.9866 2.5705 3.3263 3.5310 3.9022 3.8191 3.5570 1.5481 2.6091 1.7355 0.4849 0.2159 -1.3293 -1.2235 -2.3934 -3.3302 -2.4370 2.4601 ... ]
YData: [-1.8039 -1.2709 -2.0484 -3.0776 -2.9916 -0.9642 -1.2170 0.0739 1.0849 0.3856 0.1564 0.9579 2.2450 2.1623 0.8879 -1.2600 0.0757 0.8580 -0.4702 -1.8545 -3.7775 -2.9634 -2.4820 -3.0334 -3.9854 -3.2572 -3.8936 -3.1331 -2.2357 -2.4880 ... ]
ZData: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
Show all properties
????????獲得 GraphPlot 對象的句柄后,便可以使用點索引訪問或更改屬性值。有關您可以調整的屬性的完整列表,請參閱 GraphPlot 屬性。將 NodeColor 的值更改為 'red'
p.NodeColor = 'red' ;

????????確定邊的線寬。
p.LineWidth
ans = 0.5000

3.2 創建并繪制圖

????????創建并繪制一個表示 L 形膜的圖,L 形膜是基于一側有 12 個節點的方形網格構建的。使用 plot 指定輸出參數以返回 GraphPlot 對象的句柄。
n = 12;
A = delsq(numgrid( 'L' ,n));
G = graph(A, 'omitselfloops' )
G =
graph with properties:
Edges: [130x2 table]
Nodes: [75x0 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: {1x75 cell}
EdgeLabel: {}
XData: [-2.5225 -2.1251 -1.6498 -1.1759 -0.7827 -2.5017 -2.0929 -1.6027 -1.1131 -0.7069 -2.4678 -2.0495 -1.5430 -1.0351 -0.6142 -2.4152 -1.9850 -1.4576 -0.9223 -0.4717 -2.3401 -1.8927 -1.3355 -0.7509 -0.2292 -2.2479 -1.7828 -1.1871 -0.5239 ... ]
YData: [-3.5040 -3.5417 -3.5684 -3.5799 -3.5791 -3.0286 -3.0574 -3.0811 -3.0940 -3.0997 -2.4191 -2.4414 -2.4623 -2.4757 -2.4811 -1.7384 -1.7570 -1.7762 -1.7860 -1.7781 -1.0225 -1.0384 -1.0553 -1.0568 -1.0144 -0.2977 -0.3097 -0.3229 -0.3152 ... ]
ZData: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
Show all properties

3.3 更改圖節點的布局

????????使用 layout 函數更改繪圖中的圖節點的布局。不同的布局選項會自動計算繪圖的節點坐標。或者,可以使用 GraphPlot 對象的 XData YData ZData 屬性來指定您自己的節點坐標。不使用默認的二維布局方法,而是使用 layout 來指定 'force3' 布局(三維力導向圖布局)。
layout(p, 'force3' )
view(3)

3.4 按比例對節點著色

????????根據圖節點的出入度為它們著色。在該圖中,所有內部節點都具有最大度數 4,沿圖邊的節點的度數為 3,角節點具有最小度數 2。將該節點著色數據存儲為 G.Nodes 中的變量 NodeColors
G.Nodes.NodeColors = degree(G);
p.NodeCData = G.Nodes.NodeColors;
colorbar

3.5 按權重列出的邊線寬度

????????向圖邊添加一些隨機整數權重,然后繪制這些邊,使它們的線寬與權重成比例。由于約大于 7 的邊線寬度開始變得很復雜,因此縮放線寬,使權重最大的邊的線寬為 7。將該邊寬數據存儲為 G.Edges 中的變量LWidths
G.Edges.Weight = randi([10 250],130,1);
G.Edges.LWidths = 7*G.Edges.Weight/max(G.Edges.Weight);
p.LineWidth = G.Edges.LWidths;

3.6 提取子圖

????????提取 G 的右上角并將其作為子圖繪制,以更便于讀取圖上的詳細信息。新圖 H G 繼承 NodeColors LWidths 變量,因此最直接的方式就是重新創建之前的繪圖自定義項。但是,系統會對 H 中的節點重新進行編號,以將圖中的新節點編號考慮在內。
H = subgraph(G,[1:31 36:41]);
p1 = plot(H, 'NodeCData' ,H.Nodes.NodeColors, 'LineWidth' ,H.Edges.LWidths);
colorbar

3.7 為節點和邊添加標簽

????????使用 labeledge 對寬度大于 6 的邊添加標簽 'Large' labelnode 函數以相似的方式為節點添加標簽。
labeledge(p1,find(H.Edges.LWidths > 6), 'Large' )

3.8 突出顯示最短路徑

????????查找子圖 H 中節點 11 與節點 37 之間的最短路徑。以紅色高亮顯示沿此路徑的邊,并增大路徑的結束節點的大小。
path = shortestpath(H,11,37)
path = 1×10
11 12 17 18 19 24 25 30 36 37
highlight(p1,[11 37])
highlight(p1,path, 'EdgeColor' , 'r' )
????????刪除節點標簽和顏色欄,并使所有節點都變成黑色。
p1.NodeLabel = {};
colorbar off
p1.NodeColor = 'black' ;

????????查找忽略邊權重的其他最短路徑。以綠色突出顯示此路徑。
path2 = shortestpath(H,11,37, 'Method' , 'unweighted' )
path2 = 1×10
11 12 13 14 15 20 25 30 31 37
highlight(p1,path2, 'EdgeColor' , 'g' )

3.9 繪制大圖

????????創建包含數十萬個甚至數百萬個節點和/或邊的圖是很常見的。為此,plot 處理大圖會略有不同,以保持可讀性和性能。處理節點超過 100 個的圖時, plot 函數會進行以下調整:
1 默認的圖布局方法始終為 'subspace'
2 不會再自動為這些節點添加標簽。
3 MarkerSize 屬性設置為 2 。(較小的圖的標記大小為 4 )。
4 有向圖的 ArrowSize 屬性設置為 4 。(較小的有向圖使用的箭頭大小為 7 )。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43699.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 MBean 和 日志查看 Tomcat 線程池核心屬性數據

文章目錄 CustomTomcatThreadPoolMBeanCustomTomcatThreadPool CustomTomcatThreadPoolMBean com.qww.config;public interface CustomTomcatThreadPoolMBean {String getStatus(); }CustomTomcatThreadPool package com.qww.config;import com.alibaba.fastjson.JSON; impor…

三本書與三場發布會,和鯨社區重新定義編程類書籍從閱讀到實踐新體驗

當 AI 開發者社區配備 AI 基礎設施開發平臺工具時,它還能做什么? 答案是:過去半年,和鯨社區憑借在氣象、醫學、社科等垂直領域的長期積累以及多方伙伴的支持,聯合舉辦了三場新書發布會——從 Python 到 R 語言 、從氣…

Midjourney Prompt 提示詞速查表 v5.2

Midjourney 最新的版本更新正不斷推出令人興奮的新功能。這雖然不斷擴展了我們的AI繪圖工具箱,但有時也會讓我們難以掌握所有實際可以使用的功能和參數。 針對此問題, 小編整理了 "Midjourney Prompt 提示詞速查表",這是一個非常方便的 Midjo…

Java“牽手“拼多多商品詳情頁面數據獲取方法,拼多多API實現批量商品數據抓取示例

拼多多商城是一個網上購物平臺,售賣各類商品,包括服裝、鞋類、家居用品、美妝產品、電子產品等。要獲取拼多多商品詳情數據,您可以通過開放平臺的接口或者直接訪問拼多多商城的網頁來獲取商品詳情信息。以下是兩種常用方法的介紹:…

Linux:shell腳本數組和腳本免交互

目錄 一、shell數組的定義 二、定義數組的方式 (1)數組名(value1 value2 value3 value4 ...) (2)獲取數組的長度 (3)獲取數組下標對應的值 (4)數組的遍歷 (5&#x…

qsort函數詳解

大家好,我是蘇貝,本篇博客帶大家了解qsort函數,如果你覺得我寫的不錯的話,可以給我一個贊👍嗎,感謝?? 文章目錄 一. qsort函數參數詳解1.數組首元素地址base2.數組的元素個數num和元素所占內存空間大小w…

ThreeJS——在3D地球上標記中國地圖板塊

Threejs3D地球標記中國地圖位置 先看效果 地球預覽視頻效果 用到的庫 TweenJS (動畫庫)用來做相機轉場的動畫Jquery(這里只用到一個 each 循環方法,可以使用 js 去寫)ThreeJS (3D 地球制作)100000.json(全國城市經緯度)d3.v6.js用來設置平面轉3D效果(本來考慮做成…

深入解析IDS/IPS與SSL/TLS和網絡安全

目錄 防火墻 IDS IPS DMZ VPN VPS SSL/TLS 動態IP 靜態IP 防火墻 防火墻是一種網絡安全設備,用于監控和控制網絡流量,保護網絡免受未經授權的訪問、惡意攻擊和威脅。防火墻可以基于規則進行數據包過濾,允許或阻止特定類型的流量通過…

Lead-Lag控制器形式

對于Lead-Lag(超前—滯后),有的地方叫做控制器 Controller,有的地方叫補償器 Compensator,有的地方叫濾波器 Filter,都是一個東西。 Lead-Lag也有幾種不同的形式,一種是 G c ( s ) 1 a T s 1…

QT設置widget背景圖片

首先說方法,在給widget或者frame或者其他任何類型的控件添加背景圖時,在樣式表中加入如下代碼,指定某個控件,設置其背景。 類名 # 控件名 { 填充方式:圖片路徑 } 例如: QWidget#Widget {border-image: url…

無涯教程-TensorFlow - 優化器

Optimizers是擴展類,其中包括用于訓練特定模型的附加信息,Optimizers類使用給定的參數初始化,用于提高速度和性能,以訓練特定模型。 TensorFlow的基本Optimizers是- tf.train.Optimizer 此類在tensorflow/python/training/opti…

C語言:深度學習知識儲備

目錄 數據類型 每種類型的大小是多少呢? 變量 變量的命名: 變量的分類: 變量的作用域和生命周期 作用域: 生命周期: 常量 字符串轉義字符注釋 字符串: 轉義字符 操作符: 算術操作符…

圖神經網絡 day2 圖的分類

圖神經網絡基礎算法 1 GCN2 GraphSAGE2.1 采樣:采樣固定長度的鄰居2.2 聚合2.3 GraphSAGE_minibatch2.4 GraphSAGE_embedding 3 GAT4. 圖網絡的分類4.1 遞歸圖神經網絡 RGNN4.2 圖卷積神經網絡GCN4.3 圖注意力網絡 GAT4.4 圖自動編碼 GAE4.5 圖時空網絡 GSTN4.6 圖生…

typeScript 接口和類

工具: PlayGround 接口 接口用來定義對象的結構和類型,描述對象應該具有哪些屬性和方法。 它僅用于聲明,而不是實現; 這對于編寫可重用的代碼非常有用。它可用于: 關鍵字是interface, 注意:它…

OSPF在廣播類型的網絡拓撲中DR和BDR的選舉

指定路由器(DR): 一個網段上的其他路由器都和指定路由器(DR)構成鄰接關系,而不是它們互相之間構成鄰接關系。 備份指定路由器(BDR): 當DR出現問題,由BDR接…

redis事務對比Lua腳本區別是什么

redis官方對于lua腳本的解釋:Redis使用同一個Lua解釋器來執行所有命令,同時,Redis保證以一種原子性的方式來執行腳本:當lua腳本在執行的時候,不會有其他腳本和命令同時執行,這種語義類似于 MULTI/EXEC。從別…

中間件: Kafka安裝部署

單機部署 下載二進制包 cd /opt/soft/archive wget http://archive.apache.org/dist/kafka/3.2.0/kafka_2.12-3.2.0.tgz tar -zxf kafka_2.12-3.2.0.tgz -C ../ cd ../kafka_2.12-3.2.0修改配置 vim config/server.propertiesadvertised.listenersPLAINTEXT://39.105.11.50:…

C++系列-函數重載

C系列-函數重載 函數重載函數重載的條件函數重載注意事項引用作為重載函數重載遇到默認參數 函數重載 函數名可以相同, 提高復用性 函數重載的條件 同一個作用域下函數名相同函數參數不同 – 參數個數不同 – 參數順序不同 – 參數類型不同不可以使用返回值作為重…

UI和API自動化測試的失敗原因

一、UI自動化失敗原因: 界面發生了變化,但是腳本沒有更新腳本中的等待時間太短了,導致元素還沒出來就被判定為失敗了網絡因素,網絡如果太慢的話,界面元素的顯示就會滯后執行的時候突然彈出一個窗口影響了元素的定位Ag…

Python web實戰之Django 的跨站點請求偽造(CSRF)保護詳解

關鍵詞:Python、Web、Django、跨站請求偽造、CSRF 大家好,今天我將分享web關于安全的話題:Django 的跨站點請求偽造(CSRF)保護,介紹 CSRF 的概念、原理和保護方法. 1. CSRF 是什么? CSRF&#…