Zodiac Wang
  • Home
  • Categories
  • Tags
  • Archives

Windows系统Matplotlib无法显示中文解决办法

In [1]:
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontManager
%matplotlib inline

import numpy as np

import subprocess

检测matplotlib可用字体

In [2]:
fm = FontManager()
mat_fonts=set(f.name for f in fm.ttflist)

mat_fonts
Out[2]:
{'Adobe Devanagari',
 'Arial',
 'Bahnschrift',
 'Book Antiqua',
 'Bookman Old Style',
 'Bookshelf Symbol 7',
 'Calibri',
 'Cambria',
 'Candara',
 'Century',
 'Century Gothic',
 'Comic Sans MS',
 'Consolas',
 'Constantia',
 'Corbel',
 'Courier New',
 'DejaVu Sans',
 'DejaVu Sans Display',
 'DejaVu Sans Mono',
 'DejaVu Serif',
 'DejaVu Serif Display',
 'DengXian',
 'Dubai',
 'Ebrima',
 'FZShuTi',
 'FZYaoTi',
 'FangSong',
 'Franklin Gothic Medium',
 'Gabriola',
 'Gadugi',
 'Garamond',
 'Georgia',
 'HoloLens MDL2 Assets',
 'Impact',
 'Ink Free',
 'Javanese Text',
 'KaiTi',
 'Leelawadee',
 'Leelawadee UI',
 'LiSu',
 'Lucida Console',
 'Lucida Sans Unicode',
 'MS Reference Sans Serif',
 'MS Reference Specialty',
 'MT Extra',
 'MV Boli',
 'Malgun Gothic',
 'Marlett',
 'Microsoft Himalaya',
 'Microsoft New Tai Lue',
 'Microsoft PhagsPa',
 'Microsoft Sans Serif',
 'Microsoft Tai Le',
 'Microsoft Uighur',
 'Microsoft Yi Baiti',
 'Mongolian Baiti',
 'Monotype Corsiva',
 'Myanmar Text',
 'Nirmala UI',
 'Palatino Linotype',
 'STCaiyun',
 'STFangsong',
 'STHupo',
 'STIXGeneral',
 'STIXNonUnicode',
 'STIXSizeFiveSym',
 'STIXSizeFourSym',
 'STIXSizeOneSym',
 'STIXSizeThreeSym',
 'STIXSizeTwoSym',
 'STKaiti',
 'STLiti',
 'STSong',
 'STXihei',
 'STXingkai',
 'STXinwei',
 'STZhongsong',
 'Segoe MDL2 Assets',
 'Segoe Print',
 'Segoe Script',
 'Segoe UI',
 'Segoe UI Emoji',
 'Segoe UI Historic',
 'Segoe UI Symbol',
 'SimHei',
 'SimSun-ExtB',
 'Sylfaen',
 'Symbol',
 'Tahoma',
 'TeamViewer14',
 'Times New Roman',
 'Trebuchet MS',
 'Verdana',
 'Webdings',
 'Wingdings',
 'Wingdings 2',
 'Wingdings 3',
 'YouYuan',
 'ZWAdobeF',
 'cmb10',
 'cmex10',
 'cmmi10',
 'cmr10',
 'cmss10',
 'cmsy10',
 'cmtt10'}

一般来说,SimHei应该都是包含在内的,只需在画图时指定字体即可

如果检测不到可用中文字体,可以手动安装字体

检测matplotlib字体文件夹

In [3]:
mpl.matplotlib_fname()
Out[3]:
'c:\\users\\twang\\appdata\\local\\conda\\conda\\envs\\py36\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'

字体文件夹应该位于和mpl-data同级的位置,下载中文字体后放入ttf文件夹内即可(尚未测试)

In [4]:
# 可选项

mpl.font_manager._rebuild() #reload一下
In [5]:
font_name = "SimHei"
# font_name = "KaiTi"
mpl.rcParams['font.family']= font_name # 指定字体,实际上相当于修改 matplotlibrc 文件 只不过这样做是暂时的 下次失效
mpl.rcParams['axes.unicode_minus']=False # 正确显示负号,防止变成方框

t = np.linspace(0, 2*np.pi, 1000, endpoint=False)
y = np.sin(t)
fig, ax = plt.subplots()

ax.set_xlabel(u"text for t轴")
ax.set_ylabel(u"text for y轴")
ax.set_title(u"t和y对应关系")
ax.plot(t,y)
plt.savefig("test.png", bbox_inches='tight', dpi = 1000)

plt.text(0.5, 0.5, s=u'测试')
plt.show()

  • « Matplotlib动态绘图及保存
  • 我的Matplotlib绘图模板 »

Published

1 6, 2019

Category

posts

Tags

  • Matplotlib 10

Contact

  • Zodiac Wang - A Fantastic Learner
  • Powered by Pelican. Theme: Elegant