一文详解matplotlib的配置文件以及配置方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27825451/article/details/82732675

欢迎关注“勇敢AI”公众号,更多python学习、数据分析、机器学习、深度学习原创文章与大家分享,还有更多电子资源、教程、数据集下载。勇敢AI,一个专注于人工智能AI的公众号。

==================================================================================

一、matplotlib配置

     我们使用matplotlib所画出来的图形中,会呈现出各种各样的样式,除了我们手动设置自定义的配置属性以外,matplotlib自带了一套配置方案以及各种默认的图形配置信息,幸运的是,几乎所有的配置信息都能够通过一组全局参数进行自定义,这些参数管理着图像的大小、subplot边距、配色方案、字体、网格等一系列信息。

二、matplotlibrc——matplotlib resource configurations 的配置方式

matplotlib的图形配置方式有很多,主要是从以下三个方面进行配置的。

  • 通过配置文件进行配置——查看+设置
  • 通过rcParams['参数名']动态配置——查看+设置
  • 通过matplotlib.rc()函数配置

1、通过配置文件进行配置——matplotlibrc

    matplotlibrc是matplotlib的配置文件,配置文件分为几个不同的级别,比如我们默认的是所有的图形都是使用默认的配置,因为我们使用的是全局的默认配置,但是如果我们希望,每一个项目都单独使用一套不同的配置,或者是不同的用户使用一套不同的配置,这就需要使用到局部配置文件。使用不同的配置参数的方式,是让你能够在不同的项目中使用不同的参数配置,不同的同事和项目之间分配配置模板。

matplotlib通过matplotrc文件来进行配置,这个文件根据他们的应用范围可以有一下三个级别:

(1)当前工作目录:代码运行的目录,可以为目录所包含的当前项目代码定制matplotlib配置项。配置文件的名称是matplotlibrc

                                 在这个单独的项目中,都是用这一套配置文件,默认是没有的,我们需要自己创建,怎么创建呢?后面会讲                                    到。

(2)用户级配置文件:即用户目录之下的.matplotlib/matplotlibrc文件。通常是在用户的$HOME中(也就是windows系统中的                                    Users\目录)。比如我的用户目录为:C:\Users\XinAir\.matplotlib\matplotlibrc,有的可能没有,同样可以自                                    己为用户创建配置文件。可以调用matplotlib.get_configdir()命令获取当前用户的配置文件目录。

(3)安装级配置文件:简装matplotlib的时候在安装路径之下的配置文件,通常在python的site-packags目录下的matplotlib文件                                      夹中的mpl-data文件夹之下,比如,我的电脑在:D:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-                                         packages\matplotlib\mpl-data\matplotlibrc

系统在画图的时候会按照(1)、(2)、(3)的顺序进行配置文件的寻找。

如果我们对上面的路径不是特别清楚,我们可以通过编程的方式进行查看,如下代码:

import matplotlib 

print(matplotlib.get_backend())    #返回matplotlib的后端
print(matplotlib.get_cachedir())   #缓存目录
print(matplotlib.get_configdir())  #配置目录
print(matplotlib.get_data_path())  #数据路径
print(matplotlib.get_home())       #用户目录

运行结果为:

TkAgg                 #这里默认的后端是TkAgg
C:\Users\XinAir\.matplotlib
C:\Users\XinAir\.matplotlib
D:\ProgramData\Anaconda3\envs\tensorflow\lib\site-packages\matplotlib\mpl-data
C:\Users\XinAir

配置文件的格式:

既然涉及到自己创建配置文件,那么配置文件的格式是什么样子呢,如何修改呢,我们可以打开安装目录之下的matplotlibrc加以查看,发现内容如下:

-------------------------------------------------------------------------------------------------------------------

#前面是以部分介绍信息以及相关的后端、工具条、可交互性、时区等等一些的设置,此处省略了。。。。。。
#### LINES                      #线型属性的设置
## See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more
## information on line properties.
#lines.linewidth   : 1.5     ## line width in points
#lines.linestyle   : -       ## solid line
#lines.color       : C0      ## has no affect on plot(); see axes.prop_cycle
#lines.marker      : None    ## the default marker
#lines.markeredgewidth  : 1.0     ## the line width around the marker symbol
#lines.markersize  : 6            ## markersize, in points
#lines.dash_joinstyle : round        ## miter|round|bevel
#lines.dash_capstyle : butt          ## butt|round|projecting
#lines.solid_joinstyle : round       ## miter|round|bevel
#lines.solid_capstyle : projecting   ## butt|round|projecting
#lines.antialiased : True         ## render lines in antialiased (no jaggies)

## The three standard dash patterns.  These are scaled by the linewidth.
#lines.dashed_pattern : 3.7, 1.6
#lines.dashdot_pattern : 6.4, 1.6, 1, 1.6
#lines.dotted_pattern : 1, 1.65
#lines.scale_dashes : True

#markers.fillstyle: full ## full|left|right|bottom|top|none

#### PATCHES              #图形patch的属性设置
## Patches are graphical objects that fill 2D space, like polygons or
## circles.  See
## http://matplotlib.org/api/artist_api.html#module-matplotlib.patches
## information on patch properties
#patch.linewidth        : 1        ## edge width in points.
#patch.facecolor        : C0
#patch.edgecolor        : k       ## if forced, or patch is not filled
#patch.force_edgecolor  : False   ## True to always use edgecolor
#patch.antialiased      : True    ## render patches in antialiased (no jaggies)

--------------------------------------------------------------------------------------------------------------------------

从上面可以看见,配置文件的格式一般为如下样式:

--------------------------------------------------------------------------------------------------------------------------

####配置对象(四个#)

##相关的描述信息(两个#)

#属性一   :  属性值

#属性二   :  属性值

#属性三   :   属性值

-----------------------------------------------------------------------------------------------------------------------------

总结:配置对象可以是一下一些:

lines        patches      hatches          boxplot          font

text          axes          dates              ticks               grids

legend     figure         images           contour plots           errorbar plots

histogram plots         acatter plots   Agg rendering       paths

saving figures

---------------------------------------------------------------------------------------------------------------------------------------------

2、通过rcParams['参数名']动态配置

(1)查看到底有哪些自定义配置属性可以设置

import matplotlib 
from  matplotlib.pylab import mpl

#print(mpl.rc_params())             #方式一
print(matplotlib.rc_params())       #方式二
print(matplotlib.rcParamsDefault)   #方式三
print(matplotlib.rcParams)          #方式四
       

上面四种方法是等价的。

(2)通过rcParams['属性名']去设置,如下:

                      mpl.rcParams['lines.linewidth'] = 2

                      matplotlib.rcParams['lines.linewidth'] = 2

                      mpl.rcParams['lines.color'] = 'r'

                      matplotlib.rcParams['lines.color'] = 'r'

上面的 mpl.rcParams['属性名']=属性值  和   matplotlib.rcParams['属性名']=属性值  是等价

3、通过rc()函数去配置相关属性

                     mpl.rc('lines', linewidth=4, color='g')

                     plt.rc('lines', linewidth=4, color='g')

                    matplotlib.rc('lines', linewidth=4, color='g')

总结:上面的三种方式等价,即通过 mpl 、plt 、matplotlib三者的 rc()方法均是等价的,该方法的第一个参数需要指定改变的对象,具体有哪些对象,上面已经说过了,然后设置相关的属性值。

三、matplotlib的相关补充

1、关于配置文件的

                      mpl.rcdefaults()      # 恢复默认参数

                      mpl.cr_file()            #从已有的文件更新

2、关于画图后端引擎的

matplotlib的后端引擎有以下一些:

   GTKAgg Agg渲染器输出到GTK绘图面板(需要PyGTK)
       GTK GDK渲染器输出到GTK绘图面板(不推荐,需要PyGTK)
    GTKCairo Cairo渲染器输出到GTK绘图面板(需要PyGTK)
     WXAgg Agg渲染器输出到wxWidgets绘图面板(需要wxPython)
    WX 原生wxWidgets绘图输出到wxWidgets绘图面板(不推荐,需要wxPython)
    TkAgg Agg渲染器输出到Tk绘图面板(需要Tkinter)
    QtAgg Agg渲染器输出到Qt绘图面板(不推荐,请使用Qt4Agg,需要PyQt)
    Qt4Agg Agg渲染器输出到Qt4绘图面板(需要PyQt4)
    FLTKAgg Agg渲染器输出到FLTK绘图面板(需要pyFLTK, 使用不是很广,考虑使用TKAgg,GTKAgg,WXAgg,或者QT4Agg替代)
    macosx Cocoa渲染器在osx上。(目前在非交互式模式缺少阻塞show()行为)

3、关于中文与负号显示的相关设置

     使用matplotlib的pyplot时,是支持unicode的,但默认字体是英文字体,  不支持中文字体,故而需要设置

(1)方法一:通过设置rcParams

from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']   #显示中文
mpl.rcParams['axes.unicode_minus']=False       #显示负号

 (2)方法二:通过使用matplotlib里面的font_manager工具,主要步骤如下:

第一步:导入font_manager:  

import matplotlib.font_manager as fm

第二步:找到中文字体在电脑中的位置,导入中文字体库

zh_font = fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')  # 字体位置,msyh.ttc是微软雅黑字体

方法二相对于方法一而言,没有那么方便,方法一是将图形中所设置的中文一次性全部显示出来,但是方法二不能,它需要将标题、坐标名称、刻度单独设置,不能一次性设置完,如下所示:

第三步:单独针对需要设置中文的位置进行设置

a. 图例中出现中文:

plt.plot(x,y, 'g-',label='一条曲线')    
plt.legend(prop=zh_font)   #设置图例的中文显示

b. title和横纵坐标等地方出现中文:

plt.xlabel('性别',fontproperties=zhfont1)     #设置X轴名称
plt.ylabel('人数',fontproperties=zhfont1)     #设置Y轴标题
plt.title('直方图',fontproperties=zhfont1)    #设置图形的名称
plt.xticks( (0,1),('男','女') ,fontproperties=zhfont1) #设置标签为中文

如果有希腊字母时,使用双"$...$"符号,如plt.xlabel(u'$ω$')

(3)方法三:直接修改全局的安装目录下的matplotlibrc文件

第一步:修改matplotlibrc文件

使用任何一个文件编辑器(推荐vscode),修改该文件,通过ctrl+f搜索找到

#axes.unicode_minus  : True    ## use unicode for the minus symbol
#font.family         : sans-serif
#font.sans-serif     : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

分别修改为以下三行

axes.unicode_minus  : False    ## use unicode for the minus symbol
font.family         : Microsoft YaHei
font.sans-serif     : Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

上面修改的三行都需要删除第一个#,取消注释

  1. 第一行,修改True为False,是为了正常显示负号
  2. 第二行和第三行是为了使用微软雅黑作为默认字体

第二步:删除缓存

使用下面的代码,获取缓存文件夹.

import matplotlib
print(matplotlib.get_cachedir())

我的输出为

C:\Users\xinair\.matplotlib

所以,一般在用户目录的matplotlib,删除该目录下的所有文件

将上面的两项删除,然后重启Python即可(意思是关闭所有正在运行的Python窗口,然后重新打开,要不然无法生效)

上面三种方法均可以实现中文显示,推荐使用第一种,简单方便,第二种设置更加灵活,第三种不太推荐,因为全局的设置会破坏原本的安装结构,而又不是每一个项目都需要显示中文的,不太推荐这个。

注意事项:怎么知道那一种字体的名称呢?

在使用第二种或者是第三种方法的时候,需要知道字体的名称,比如msyh.ttc,simsun.ttc,当我们打开windows中的字体文件夹,发现并找不到或者是名字又不是一样的,怎么办呢?以“微软雅黑”为例。

在windows的Fonts文件夹下,找到微软雅黑,发现显示的是中文 微软雅黑 四个汉字,将其复制,然后粘贴到matplotlib未知的ttf文件夹中,即

D:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

这是专门存放字体的文件夹,粘贴之后发现,它本质上就是msyh.ttc字体文件,现在就方便使用了。

下面是常用的一些中文字体的对应关系:

Fonts文件夹下面的中文名称 复制到  tt  f里面的名称
宋体 simsun.ttc
仿宋 simfang.ttf
黑体 simhei.ttf
楷体 simkai.ttf
微软雅黑 msyh.ttc
等线 Deng.ttf

此外,对于拉丁文字体、藏语字体、朝语字体、日语字体等的处理方式是一样的。

猜你喜欢

转载自blog.csdn.net/qq_27825451/article/details/82732675