1. 程式人生 > 程式設計 >查詢適用於matplotlib的中文字型名稱與實際檔名對應關係的方法

查詢適用於matplotlib的中文字型名稱與實際檔名對應關係的方法

問題來源

如何在matplotlib中使用中文字型是老問題了,相關文章非常多。
前幾天有人問我如何知道中文字型名稱和實際檔案的對應關係時,才想起來原來沒思考過這個問題,只能讓他記住字型與檔案的對應關係或者去fonts目錄檢視。
難道真的就沒有稍微自動化、智慧化的檢視支援matplotlib的字型名稱與檔案的對應關係的方法?

問題解決步驟

matplotlib與字型相關的模組是font_manager,觀察原始碼font_manager.py可知:

1. matplotlib支援哪種型別的字型?

def get_fontext_synonyms(fontext):
  """
  Return a list of file extensions extensions that are synonyms for
  the given file extension *fileext*.
  """
  return {
    'afm': ['afm'],'otf': ['otf','ttc','ttf'],'ttc': ['otf','ttf': ['otf',}[fontext]

由此可知matplotlib只支援ttfafm字型。

  • ‘ttf': TrueType and OpenType fonts (.ttf,.ttc,.otf)
  • ‘afm': Adobe Font Metrics (.afm)

2. matplotlib如何查詢系統字型?

findSystemFonts模組函式的作用是查詢系統字型。
def findSystemFonts(fontpaths=None,fontext='ttf'): -->list
引數fontext預設值為'ttf',另外還支援值'afm'
引數fontpaths預設值是None
對於fontpaths

有兩種種情況。

fontpathsNone

函式會判斷作業系統,如果是Windows,呼叫函式win32InstalledFonts,如果不是Windows,呼叫函式get_fontconfig_fonts

對於Windows,函式win32InstalledFonts到以下路徑查詢。

# OS Font paths
MSFolders = \
  r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders'
MSFontDirectories = [
  r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts',r'SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts']
MSUserFontDirectories = [
  str(Path.home() / 'AppData/Local/Microsoft/Windows/Fonts'),str(Path.home() / 'AppData/Roaming/Microsoft/Windows/Fonts'),]

對於非Windows作業系統,函式get_fontconfig_fonts主要依託fontconfig包(即fc-list命令)查詢字型,要求fontconfig>=2.7

fontpaths不為None

fontpaths不為None時,通過list_fonts()函式查詢字型。
list_fonts()函式其實一個通用的按路徑、副檔名遞迴遍歷檔案路徑的函式。

def list_fonts(directory,extensions):
  """
  Return a list of all fonts matching any of the extensions,found
  recursively under the directory.
  """
  extensions = ["." + ext for ext in extensions]
  return [os.path.join(dirpath,filename)
      # os.walk ignores access errors,unlike Path.glob.
      for dirpath,_,filenames in os.walk(directory)
      for filename in filenames
      if Path(filename).suffix.lower() in extensions]

3.matplotlib如何查詢matplotlib自帶字型?

安裝matplotlib時,會在site-packages\matplotlib\mpl-data\fonts目錄放置一系列字型。

通過原始碼可知fonts目錄下有'ttf','afm','pdfcorefonts'3個子目錄。

paths = [cbook._get_data_path('fonts',subdir)
         for subdir in ['ttf','pdfcorefonts']]
In [1]: import matplotlib.cbook as cbook
In [2]: paths = [cbook._get_data_path('fonts',subdir)  for subdir in ['ttf','pdfcorefonts']]
In [3]: paths
Out[4]:
[WindowsPath('c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/matplotlib/mpl-data/fonts/ttf'),WindowsPath('c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/matplotlib/mpl-data/fonts/afm'),WindowsPath('c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts')]

4.matplotlib如何生成字型列表?

FontManager類是matplotlib管理字型的重要類,是一個單例類。FontManager例項在構造後會建立一個ttf字型列表和一個afm字型列表,並會快取他們的字型屬性。
下面簡單看看ttflistafmlist列表的元素的屬性。

In [1]: import matplotlib.font_manager as mf
In [2]: ttflist=mf.FontManager().ttflist
In [3]: vars(ttflist[0])
Out[3]:
{'fname': 'c:\\users\\administrator\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\matplotlib\\mpl-data\\fonts\\ttf\\DejaVuSansMono-BoldOblique.ttf','name': 'DejaVu Sans Mono','style': 'oblique','variant': 'normal','weight': 700,'stretch': 'normal','size': 'scalable'}
In [4]: len(ttflist)
Out[4]: 252
In [5]: afmlist=mf.FontManager().afmlist
In [6]: vars(afmlist[0])
Out[6]:
{'fname': 'c:\\users\\administrator\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\matplotlib\\mpl-data\\fonts\\afm\\pagko8a.afm','name': 'ITC Avant Garde Gothic','style': 'italic','weight': 'book','size': 'scalable'}
In [7]: len(afmlist)
Out[7]: 60

5.matplotlib的字型屬性快取在哪裡?

前面瞭解到matplotlib會快取字型屬性那在什麼位置呢?
根據原始碼可知,字型快取的所在目錄是.matplotlib,快取檔案是fontlist-v330.json(檔名與版本有關)。在某些老版本的matplotlib中字型快取檔名是fontList.cache

_fmcache = os.path.join(
  mpl.get_cachedir(),'fontlist-v{}.json'.format(FontManager.__version__))
In [1]: import matplotlib
In [2]: matplotlib.get_cachedir()
Out[2]: 'C:\\Users\\Administrator\\.matplotlib'

6. 怎麼知道哪些字型是中文字型?

雖然在前面已經知道matplotlib會把系統字型和自帶字型資訊存放在ttflistafmlist中,但是在這些字型資訊中也不容易確定哪些是中文字型。
通過資料查詢有3種方法:

檢視Windows的fonts系統目錄中顯示的字型名稱和檔名屬性。這種方法效率太低!

通過登錄檔項[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]檢視字型名和字型檔名稱對映。這種方法一些系統字型仍然看不到漢字名稱。

在這裡插入圖片描述

根據第1種方法想到了去查字型檔案的元資料,Python相關的庫有兩個:fonttools,作者是老爹Guido的弟弟Just van RossumTTFQuery,基於fonttools的TTF包,只能檢視TTF檔案而且最後更新日期是2012年。

TTFQery專案地址https://pypi.org/project/TTFQuery/
原始碼中有些小問題,原始碼不算複雜,直接修改。

import sys
from fontTools.ttLib import TTFont
from fontTools.ttLib.ttCollection import TTCollection

UNICODE_ENCODINGS = {0: 'Unicode 1.0 semantics',1: 'Unicode 1.1 semantics',2: 'Unicode 1.1 semantics',3: 'Unicode 2.0 and onwards semantics,Unicode BMP only (cmap subtable formats 0,4,6).',4: 'Unicode 2.0 and onwards semantics,Unicode full repertoire (cmap subtable formats 0,6,10,12).',5: 'Unicode Variation Sequences (cmap subtable format 14).',6: 'Unicode Variation Sequences (cmap subtable format 14).'}


WINDOWS_ENCODINGS = {0: 'Symbol',1: 'Unicode BMP(UCS-2)',2: 'ShiftJIS',3: 'PRC',4: 'Big5',5: 'Wansung',6: 'Johab',7: 'Reserved',8: 'Reserved',9: 'Reserved',10: 'Unicode UCS-4'}


WINDOWS_LANGUAGES = {1025: 'Arabic/Saudi Arabia',1026: 'Bulgarian/Bulgaria',1027: 'Catalan/Catalan',1028: 'Chinese/Taiwan',1029: 'Czech/Czech Republic',1030: 'Danish/Denmark',1031: 'German/Germany',1032: 'Greek/Greece',1033: 'English/United States',1034: 'Spanish (Traditional Sort)/Spain',1035: 'Finnish/Finland',1036: 'French/France',1037: 'Hebrew/Israel',1038: 'Hungarian/Hungary',1039: 'Icelandic/Iceland',1040: 'Italian/Italy',1041: 'Japanese/Japan',1042: 'Korean/Korea',1043: 'Dutch/Netherlands',1044: 'Norwegian (Bokmal)/Norway',1045: 'Polish/Poland',1046: 'Portuguese/Brazil',1047: 'Romansh/Switzerland',1048: 'Romanian/Romania',1049: 'Russian/Russia',1050: 'Croatian/Croatia',1051: 'Slovak/Slovakia',1052: 'Albanian/Albania',1053: 'Swedish/Sweden',1054: 'Thai/Thailand',1055: 'Turkish/Turkey',1056: 'Urdu/Islamic Republic of Pakistan',1057: 'Indonesian/Indonesia',1058: 'Ukrainian/Ukraine',1059: 'Belarusian/Belarus',1060: 'Slovenian/Slovenia',1061: 'Estonian/Estonia',1062: 'Latvian/Latvia',1063: 'Lithuanian/Lithuania',1064: 'Tajik (Cyrillic)/Tajikistan',1066: 'Vietnamese/Vietnam',1067: 'Armenian/Armenia',1068: 'Azeri (Latin)/Azerbaijan',1069: 'Basque/Basque',1070: 'Upper Sorbian/Germany',1071: 'Macedonian (FYROM)/Former Yugoslav Republic of Macedonia',1074: 'Setswana/South Africa',1076: 'isiXhosa/South Africa',1077: 'isiZulu/South Africa',1078: 'Afrikaans/South Africa',1079: 'Georgian/Georgia',1080: 'Faroese/Faroe Islands',1081: 'Hindi/India',1082: 'Maltese/Malta',1083: 'Sami (Northern)/Norway',1086: 'Malay/Malaysia',1087: 'Kazakh/Kazakhstan',1088: 'Kyrgyz/Kyrgyzstan',1089: 'Kiswahili/Kenya',1090: 'Turkmen/Turkmenistan',1091: 'Uzbek (Latin)/Uzbekistan',1092: 'Tatar/Russia',1093: 'Bengali/India',1094: 'Punjabi/India',1095: 'Gujarati/India',1096: 'Odia (formerly Oriya)/India',1097: 'Tamil/India',1098: 'Telugu/India',1099: 'Kannada/India',1100: 'Malayalam/India',1101: 'Assamese/India',1102: 'Marathi/India',1103: 'Sanskrit/India',1104: 'Mongolian (Cyrillic)/Mongolia',1105: 'Tibetan/PRC',1106: 'Welsh/United Kingdom',1107: 'Khmer/Cambodia',1108: 'Lao/Lao P.D.R.',1110: 'Galician/Galician',1111: 'Konkani/India',1114: 'Syriac/Syria',1115: 'Sinhala/Sri Lanka',1117: 'Inuktitut/Canada',1118: 'Amharic/Ethiopia',1121: 'Nepali/Nepal',1122: 'Frisian/Netherlands',1123: 'Pashto/Afghanistan',1124: 'Filipino/Philippines',1125: 'Divehi/Maldives',1128: 'Hausa (Latin)/Nigeria',1130: 'Yoruba/Nigeria',1131: 'Quechua/Bolivia',1132: 'Sesotho sa Leboa/South Africa',1133: 'Bashkir/Russia',1134: 'Luxembourgish/Luxembourg',1135: 'Greenlandic/Greenland',1136: 'Igbo/Nigeria',1144: 'Yi/PRC',1146: 'Mapudungun/Chile',1148: 'Mohawk/Mohawk',1150: 'Breton/France',1152: 'Uighur/PRC',1153: 'Maori/New Zealand',1154: 'Occitan/France',1155: 'Corsican/France',1156: 'Alsatian/France',1157: 'Yakut/Russia',1158: "K'iche/Guatemala",1159: 'Kinyarwanda/Rwanda',1160: 'Wolof/Senegal',1164: 'Dari/Afghanistan',2049: 'Arabic/Iraq',2052: "Chinese/People's Republic of China",2055: 'German/Switzerland',2057: 'English/United Kingdom',2058: 'Spanish/Mexico',2060: 'French/Belgium',2064: 'Italian/Switzerland',2067: 'Dutch/Belgium',2068: 'Norwegian (Nynorsk)/Norway',2070: 'Portuguese/Portugal',2074: 'Serbian (Latin)/Serbia',2077: 'Sweden/Finland',2092: 'Azeri (Cyrillic)/Azerbaijan',2094: 'Lower Sorbian/Germany',2107: 'Sami (Northern)/Sweden',2108: 'Irish/Ireland',2110: 'Malay/Brunei Darussalam',2115: 'Uzbek (Cyrillic)/Uzbekistan',2117: 'Bengali/Bangladesh',2128: "Mongolian (Traditional)/People's Republic of China",2141: 'Inuktitut (Latin)/Canada',2143: 'Tamazight (Latin)/Algeria',2155: 'Quechua/Ecuador',3073: 'Arabic/Egypt',3076: 'Chinese/Hong Kong S.A.R.',3079: 'German/Austria',3081: 'English/Australia',3082: 'Spanish (Modern Sort)/Spain',3084: 'French/Canada',3098: 'Serbian (Cyrillic)/Serbia',3131: 'Sami (Northern)/Finland',3179: 'Quechua/Peru',4097: 'Arabic/Libya',4100: 'Chinese/Singapore',4103: 'German/Luxembourg',4105: 'English/Canada',4106: 'Spanish/Guatemala',4108: 'French/Switzerland',4122: 'Croatian (Latin)/Bosnia and Herzegovina',4155: 'Sami (Lule)/Norway',5121: 'Arabic/Algeria',5124: 'Chinese/Macao S.A.R.',5127: 'German/Liechtenstein',5129: 'English/New Zealand',5130: 'Spanish/Costa Rica',5132: 'French/Luxembourg',5146: 'Bosnian (Latin)/Bosnia and Herzegovina',5179: 'Sami (Lule)/Sweden',6145: 'Arabic/Morocco',6153: 'English/Ireland',6154: 'Spanish/Panama',6156: 'French/Principality of Monaco',6170: 'Serbian (Latin)/Bosnia and Herzegovina',6203: 'Sami (Southern)/Norway',7169: 'Arabic/Tunisia',7177: 'English/South Africa',7178: 'Spanish/Dominican Republic',7194: 'Serbian (Cyrillic)/Bosnia and Herzegovina',7227: 'Sami (Southern)/Sweden',8193: 'Arabic/Oman',8201: 'English/Jamaica',8202: 'Spanish/Venezuela',8218: 'Bosnian (Cyrillic)/Bosnia and Herzegovina',8251: 'Sami (Skolt)/Finland',9217: 'Arabic/Yemen',9225: 'English/Caribbean',9226: 'Spanish/Colombia',9275: 'Sami (Inari)/Finland',10241: 'Arabic/Syria',10249: 'English/Belize',10250: 'Spanish/Peru',11265: 'Arabic/Jordan',11273: 'English/Trinidad and Tobago',11274: 'Spanish/Argentina',12289: 'Arabic/Lebanon',12297: 'English/Zimbabwe',12298: 'Spanish/Ecuador',13313: 'Arabic/Kuwait',13321: 'English/Republic of the Philippines',13322: 'Spanish/Chile',14337: 'Arabic/U.A.E.',14346: 'Spanish/Uruguay',15361: 'Arabic/Bahrain',15370: 'Spanish/Paraguay',16385: 'Arabic/Qatar',16393: 'English/India',16394: 'Spanish/Bolivia',17417: 'English/Malaysia',17418: 'Spanish/El Salvador',18441: 'English/Singapore',18442: 'Spanish/Honduras',19466: 'Spanish/Nicaragua',20490: 'Spanish/Puerto Rico',21514: 'Spanish/United States'}

MACINTOSH_ENCODINGS = {0: 'Roman',1: 'Japanese',2: 'Chinese',3: 'Korean',4: 'Arabic',5: 'Hebrew',6: 'Greek',7: 'Russian',8: 'RSymbol',9: 'Devanagari',10: 'Gurmukhi',11: 'Gujarati',12: 'Oriya',13: 'Bengali',14: 'Tamil',15: 'Telugu',16: 'Kannada',17: 'Malayalam',18: 'Sinhalese',19: 'Burmese',20: 'Khmer',21: 'Thai',22: 'Laotian',23: 'Georgian',24: 'Armenian',25: 'Chinese',26: 'Tibetan',27: 'Mongolian',28: 'Geez',29: 'Slavic',30: 'Vietnamese',31: 'Sindhi',32: 'Uninterpreted'}

MACINTOSH_LANGUAGES = {0: 'English',1: 'French',2: 'German',3: 'Italian',4: 'Dutch',5: 'Swedish',6: 'Spanish',7: 'Danish',8: 'Portuguese',9: 'Norwegian',10: 'Hebrew',11: 'Japanese',12: 'Arabic',13: 'Finnish',14: 'Inuktitut',15: 'Icelandic',16: 'Maltese',17: 'Turkish',18: 'Croatian',19: 'Chinese (Traditional)',20: 'Urdu',21: 'Hindi',22: 'Thai',23: 'Korean',24: 'Lithuanian',25: 'Polish',26: 'Hungarian',27: 'Estonian',28: 'Latvian',29: 'Sami',30: 'Faroese',31: 'Farsi/Persian',32: 'Russian',33: 'Chinese (Simplified)',34: 'Flemish',35: 'Irish Gaelic',36: 'Albanian',37: 'Romanian',38: 'Czech',39: 'Slovak',40: 'Slovenian',41: 'Yiddish',42: 'Serbian',43: 'Macedonian',44: 'Bulgarian',45: 'Ukrainian',46: 'Byelorussian',47: 'Uzbek',48: 'Kazakh',49: 'Azerbaijani (Cyrillic script)',50: 'Azerbaijani (Arabic script)',51: 'Armenian',52: 'Georgian',53: 'Moldavian',54: 'Kirghiz',55: 'Tajiki',56: 'Turkmen',57: 'Mongolian (Mongolian script)',58: 'Mongolian (Cyrillic script)',59: 'Pashto',60: 'Kurdish',61: 'Kashmiri',62: 'Sindhi',63: 'Tibetan',64: 'Nepali',65: 'Sanskrit',66: 'Marathi',67: 'Bengali',68: 'Assamese',69: 'Gujarati',70: 'Punjabi',71: 'Oriya',72: 'Malayalam',73: 'Kannada',74: 'Tamil',75: 'Telugu',76: 'Sinhalese',77: 'Burmese',78: 'Khmer',79: 'Lao',80: 'Vietnamese',81: 'Indonesian',82: 'Tagalong',83: 'Malay (Roman script)',84: 'Malay (Arabic script)',85: 'Amharic',86: 'Tigrinya',87: 'Galla',88: 'Somali',89: 'Swahili',90: 'Kinyarwanda/Ruanda',91: 'Rundi',92: 'Nyanja/Chewa',93: 'Malagasy',94: 'Esperanto',128: 'Welsh',129: 'Basque',130: 'Catalan',131: 'Latin',132: 'Quenchua',133: 'Guarani',134: 'Aymara',135: 'Tatar',136: 'Uighur',137: 'Dzongkha',138: 'Javanese (Roman script)',139: 'Sundanese (Roman script)',140: 'Galician',141: 'Afrikaans',142: 'Breton',144: 'Scottish Gaelic',145: 'Manx Gaelic',146: 'Irish Gaelic (with dot above)',147: 'Tongan',148: 'Greek (polytonic)',149: 'Greenlandic',150: 'Azerbaijani (Roman script)'}

ISO_IDS = {
  0: '7-bit ASCII',1: 'ISO 10646',2: 'ISO 8859-1'
}

CUSTOMS = {}


PLATFORMS = {0: {'name': 'Unicode','encodings': UNICODE_ENCODINGS,'languages': UNICODE_ENCODINGS},1: {'name': 'Macintosh','encodings': MACINTOSH_ENCODINGS,'languages': MACINTOSH_LANGUAGES},2: {'name': 'ISO [deprecated]','encodings': ISO_IDS,'languages': ISO_IDS},3: {'name': 'Windows','encodings': WINDOWS_ENCODINGS,'languages': WINDOWS_LANGUAGES},4: {'name': 'Custom','encodings': CUSTOMS,'languages': CUSTOMS}}


NAME_TABLE = {0: 'Copyright Notice',1: 'Font Family',2: 'SubFamily',3: 'Unique Font Identifier',4: 'Full Font Name',5: 'Version',6: 'PostScript Name',7: 'Trademark',8: 'Manufacturer Name',9: 'Designer',10: 'Description',11: 'Vendor URL',12: 'Designer URL',13: 'License Description',14: 'License Info URL',15: 'Reserved',16: 'Typographic Family',17: 'Typographic SubFamily',18: 'Compatible Full',19: 'Sample Text',20: 'PostScript CID findfont name',21: 'WWS Family Name',22: 'WWS SubFamily Name',23: 'Light Background Pallete',24: 'Dark Background Pallete',25: 'Variations PostScript Name Prefix'}


ENCODINGS = {
  "Roman": 'latin_1'
}

def parse_meta(font):
  """The main meta parsing function. Thanks to Fonttools library."""
  data = {}
  for nti in font['name'].names:
    key = nti.nameID
    platform_data = PLATFORMS[nti.platformID]
    if platform_data['name'] == 'Custom':
      encoding = {'id': 0,'value': 'Custom'}
      language = {'id': 0,'value': 'Custom'}
    else:
      encoding = {'id': nti.platEncID,'value': platform_data['encodings'].get(nti.platEncID,"Unknown")}
      language = {'id': nti.langID,'value': platform_data['languages'].get(nti.langID,"Unknown")}
    name_str = nti.toStr()
    field = NAME_TABLE.get(nti.nameID,False)
    if not field:
      if 26 <= nti.nameID <= 255:
        field = 'Reserved [{}]'.format(nti.nameID)
      elif 256 <= nti.nameID:
        field = 'Font Specific[{}]'.format(nti.nameID)

    data[key] = {"field": field,"value": name_str,"encoding": encoding,"language": language
    }
  return data

def get_font_name(data,language=None):
  language_name = data.get(4).get('language').get('value')
  font_full_name = data.get(4).get('value')

  if language is None:
    return font_full_name
  else:
    if language in language_name:
      return font_full_name
    

if __name__ == '__main__':
  from pathlib import Path
  import matplotlib.font_manager as fm
  
  ttflist=fm.FontManager().ttflist
  
  for f in ttflist:
    if Path(f.fname).suffix.lower()=='.ttf':
      # 輸出字型元資料中語言包含有中文的TTF字型
      data = parse_meta(TTFont(f.fname))
      out_ttf = get_font_name(data,'Chinese')
      if out_ttf:
        print(f.fname,f.name,out_ttf)
    elif Path(f.fname).suffix.lower()=='.ttc':
      # 輸出所有TTC字型中包含的字型名稱資訊
      ttc = TTCollection(f.fname)
      for ttf in ttc:
        ttc_data = parse_meta(ttf)
        out_ttc = get_font_name(ttc_data,'Chinese')
        if out_ttc:
          print(f.fname,out_ttc)

ttc檔案很特殊,它是多個ttf檔案集合,常用字型宋體微軟雅黑等在Windows10中都是ttc檔案,而且奇怪的是很多語言資訊不是中文的ttc字型也可以顯示中文。

C:\Windows\Fonts\STHUPO.TTF STHupo 華文琥珀
C:\Windows\Fonts\mingliub.ttc MingLiU-ExtB 細明體-ExtB
C:\Windows\Fonts\mingliub.ttc MingLiU-ExtB 新細明體-ExtB
C:\Windows\Fonts\mingliub.ttc MingLiU-ExtB 細明體_HKSCS-ExtB
C:\Windows\Fonts\simkai.ttf KaiTi 楷體
C:\Windows\Fonts\STXIHEI.TTF STXihei 華文細黑
C:\Users\Administrator\AppData\Local\Microsoft\Windows\Fonts\仿宋_GB2312.ttf FangSong_GB2312 仿宋_GB2312
C:\Users\Administrator\AppData\Local\Microsoft\Windows\Fonts\楷體_GB2312.ttf KaiTi_GB2312 楷體_GB2312
C:\Windows\Fonts\STXINGKA.TTF STXingkai 華文行楷
C:\Windows\Fonts\STCAIYUN.TTF STCaiyun 華文彩雲
C:\Windows\Fonts\simsun.ttc SimSun 宋體
C:\Windows\Fonts\simsun.ttc SimSun 新宋體
C:\Windows\Fonts\STKAITI.TTF STKaiti 華文楷體
C:\Windows\Fonts\msjhl.ttc Microsoft JhengHei 微軟正黑體 Light
C:\Windows\Fonts\msjhl.ttc Microsoft JhengHei Microsoft JhengHei UI Light
C:\Users\Administrator\AppData\Local\Microsoft\Windows\Fonts\華文中宋.ttf STZhongsong 華文中宋
C:\Windows\Fonts\FZYTK.TTF FZYaoTi 方正姚體
C:\Users\Administrator\AppData\Local\Microsoft\Windows\Fonts\方正卡通簡體.ttf FZKaTong-M19S 方正卡通簡體
C:\Windows\Fonts\simhei.ttf SimHei 黑體
C:\Windows\Fonts\方正粗黑宋簡體.ttf FZCuHeiSongS-B-GB 方正粗黑宋簡體
C:\Windows\Fonts\Deng.ttf DengXian 等線
C:\Users\Administrator\AppData\Local\Microsoft\Windows\Fonts\FZXBSJW.TTF FZXiaoBiaoSong-B05S 方正小標宋簡體
C:\Windows\Fonts\Dengl.ttf DengXian 等線 Light
C:\Windows\Fonts\msjh.ttc Microsoft JhengHei 微軟正黑體
C:\Windows\Fonts\msjh.ttc Microsoft JhengHei Microsoft JhengHei UI
C:\Windows\Fonts\msyh.ttc Microsoft YaHei 微軟雅黑
C:\Windows\Fonts\msyh.ttc Microsoft YaHei Microsoft Yahei UI
C:\Windows\Fonts\STFANGSO.TTF STFangsong 華文仿宋
C:\Windows\Fonts\simfang.ttf FangSong 仿宋
C:\Windows\Fonts\SIMLI.TTF LiSu 隸書
C:\Windows\Fonts\SIMYOU.TTF YouYuan 幼圓
C:\Windows\Fonts\STLITI.TTF STLiti 華文隸書
C:\Windows\Fonts\Dengb.ttf DengXian 等線 Bold
C:\Windows\Fonts\msyhl.ttc Microsoft YaHei 微軟雅黑 Light
C:\Windows\Fonts\msyhl.ttc Microsoft YaHei Microsoft YaHei UI Light
C:\Windows\Fonts\STSONG.TTF STSong 華文宋體
C:\Windows\Fonts\STXINWEI.TTF STXinwei 華文新魏
C:\Windows\Fonts\FZSTK.TTF FZShuTi 方正舒體

參考

https://matplotlib.org/api/font_manager_api.html
http://ttfquery.sourceforge.net/
https://fonttools.readthedocs.io/en/latest/ttLib/index.html

到此這篇關於查詢適用於matplotlib的中文字型名稱與實際檔名對應關係的方法的文章就介紹到這了,更多相關matplotlib中文字型名稱與實際檔名對應內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!