1. 程式人生 > >Linux/MacOS下matplotlib能正常顯示的中文字型選擇

Linux/MacOS下matplotlib能正常顯示的中文字型選擇

下面的Python指令碼可以檢測到 *nix 系統內 matplotlib 支援正常顯示的中文字型(用到了命令列工具 fc-list ):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File Name: font_check.py
# Created Time: Thu Mar 23 16:53:59 2017

__author__ = 'minyu'
__mail__ = '[email protected]'

from matplotlib.font_managerimport FontManager
import subprocess

mpl_fonts = set(f.namefor f in FontManager().ttflist)

print ('all font list get from matplotlib.font_manager:')
for f in sorted(mpl_fonts):
    print('\t' + f)

# for python2
# output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True)
# for python3
output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True, encoding="utf8")

zh_fonts = set(f.split(',',1)[0] for f in output.split('\n'))

print('\n' +'Chinese font list get from fc-list:')
for f in sorted(zh_fonts):
    print('\t' + f)

print('\n' +'the fonts we can use:')
available = set(mpl_fonts) & set(zh_fonts)
for f in available:
    print('\t' + f)


在個人的 MacOS Sierra 系統下執行結果如下:

Fontconfig warning: ignoring UTF-8: not a valid region tag
all font list get from matplotlib.font_manager:
	.Keyboard
	.LastResort
	.SF Compact Display
	.SF Compact Rounded
	.SF Compact Text
	.SF NS Display Condensed
	.SF NS Text Condensed
	Andale Mono
	Apple Braille
	Apple Chancery
	Apple Symbols
	AppleGothic
	AppleMyungjo
	Arial
	Arial Black
	Arial Narrow
	Arial Rounded MT Bold
	Arial Unicode MS
	Ayuthaya
	Big Caslon
	Bitstream Vera Sans
	Bitstream Vera Sans Mono
	Bitstream Vera Serif
	Bodoni 72 Smallcaps
	Bodoni Ornaments
	Bradley Hand
	Brush Script MT
	Chalkduster
	Comic Sans MS
	Consolas
	Courier New
	DIN Alternate
	DIN Condensed
	DejaVu Sans
	DejaVu Sans Display
	DejaVu Sans Mono
	DejaVu Serif
	DejaVu Serif Display
	Diwan Thuluth
	East Syriac Adiabene
	East Syriac Ctesiphon
	Estrangelo Antioch
	Estrangelo Edessa
	Estrangelo Midyat
	Estrangelo Nisibin
	Estrangelo Nisibin Outline
	Estrangelo Quenneshrin
	Estrangelo Talada
	Estrangelo TurAbdin
	Farisi
	Georgia
	Goha-Tibeb Zemen
	Gurmukhi MT
	Herculanum
	Hoefler Text
	Impact
	InaiMathi
	Khmer Sangam MN
	Kokonor
	Krungthep
	Lao Sangam MN
	Luminari
	Luxi Mono
	Luxi Sans
	Luxi Serif
	Microsoft Sans Serif
	Microsoft YaHei Mono
	Mishafi
	Mishafi Gold
	Plantagenet Cherokee
	STIXGeneral
	STIXIntegralsD
	STIXIntegralsSm
	STIXIntegralsUp
	STIXIntegralsUpD
	STIXIntegralsUpSm
	STIXNonUnicode
	STIXSizeFiveSym
	STIXSizeFourSym
	STIXSizeOneSym
	STIXSizeThreeSym
	STIXSizeTwoSym
	STIXVariants
	Sathu
	Serto Batnan
	Serto Jerusalem
	Serto Jerusalem Outline
	Serto Kharput
	Serto Malankara
	Serto Mardin
	Serto Urhoy
	Silom
	Skia
	Symbol
	System Font
	Tahoma
	Times New Roman
	Trattatello
	Trebuchet MS
	Verdana
	Webdings
	Wingdings
	Wingdings 2
	Wingdings 3
	YaHei Consolas Hybrid
	Zapf Dingbats
	Zapfino
	cmb10
	cmex10
	cmmi10
	cmr10
	cmss10
	cmsy10
	cmtt10
Fontconfig warning: ignoring UTF-8: not a valid region tag

Chinese font list get from fc-list:
	
	.Hiragino Sans GB Interface
	.LastResort
	.PingFang HK
	.PingFang SC
	.PingFang TC
	Arial Unicode MS
	Fixed
	GB18030 Bitmap
	Heiti SC
	Heiti TC
	Hiragino Sans GB
	Microsoft YaHei Mono
	PingFang HK
	PingFang SC
	PingFang TC
	STSong
	Songti SC
	Songti TC
	YaHei Consolas Hybrid

the fonts we can use:
	.LastResort
	Microsoft YaHei Mono
	YaHei Consolas Hybrid
	Arial Unicode MS



YaHei Consolas Hybrid 是我自己安裝的字型,其他三個都是系統預設的,

這裡選擇了 YaHei Consolas Hybrid。

mpl.rcParams['font.sans-serif'] = ['YaHei Consolas Hybrid'] #指定預設字型
mpl.rcParams['axes.unicode_minus'] = False # 解決儲存影象是負號'-'顯示為方塊的問題