# 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()
```
## 成果

## 補充: Plotly 套件
運用Plotly套件來繪製視覺化圖形。
- Plotly是Python的一個非常厲害且開源的數據可視化框架,是一款基於D3.js框架的數據可視化庫
- 生成的互動圖以web的形式呈現於瀏覽器上,這個特點讓它非常適用於 jupyter notebook 上進行程式開發
- 可以透過在線模式或離線模式進行繪圖,同樣都具有畫各類型圖的能力
- [Plotly官網](https://plotly.com/python/)
- [相關資料](https://ithelp.ithome.com.tw/articles/10277258)