首页编程开发Matplotlib【数据可视化(Matplo...

【数据可视化(Matplotlib篇)】5.中文和负号的显示问题

本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1jG-rGG4QMuZu0t0kEEl7SA?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Data_Visualization





01
中文显示问题

默认情况下,使用Matplotlib绘制图表时中文显示会呈现乱码现象,会显示为矩形的小框框。

之所以无法显示中文,是以为没有指定中文字体。因此,有两种方法可以解决,一种是在代码中指定中文字体,另一种是修改Matplotlib的配置文件。
  • 在代码中指定中文字体:

该方法也有以下两种设置方式。
1)、使用matplotlib自带的中文字体:
该方法需要使用matplotlibrcParams设置统一设置的中文字体。
该方法首先需要查找matplotlib都有哪些中文字体可用:
  • 找到matplotlib字体文件(文件默认路径为C:Users用户名.matplotlib,打开fontList.json,查找中文字体如simHei,Microsoft YaHei,song,kai等,分别对应简体黑、微软雅黑、宋体、楷体等。查找到之后,其对应的name字段值即为我们接下来将要设置的中文字体名。
  • 使用matplotlib.font_manager.FontManager().ttflist语句查看系统字体。

在脚本开头加入以下语句即可(下面代码将中文字体设置为黑体):
plt.rcParams['font.sans-serif'] = ['SimHei'## 设置中文字体

或者

plt.rcParams['font.family'] = 'SimHei' ## 设置中文字体

TIPS:

font sans-serif是Matplotib中的一个参数,用于设置无衬线字体的名称。它可以是一个字符串,也可以是一个字符串列表,用于指定多个备选字体。如果指定的字体不存在,则会使用默认字体。 

fontfamily是Matplotib中的另一个参数,用于设置字体族的名称。它可以是一个字符串,也可以是一个字符串列表,用于指定多个备选字体族。如果指定的字体族不存在,则会使用默认字体族。在Matplotib中,常见的字体族包括sans-serif(无衬线字体)、serif(衬线字体)、monospace(等宽字体)

例如,我们将XY轴和图表标题设置为微软雅黑字体(Microsoft YaHei):
# 设置全局字体
plt.rcParams["font.sans-serif"] = "Microsoft YaHei"

plt.plot([0,1,2,3], [0,1,2,3], linestyle="--")

plt.title(label="图表标题" , fontsize="xx-large")
plt.xlabel(xlabel="X轴标题", fontsize="xx-large")
plt.ylabel(ylabel="Y轴标题", fontsize="xx-large")

plt.show()
可视化结果如下图所示:

2)、使用电脑本地的中文字体:

通过rcParams设置中文字体时会把图形中所有中文字符设置为相同的字体,如果想为坐标轴标签、刻度、图形标题设置不同的字体,可以通过如下方式完成:

  • 可以使用matplotlib.font_manager.FontProperties根据本地字体文件(.ttf)创建字体;

  • 然后在调用函数xlabel()/ylabel()xticks()/yticks()title()或轴域相关方式时使用参数fontproperties来指定字体。

例如,下面我们将X轴、Y轴、图表的标题分别设置为中文字体:
plt.plot([0,1,2,3], [0,1,2,3], linestyle="--")

# 读取字体
font1 = matplotlib.font_manager.FontProperties(fname=r'./Fonts/simfang.ttf')
font2 = matplotlib.font_manager.FontProperties(fname=r'./Fonts/站酷锐锐体.ttf')
font3 = matplotlib.font_manager.FontProperties(fname=r'./Fonts/站酷叶小凉尺素体.ttf')

# 使用参数fontproperties来指定字体
plt.title(label="图表标题" , fontsize="xx-large" , fontproperties=font1)
plt.xlabel(xlabel="X轴标题", fontsize="xx-large" , fontproperties=font2)
plt.ylabel(ylabel="Y轴标题", fontsize="xx-large" ,fontproperties=font3)

plt.show()
可视化结果如下图所示:

  • 修改Matplotlib的配置文件:

该方法将会修改Matplotlib的配置文件,将Matplotlib的默认字体调整为中文字体。
1)、查询配置文件路径:
使用以下语句查询Matplotlib配置文件的路径:
matplotlib.matplotlib_fname()
2)、修改文件:
打开路径下的matplotlibrc文件,找到以#font.sans-serif以及#font.family:开头这两行,删除#取消注释,并在font.sans-serif后添加C:WindowsFonts中存在的中文字体名(本次添加仿宋字体),然后保存文件并重新启动Notebook

设置完成后matploltib默认字体就是仿宋字体,不用再指定字体:
plt.plot([0,1,2,3], [0,1,2,3], linestyle="--")

plt.title(label="图表标题" , fontsize="xx-large")
plt.xlabel(xlabel="X轴标题", fontsize="xx-large")
plt.ylabel(ylabel="Y轴标题", fontsize="xx-large")

plt.show()
可视化结果如下图所示:

02
负号显示问题

默认情况下,使用Matplotlib绘制图表时,当需要显示负数时会呈现乱码现象,会显示为矩形的小框框。

之所以无法显示,是因为matplotlib默认将-设置为连字符,而非减号。要解决上述问题只需脚本开头加入以下语句:
matplotlib.rcParams['axes.unicode_minus']=False
或者打开matplotlibrc文件,找到以#axes.unicode_minus: True这行,删除#取消注释,并将True修改为False,保存文件,重启环境。
此时,负号即可正常显示,可视化结果如下图所示:


更多内容可以前往官网查看

https://matplotlib.org/stable/


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments