pitchures_2.py 1.7 KB

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