本文作者:qiaoqingyi

编程派教育(编程教育软件)

qiaoqingyi 2023-10-25 157

  最近做了一个云盘性能对比,用 matplotlib 绘制了一张图,但是碰到了中文乱码问题。简单搜索之后,发现有人总结出了比较好的方案,亲测可行。推荐给大家。

  作者:nphard

  原文链接:http://nphard.me/2016/03/27/matplotlib-cn

  一个中文乱码问题,让我搞的好苦,总结一下。

  安装 matplotlib

  pip 安装失败,使用 apt - get install matplotlib安装成功

  简单程序

importmatplotlib.pyplot aspl

frommatplotlib.ticker importMultipleLocator, FuncFormatter

x = [1, 2, 3, 4]

编程派教育(编程教育软件)

y = [1, 2, 3, 4]

pl.figure(figsize=(8, 4))

pl.plot(x, y)

pl.title('标题')

pl.xlabel('x轴')

pl.ylabel('y轴')

ax = pl.gca()

defpi_formatter(x, pos):

returnstr(int(x)) + '月'

# 设置两个坐标轴的范围

pl.ylim(0, 10)

pl.xlim(0, 12)

# 设置图的底边距

pl.subplots_adjust(bottom=0.15)

pl.grid() # 开启网格

# 主刻度为1

ax.xaxis.set_major_locator(MultipleLocator(1))

# 主刻度文本用pi_formatter函数计算

ax.xaxis.set_major_formatter(FuncFormatter(pi_formatter))

# 设置刻度文本的大小

fortick inax.xaxis.get_major_ticks():

tick.label1.set_fontsize(14)

pl.show()

  运行了发现,所有的中文都变成了一个小方框,简单尝试了在开头加 #-*- coding : UTF -8 -*-,和在`'标题'`前加 u,都不好使

  动态加载字体

frommatplotlib.font_manager importFontProperties

font = FontProperties(

fname=r"/usr/share/fonts/truetype/arphic/ukai.ttc", size=14)

pl.title('测试程序', fontproperties=font)

pl.xlabel('x轴', fontproperties=font)

pl.ylabel('y轴', fontproperties=font)

  ukai是系统里的中文字体。系统里的中文字体可以通过命令 fc - list : lang =zh列出。

  尝试后可以发现 title 和 label 的中文显示都正常了,但坐标轴的刻度文字依然不能正常显示。

  配置文件 matplotlibrc

  这个配置文件在 /etc/下,有的在 ~/.matplotlib/下。可以通过 matplotlib.matplotlib_fname ()打印获得这个路径。

  编辑该配置文件,找到 font.family,将注释去掉,在下面的 font.sans - serif :Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial,Helvetica, Avant Garde, sans - serif加上中文字体 SimHei。

font.family:

sans - serif

font.sans - serif:

SimHei, BitstreamVeraSans, LucidaGrande, Verdana, Geneva, Lucid, Arial, Helvetica, AvantGarde, sans - serif

  或者直接改为 font.family : SimHei

  SimHei可以到 http://fontzone.net/download/simhei下载,我尝试过使用上面提到的 ukai,没有效果。

  下载的 SimHei 放到下面任何一个路径均可:

/usr /share / fonts / truetype

/usr / share / matplotlib / mpl - data / fonts / ttf

~ / .fonts

清除缓存

  做了上面的更改,发现并没有什么卵用。

  到 ~/.cache/matplotlib下的文件删掉,就ok了。

  另一种方式,动态配置

frommatplotlib importrcParams

rcParams['font.sans-serif'] = ['SimHei']

rcParams['font.family'] = 'sans-serif'

  这样可以不通过配置文件,动态配置。

  点击阅读原文,查看更多 Python 教程和资源

阅读
分享