chart.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import matplotlib
  2. import matplotlib.pyplot as plt
  3. from matplotlib.font_manager import FontProperties, fontManager
  4. from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
  5. def set_chinese_font():
  6. to_find_fonts = [
  7. "PingFang SC",
  8. "SimHei",
  9. "Microsoft YaHei",
  10. "STSong",
  11. "SimSun",
  12. "Arial Unicode MS",
  13. "Noto Sans CJK SC",
  14. "Noto Sans CJK JP",
  15. ]
  16. installed_fonts = frozenset(fontInfo.name for fontInfo in fontManager.ttflist)
  17. for font in to_find_fonts:
  18. if font in installed_fonts:
  19. return FontProperties(font)
  20. return FontProperties()
  21. # use non-interactive backend to prevent `RuntimeError: main thread is not in main loop`
  22. matplotlib.use("Agg")
  23. # use a business theme
  24. plt.style.use("seaborn-v0_8-darkgrid")
  25. plt.rcParams["axes.unicode_minus"] = False
  26. font_properties = set_chinese_font()
  27. plt.rcParams["font.family"] = font_properties.get_name()
  28. class ChartProvider(BuiltinToolProviderController):
  29. def _validate_credentials(self, credentials: dict) -> None:
  30. pass