# Part 3: 畫圖製作 時長: 3 hr ## 認識 Networkx 套件(認識系列共 30 min) NetworkX 用於建立網絡模型、繪製網路圖、分析網絡結構等等的算法以及一些基本的繪圖工具。 [Reference](https://www.smiliu.xyz/posts/54898) [Official Document](https://networkx.org/documentation/stable/tutorial.html) ## 認識 louvain_communities 套件 Networkx中其中一個**社群偵測**的方法。運用此算法可以把權重一樣的點連起來。 [Official Document](https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.community.louvain.louvain_communities.html) ## 認識 Matplotlib 函式庫 Matplotlib 可以根據數據資料,繪製直方圖、元餅圖、折線圖...等各種圖表,也能和其他 Python 的資料處理函式庫 ( NumPy、Pandas...等 ) 互相搭配,進行更複雜的視覺圖表繪製。 ## **綜合運用: 畫出連結圖**(2.5 hr) :::info 💡結合Part 2 的資料,運用下方程式碼進行修改,跑出屬於你的連結圖! ::: ``` import networkx as nx import matplotlib.pyplot as plt from community import community_louvain # 使用 networkx 畫圖 G = nx.Graph() # 加點 for id in id_to_keywords: G.add_node(id, type='id') for keyword in keyword_to_ids: G.add_node(keyword, type='keyword') # 加邊 for keyword, ids in keyword_to_ids.items(): for id in ids: G.add_edge(id, keyword) #社群偵測 partition = community_louvain.best_partition(G) community_colors = {node: partition[node] for node in G.nodes()} values = [community_colors[node] for node in G.nodes()] # 顯圖 # 大小、顏色等相關設定 node_sizes = [100 * G.degree(node) for node in G.nodes()] pos = nx.spring_layout(G, k=0.15, iterations=40) plt.figure(figsize=(30, 30)) nx.draw_networkx_edges(G, pos, alpha=0.5) nx.draw_networkx_nodes(G, pos, node_color=values, node_size=node_sizes, cmap=plt.cm.jet) nx.draw_networkx_labels(G, pos, font_size=20, font_family='SimSun') plt.axis('off') plt.show() ``` ## 成果 ![image](https://hackmd.io/_uploads/H13uk6myR.png) ## 補充: Plotly 套件 運用Plotly套件來繪製視覺化圖形。 - Plotly是Python的一個非常厲害且開源的數據可視化框架,是一款基於D3.js框架的數據可視化庫 - 生成的互動圖以web的形式呈現於瀏覽器上,這個特點讓它非常適用於 jupyter notebook 上進行程式開發 - 可以透過在線模式或離線模式進行繪圖,同樣都具有畫各類型圖的能力 - [Plotly官網](https://plotly.com/python/) - [相關資料](https://ithelp.ithome.com.tw/articles/10277258)