Python 数据分析三剑客之 Matplotlib(一):初识 Matplotlib 与其 matplotibrc 配置文件


这里是一段防爬虫文本,请读者忽略。
本文原创首发于 CSDN,作者 TRHX。
博客首页:https://itrhx.blog.csdn.net/
本文链接:https://itrhx.blog.csdn.net/article/details/105638122

【1x00】认识 Matplotlib

Matplotlib 是建立在 NumPy 数组基础上的多平台数据可视化程序库,用于在 Python 中绘制数组的 2D 图形库,最初被设计用于完善 SciPy 的生态环境,虽然它起源于模仿 Matlab 图形命令,但它独立于 Matlab,可以以 Pythonic 和面向对象的方式使用。虽然 Matplotlib 主要是在纯 Python 中编写的,但它大量使用 NumPy 和其他扩展代码,即使对于大型数组也能提供良好的性能。它与 NumPy 一起使用,提供了一种有效的 Matlab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。Matplotlib 最重要的特性之一就是具有良好的操作系统兼容性和图形显示底层接口兼容性。

【1x01】简单示例

>>> import matplotlib.pyplot as plt
>>> x = range(2, 26, 2)     # 数据在 x 轴的位置,是一个可迭代对象
>>> y = range(0, 12)        # 数据在 y 轴的位置,是一个可迭代对象
>>> plt.plot(x, y)          # 绘制线形图
[<matplotlib.lines.Line2D object at 0x00BA1D18>]
>>> plt.show()

01

【1x02】图像结构

02

【1x03】三层结构

Matplotlib 三层结构:容器层、辅助显示层、图像层

容器层

容器层主要由 Canvas、Figure、Axes 组成。

  • Canvas 是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。
  • Figure 是 Canvas 上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色,可以通过 plt.figure() 设置画布的大小和分辨率等
  • Axes 是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色,注意与 Axis 的区别,Axis 是坐标轴,包含大小限制、刻度和刻度标签。

注意点:

  • 一个figure(画布)可以包含多个axes(坐标系/绘图区),但是一个 axes 只能属于一个figure。
  • 一个axes(坐标系/绘图区)可以包含多个axis(坐标轴),包含两个即为 2d 坐标系,三个即为 3d 坐标系 。
辅助显示层

辅助显示层为 Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括 Axes 外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。

图像层

图像层指 Axes 内通过 plot(线形图)、scatter(散点图)、bar(柱状图)、histogram(直方图)、pie(饼图) 等函数根据数据绘制出的图像。

三者关系总结
  • Canvas(画板)位于最底层,用户一般接触不到;
  • Figure(画布)建立在 Canvas 之上;
  • Axes(绘图区)建立在Figure之上;
  • 坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在 Axes 之上。

【2x00】了解 matplotlib.rcParams

matplotlib 使用 matplotlibrc 配置文件来自定义图形的各种默认属性,称之为 rc 配置或 rc 参数。通过 rc 参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。rc 参数存储在字典变量中,通过字典的方式进行访问。

执行 matplotlib.rcParams.keys() 命令可以查看所有的 rc 参数及其默认值;
执行 matplotlib.matplotlib_fname() 命令可以查看 matplotlibrc 配置文件在本地的路径。

官网介绍:https://matplotlib.org/tutorials/introductory/customizing.html

配置文件 matplotibrc 主要包括以下配置要素:

  • axes:坐标轴的背景颜色、坐标轴的边缘颜色、刻度线的大小、刻度标签的字体大小等;
  • figure:画布标题大小、画布标题粗细、画布像素(dpi)、 画布背景颜色和边缘颜色等;
  • font:字体类别、字体风格、字体粗细和字体大小等;
  • grid:网格颜色、网格线条风格、网格线条宽度和网格透明度;
  • legend:图例的文本大小、阴影、图例线框风格等;
  • lines:设置线条属性,包括颜色、线条风格、线条宽度和标记风格等;
  • patch:填充 2D 空间的图形对象,包括多边形和圆;
  • savefig:保存画布图像的分辨率、背景颜色和边缘颜色等;
  • text:文本颜色、LaTex 渲染文本等;
  • xtick / ytick:x 轴和 y 轴的主次要刻度线的大小、宽度、刻度线颜色和刻度标签大小等。

我们可以在 Python 项目中动态设置 rc 参数,所有 rc 参数设置都存储在名为 matplotlib.rcParams 的类似于字典的变量中,该变量对于 Matplotlib 软件包是全局的。rcParams 可以直接修改。通过这种方法的修改会对全局产生影响,在 Matplotlib 的其他方法中也可以单独对某个参数进行修改,后续介绍不同方法时会见到。


rcParams 修改示例:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']   # 定义全局字体
plt.rcParams['xtick.color'] = 'red'         # 定义 x 轴刻度颜色
plt.rcParams['lines.marker'] = 'o'          # 定义线条上点的形状
plt.rcParams['legend.loc'] = 'upper left'   # 定义图例在左上角

x = range(2, 26, 2)
y = range(0, 12)
a = [5, 10, 15, 20, 25, 30]
b = [3, 4, 5, 6, 7, 8]

plt.title('This is a title / 这是标题')
plt.xlabel('这是 x 轴标题')
plt.ylabel('这是 y 轴标题')
plt.grid(True)
plt.plot(x, y)
plt.plot(a, b)
plt.legend(['图例一', '图例二'])

plt.show()

03


【2x01】axes 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’axes.axisbelow’] = ‘line’ 网格线和刻度的位置 line:在画板上方,在线条下方
False:在线条和画板的上方
True:在画板下方
mpl.rcParams[’axes.edgecolor’] = ‘black’ 轴边缘颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’axes.facecolor’] = ‘white’ 轴背景色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’axes.labelcolor’] = ‘black’ 轴标题颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’axes.grid’] = False 是否显示网格 False:不显示网格;True:显示网格
mpl.rcParams[’axes.grid.axis’] = ‘both’ 网格应用于哪个轴 x:x 轴;y:y 轴;both:同时应用于两个轴
mpl.rcParams[’axes.grid.which’] = ‘major’ 网格应用于哪个刻度 major:主(大)刻度;minor:次(小刻度);
both:同时应用于两个刻度
mpl.rcParams[’axes.labelpad’] = 4.0 轴标题和轴之间的间距 float 类型间距值
mpl.rcParams[’axes.labelsize’] = ‘medium’ x 轴和 y 轴标题的字体大小 xx-small, x-small, small, medium
large, x-large, xx-large, smaller, larger
也可以使用数字来表示字体大小
mpl.rcParams[’axes.labelweight’] = ‘normal’ x 轴和 y 轴标题的字体粗细 normal:正常粗细;bold:粗体;light:细体
数字值 400 等价于 normal700 等价于 bold
mpl.rcParams[’axes.linewidth’] = 0.8 轴边线宽度 float 类型宽度值
mpl.rcParams[’axes.titlecolor’] = ‘auto’ 图表标题颜色 默认取 text.color 的值
其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’axes.titlelocation’] = ‘center’ 图表标题位置 left:左;right:右;center:中间
mpl.rcParams[’axes.titlepad’] = 6.0 图表标题和轴之间的间距 float 类型间距值
mpl.rcParams[’axes.titlesize’] = ‘large’ 图表标题字体大小 xx-small, x-small, small, medium
large, x-large, xx-large, smaller, larger
也可以使用数字来表示字体大小
mpl.rcParams[’axes.titleweight’] = ‘normal’ 图表标题字体粗细 normal:正常粗细;bold:粗体;light:细体
数字值 400 等价于 normal700 等价于 bold
mpl.rcParams[’axes.xmargin’] = 0.05 x 轴边距 取值范围 [0, 1]
mpl.rcParams[’axes.ymargin’] = 0.05 y 轴边距 取值范围 [0, 1]
mpl.rcParams[’axes.unicode_minus’] = True 对负号使用 Unicode 而不是连字符 True:是;False:否
mpl.rcParams[’axes3d.grid’] = True 是否在三维轴上显示网格 True:是;False:否

【2x02】figure 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’figure.dpi’] = 100 画布像素(dpi) float 类型像素值
mpl.rcParams[’figure.edgecolor’] = ‘white’ 画布边缘颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’figure.facecolor’] = ‘white’ 画布背景颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’figure.figsize’] = [6.4, 4.8] 画布尺寸 [长, 宽] float 类型尺寸值(英寸)
mpl.rcParams[’figure.frameon’] = True 是否启用图框 True:是;False:否
mpl.rcParams[’figure.titlesize’] = ‘large’ 画布标题大小 xx-small, x-small, small, medium
large, x-large, xx-large, smaller, larger
也可以使用数字来表示字体大小
mpl.rcParams[’figure.titleweight’] = ‘normal’ 画布标题粗细 normal:正常粗细;bold:粗体;light:细体
数字值 400 等价于 normal700 等价于 bold

【2x03】font 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’font.family’] = [‘sans-serif’] 规定字体系列 字体名称
mpl.rcParams[’font.sans-serif’] = [‘DejaVu Sans, …’] 定义无衬线字体 默认是一些西文字体,可将其设置成其他字体来显示中文
mpl.rcParams[’font.serif’] = [‘DejaVu Sans, …’] 定义有衬线字体 默认是一些西文字体,可将其设置成其他字体来显示中文
mpl.rcParams[’font.size’] = 10.0 定义字体大小 float 数字类型字体大小
mpl.rcParams[’font.weight’] = ‘normal’ 定义字体粗细 normal:正常粗细;bold:粗体;light:细体
数字值 400 等价于 normal700 等价于 bold

【2x04】grid 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’grid.alpha’] = 1.0 网格透明度 float 类型,取值范围:[0, 1]
mpl.rcParams[’grid.color’] = ‘#b0b0b0’ 网格颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’grid.linestyle’] = ‘-’ 网格线的样式 '-', '--', '-.', ':', 'solid', 'dashed', 'dashdot', 'dotted', 'none', ' ', ''
mpl.rcParams[’grid.linewidth’] = 0.8 网格宽度 float 类型宽度值

【2x05】legend 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’legend.borderaxespad’] = 0.5 图例距离轴之间的距离 float 类型距离值
mpl.rcParams[’legend.borderpad’] = 0.4 图例边框空白区域大小 float 类型大小值
mpl.rcParams[’legend.columnspacing’] = 2.0 图例列间距 float 类型距离值
mpl.rcParams[’legend.edgecolor’] = 0.8 图例边缘线颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’legend.facecolor’] = ‘inherit’ 图例背景颜色 默认继承自 axes.facecolor
其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’legend.fancybox’] = True 是否使用圆形框作为图例背景 True:使用圆形框;False:使用矩形框
mpl.rcParams[’legend.fontsize’] = ‘medium’ 图例字体大小 xx-small, x-small, small, medium
large, x-large, xx-large, smaller, larger
也可以使用数字来表示字体大小
mpl.rcParams[’legend.framealpha’] = 0.8 图例透明度 float 类型,取值范围:[0, 1]
mpl.rcParams[’legend.frameon’] = True 是否在画布之上绘制图例 True:是;False:否
mpl.rcParams[’legend.handleheight’] = 0.7 图例的高度 float 类型高度值
mpl.rcParams[’legend.handlelength’] = 2.0 图例的宽度 float 类型宽度值
mpl.rcParams[’legend.handletextpad’] = 0.8 图例和图例文本之间的水平距离 float 类型距离值
mpl.rcParams[’legend.labelspacing’] = 0.5 不同图例之间的垂直距离 float 类型距离值
mpl.rcParams[’legend.loc’] = ‘best’ 图例在画布中的位置 best, upper right, upper left, lower left
lower right, right, center left, center right
lower center, upper center, center
mpl.rcParams[’legend.shadow’] = False 是否给图例添加阴影效果 True:是;False:否

【2x06】lines 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’lines.antialiased’] = True 是否以抗锯齿方式渲染线条 True:是;False:否
mpl.rcParams[’lines.color’] = ‘C0’ 线条颜色(对 plot() 没有影响) 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’lines.linestyle’] = ‘-’ 线条样式 '-', '--', '-.', ':', 'solid', 'dashed',
'dashdot', 'dotted', 'none', ' ', ''
mpl.rcParams[’lines.linewidth’] = 1.5 线条宽度 float 类型宽度值
mpl.rcParams[’lines.marker’] = ‘None’ 线条上点的形状 ., ,, o, v, ^ 等,具体常见 matplotlib.markers
mpl.rcParams[’lines.markeredgecolor’] = ‘auto’ 线条上点边缘的颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’lines.markerfacecolor’] = ‘auto’ 线条上点的颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’lines.markeredgewidth’] = 1.0 线条上点的粗细 float 类型粗细值
mpl.rcParams[’lines.markersize’] = 6.0 线条上点的大小 float 类型大小值

【2x07】patch 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’patch.antialiased’] = True 以抗锯齿方式渲染补丁 True:是;False:否
mpl.rcParams[’patch.edgecolor’] = ‘black’ 补丁边缘颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’patch.facecolor’] = ‘C0’ 补丁颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’patch.linewidth’] = 1.0 补丁边缘宽度(以磅为单位) float 类型宽度值

【2x08】savefig 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’savefig.bbox’] = None 是否以紧凑形式保存图片 standard:标准形式;tight:紧凑形式
(去掉边上多余的空白)
mpl.rcParams[’savefig.pad_inches’] = 0.1 savefig.bbox 参数为 tight 时,
图片使用的填充值
(相当于 html 中的 Padding)
float 类型填充值
mpl.rcParams[’savefig.dpi’] = ‘figure’ 保存图片的像素(dpi) str 类型像素值
mpl.rcParams[’savefig.edgecolor’] = ‘white’ 保存图片的边缘颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’savefig.facecolor’] = ‘white’ 保存图片的画布颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’savefig.format’] = ‘png’ 保存图片的格式 eps, pdf, pgf, png, ps, raw, rgba, svg, svgz
mpl.rcParams[’savefig.transparent’] = False 保存图片的背景是否透明 True:是;False:否

【2x09】text 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’text.antialiased’] = True 是否以抗锯齿方式渲染文本 True:是;False:否
mpl.rcParams[’text.color’] = ‘red’ 文本颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’text.usetex’] = False 是否使用 LaTeX 排版系统
(主要用于生成复杂表格和数学公式)
True:是;False:否

【2x10】xtick 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’xtick.color’] = ‘black’ x 轴刻度的颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’xtick.direction’] = ‘out’ x 轴刻度的方向 in:内部(x 轴上方);out:外部(x 轴下方)
inout:同时在内部和外部
mpl.rcParams[’xtick.bottom’] = True 是否在画布底部显示 x 轴刻度 True:是;False:否
mpl.rcParams[’xtick.top’] = False 是否在画布顶部显示 x 轴刻度 True:是;False:否
mpl.rcParams[’xtick.labelbottom’] = True 是否在画布底部显示 x 轴刻度文字标签 True:是;False:否
mpl.rcParams[’xtick.labeltop’] = False 是否在画布顶部显示 x 轴刻度文字标签 True:是;False:否
mpl.rcParams[’xtick.labelsize’] = ‘medium’ x 轴刻度文字大小 xx-small, x-small, small, medium
large, x-large, xx-large, smaller, larger
也可以使用数字来表示字体大小
mpl.rcParams[’xtick.major.bottom’] = True 是否在画布底部显示 x 轴主(大)刻度 True:是;False:否
mpl.rcParams[’xtick.major.top’] = True 是否在画布顶部显示 x 轴主(大)刻度 True:是;False:否
mpl.rcParams[’xtick.major.pad’] = 3.5 x 轴主(大)刻度与文字标签的距离 float 类型距离值
mpl.rcParams[’xtick.major.size’] = 3.5 x 轴主(大)刻度的大小 float 类型大小值
mpl.rcParams[’xtick.major.width’] = 0.8 x 轴主(大)刻度的宽度 float 类型宽度值
mpl.rcParams[’xtick.minor.bottom’] = True 是否在画布底部显示 x 轴次(小)刻度 True:是;False:否
mpl.rcParams[’xtick.minor.top’] = True 是否在画布顶部显示 x 轴次(小)刻度 True:是;False:否
mpl.rcParams[’xtick.minor.pad’] = 3.4 x 轴次(小)刻度与文字标签的距离 float 类型距离值
mpl.rcParams[’xtick.minor.size’] = 2.0 x 轴次(小)刻度的大小 float 类型大小值
mpl.rcParams[’xtick.minor.width’] = 0.6 x 轴次(小)刻度的宽度 float 类型宽度值
mpl.rcParams[’xtick.minor.visible’] = False x 轴次(小)刻度的可见性 True:是;False:否

【2x11】ytick 部分属性

属性及其默认值 描述 其他取值
mpl.rcParams[’ytick.color’] = ‘black’ y 轴刻度的颜色 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见官网 Color Demo
mpl.rcParams[’ytick.direction’] = ‘out’ y 轴刻度的方向 in:内部(y 轴右方);out:外部(y 轴左方)
inout:同时在内部和外部
mpl.rcParams[’ytick.left’] = True 是否在画布左边显示 y 轴刻度 True:是;False:否
mpl.rcParams[’ytick.right’] = False 是否在画布右边显示 y 轴刻度 True:是;False:否
mpl.rcParams[’ytick.labelleft’] = True 是否在画布左边显示 y 轴刻度文字标签 True:是;False:否
mpl.rcParams[’ytick.labelright’] = False 是否在画布右边显示 y 轴刻度文字标签 True:是;False:否
mpl.rcParams[’ytick.labelsize’] = ‘medium’ y 轴刻度文字大小 xx-small, x-small, small, medium
large, x-large, xx-large, smaller, larger
也可以使用数字来表示字体大小
mpl.rcParams[’ytick.major.left’] = True 是否在画布左边显示 y 轴主(大)刻度 True:是;False:否
mpl.rcParams[’ytick.major.right’] = True 是否在画布右边显示 y 轴主(大)刻度 True:是;False:否
mpl.rcParams[’ytick.major.pad’] = 3.5 y 轴主(大)刻度与文字标签的距离 float 类型距离值
mpl.rcParams[’ytick.major.size’] = 3.5 y 轴主(大)刻度的大小 float 类型大小值
mpl.rcParams[’ytick.major.width’] = 0.8 y 轴主(大)刻度的宽度 float 类型宽度值
mpl.rcParams[’ytick.minor.left’] = True 是否在画布左边显示 y 轴次(小)刻度 True:是;False:否
mpl.rcParams[’ytick.minor.right’] = True 是否在画布右边显示 y 轴次(小)刻度 True:是;False:否
mpl.rcParams[’ytick.minor.pad’] = 3.4 y 轴次(小)刻度与文字标签的距离 float 类型距离值
mpl.rcParams[’ytick.minor.size’] = 2.0 y 轴次(小)刻度的大小 float 类型大小值
mpl.rcParams[’ytick.minor.width’] = 0.6 y 轴次(小)刻度的宽度 float 类型宽度值
mpl.rcParams[’ytick.minor.visible’] = False y 轴次(小)刻度的可见性 True:是;False:否
发布了163 篇原创文章 · 获赞 1075 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/qq_36759224/article/details/105638122