数据库教程:查找适用于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', 'ttc', 'ttf'],      'ttf': ['otf', 'ttc', 'ttf'],    }[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'softwaremicrosoftwindowscurrentversionexplorershell folders'  msfontdirectories = [    r'softwaremicrosoftwindows ntcurrentversionfonts',    r'softwaremicrosoftwindowscurrentversionfonts']  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-packagesmatplotlibmpl-datafonts目录放置一系列字体。

通过源码可知fonts目录下有'ttf', 'afm', 'pdfcorefonts'3个子目录。

  paths = [cbook._get_data_path('fonts', subdir)           for subdir in ['ttf', 'afm', 'pdfcorefonts']]

  in [1]: import matplotlib.cbook as cbook  in [2]: paths = [cbook._get_data_path('fonts', subdir)  for subdir in ['ttf', 'afm', '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',   'variant': 'normal',   'weight': 'book',   'stretch': 'normal',   '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_machinesoftwaremicrosoftwindows ntcurrentversionfonts]查看字体名和字体文件名称映射。这种方法一些系统字体仍然看不到汉字名称。

查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法

根据第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, 4, 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,f.name,out_ttc)  

ttc文件很特殊,它是多个ttf文件集合,常用字体宋体微软雅黑等在windows10中都是ttc文件,而且奇怪的是很多语言信息不是中文的ttc字体也可以显示中文。

  c:windowsfontssthupo.ttf sthupo 华文琥珀  c:windowsfontsmingliub.ttc mingliu-extb 細明體-extb  c:windowsfontsmingliub.ttc mingliu-extb 新細明體-extb  c:windowsfontsmingliub.ttc mingliu-extb 細明體_hkscs-extb  c:windowsfontssimkai.ttf kaiti 楷体  c:windowsfontsstxihei.ttf stxihei 华文细黑  c:usersadministratorappdatalocalmicrosoftwindowsfonts仿宋_gb2312.ttf fangsong_gb2312 仿宋_gb2312  c:usersadministratorappdatalocalmicrosoftwindowsfonts楷体_gb2312.ttf kaiti_gb2312 楷体_gb2312  c:windowsfontsstxingka.ttf stxingkai 华文行楷  c:windowsfontsstcaiyun.ttf stcaiyun 华文彩云  c:windowsfontssimsun.ttc simsun 宋体  c:windowsfontssimsun.ttc simsun 新宋体  c:windowsfontsstkaiti.ttf stkaiti 华文楷体  c:windowsfontsmsjhl.ttc microsoft jhenghei 微軟正黑體 light  c:windowsfontsmsjhl.ttc microsoft jhenghei microsoft jhenghei ui light  c:usersadministratorappdatalocalmicrosoftwindowsfonts华文中宋.ttf stzhongsong 华文中宋  c:windowsfontsfzytk.ttf fzyaoti 方正姚体  c:usersadministratorappdatalocalmicrosoftwindowsfonts方正卡通简体.ttf fzkatong-m19s 方正卡通简体  c:windowsfontssimhei.ttf simhei 黑体  c:windowsfonts方正粗黑宋简体.ttf fzcuheisongs-b-gb 方正粗黑宋简体  c:windowsfontsdeng.ttf dengxian 等线  c:usersadministratorappdatalocalmicrosoftwindowsfontsfzxbsjw.ttf fzxiaobiaosong-b05s 方正小标宋简体  c:windowsfontsdengl.ttf dengxian 等线 light  c:windowsfontsmsjh.ttc microsoft jhenghei 微軟正黑體  c:windowsfontsmsjh.ttc microsoft jhenghei microsoft jhenghei ui  c:windowsfontsmsyh.ttc microsoft yahei 微软雅黑  c:windowsfontsmsyh.ttc microsoft yahei microsoft yahei ui  c:windowsfontsstfangso.ttf stfangsong 华文仿宋  c:windowsfontssimfang.ttf fangsong 仿宋  c:windowsfontssimli.ttf lisu 隶书  c:windowsfontssimyou.ttf youyuan 幼圆  c:windowsfontsstliti.ttf stliti 华文隶书  c:windowsfontsdengb.ttf dengxian 等线 bold  c:windowsfontsmsyhl.ttc microsoft yahei 微软雅黑 light  c:windowsfontsmsyhl.ttc microsoft yahei microsoft yahei ui light  c:windowsfontsstsong.ttf stsong 华文宋体  c:windowsfontsstxinwei.ttf stxinwei 华文新魏  c:windowsfontsfzstk.ttf fzshuti 方正舒体  

参考

https://fonttools.readthedocs.io/en/latest/ttlib/index.html

到此这篇关于查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法的文章就介绍到这了,更多相关matplotlib中文字体名称与实际文件名对应内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多数据库技术:查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/810487.html

(0)
上一篇 2021年9月11日
下一篇 2021年9月11日

精彩推荐