12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import networkx as nx
- import matplotlib.pyplot as plt
- import matplotlib.font_manager as fm
- import os
- import requests
- # 中文字體設定(自動下載 Google Noto Sans TC)
- font_url = "https://github.com/googlefonts/noto-cjk/raw/main/Sans/OTF/TraditionalChinese/NotoSansTC-Regular.otf"
- font_path = "NotoSansTC-Regular.otf"
- if not os.path.exists(font_path):
- r = requests.get(font_url)
- with open(font_path, "wb") as f:
- f.write(r.content)
- font_prop = fm.FontProperties(fname=font_path)
- plt.rcParams['font.family'] = font_prop.get_name()
- # 關鍵字關聯資料
- edge_list = [
- ('血液分離過濾器', '雙重過濾血漿分離術價格'),
- ('血液分離過濾器', '血漿置換術費用'),
- ('血液分離過濾器', '血液淨化療程費用'),
- ('血液分離過濾器', '血漿分離術費用'),
- ('血液分離過濾器', '血漿置換術後遺症'),
- ('血液分離過濾器', '雙重過濾血漿分離術健保'),
- ('血液分離過濾器', '血液淨化副作用'),
- ('雙重過濾血漿分離術自費', '血漿置換術自費'),
- ('雙重過濾血漿分離術自費', '血漿置換術費用'),
- ('雙重過濾血漿分離術自費', '雙重過濾血漿分離術健保'),
- # 你可以貼上完整 edge_list 在這裡
- ]
- # 建立網絡圖
- G = nx.Graph()
- G.add_edges_from(edge_list)
- # 繪製圖形
- plt.figure(figsize=(12, 10))
- pos = nx.spring_layout(G, k=0.5, seed=42)
- nx.draw_networkx_nodes(G, pos, node_color='#90CAF9', node_size=1200)
- nx.draw_networkx_edges(G, pos, edge_color='#B0BEC5')
- nx.draw_networkx_labels(G, pos, font_properties=font_prop, font_size=11)
- plt.title("關鍵詞關聯圖", fontsize=14, fontproperties=font_prop)
- plt.axis('off')
- plt.tight_layout()
- plt.show()
|