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()