Matplotlib 之 HelloWorld
1 什么是 Matplotlib
 (1) (1) (1) (1) (1) (1) (1) (1).2a6574bf.png)
- 是专门用于开发 2D 图表(包括 3D 图表)
- 以渐进、交互式方式实现数据可视化
2 为什么要学习 Matplotlib
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。
- 能将数据进行可视化,更直观的呈现
- 使数据更加客观、更具说服力
例如下面两个图为数字展示和图形展示:
 (1) (1) (1) (1) (1) (1) (1) (1).3349552d.png)
3 实现一个简单的 Matplotlib 画图 — 以折线图为例
3.1 matplotlib.pyplot 模块
matplotlib.pytplot 包含了一系列类似于 matlab 的画图函数。
import matplotlib.pyplot as pltimport matplotlib.pyplot as plt3.2 图形绘制流程
- 1.创建画布 -- plt.figure()
- 2.绘制图像 -- plt.plot(x, y)
- 3.显示图像 -- plt.show()
3.3 折线图绘制与显示
举例:展现上海一周的天气,比如从星期一到星期日的天气温度如下
import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(10, 10), dpi=100)
# 2.绘制折线图
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
# 3.显示图像
plt.show()import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(10, 10), dpi=100)
# 2.绘制折线图
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
# 3.显示图像
plt.show() (1) (1) (1) (1) (1).302a84f1.png)
4 认识 Matplotlib 图像结构(了解)
 (1) (1) (1) (1) (1) (1) (1) (1).16a5b1e4.png)
5 三层结构
Matplotlib 拥有三层架构,即后端(Backend)、艺术家(Artist)和脚本编写(Scripting),它们按照逻辑顺序组织成一个堆栈。脚本编写是开发人员使用的 API,用于创建图表。艺术家则负责在内部实际创建图表。而后端则是显示图表的地方。
Backend
Backend 是 Matplotlib 的绘图引擎,负责绘制图形并将其显示在屏幕上。Matplotlib 有有两种类型的后端:用户界面后端(用于 pygtk、wxpython、tkinter、qt4 或 macosx 等,也称为“交互式后端”),以及硬拷贝后端以生成图像文件(PNG、SVG、PDF、PS;也称为“非交互式后端”)。
Artist
Artist 是 Matplotlib 的绘图实体,包括了图形的所有元素,包括:
- Figure:图形实体,即画布。
- Axes:坐标系实体,即绘图区。
- Axis:坐标轴实体,即坐标系上的 x 轴和 y 轴。
注意:
- 一个 figure(画布)可以包含多个 axes(坐标系/绘图区),但是一个 axes 只能属于一个 figure。
- 一个 axes(坐标系/绘图区)可以包含多个 axis(坐标轴),包含两个即为 2d 坐标系,三个即为 3d 坐标系 。
Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括 Axes 外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。
Scripting
Scripting 指 Axes 内通过 plot(线形图)、scatter(散点图)、bar(柱状图)、histogram(直方图)、pie(饼图) 等函数根据数据绘制出的图像。
6 了解 matplotlib.rcParams
matplotlib 使用 matplotlibrc 配置文件来自定义图形的各种默认属性,称之为 rc 配置或 rc 参数, 其中 rc 表示 runtime configuration。通过 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()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()
1 axes 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘axes.axisbelow’] = ‘line’ | 网格线和刻度的位置 |
|
mpl.rcParams[‘axes.edgecolor’] = ‘black’ | 轴边缘颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘axes.facecolor’] = ‘white’ | 轴背景色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘axes.labelcolor’] = ‘black’ | 轴标题颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘axes.grid’] = False | 是否显示网格 | False:不显示网格;True:显示网格 |
mpl.rcParams[‘axes.grid.axis’] = ‘both’ | 网格应用于哪个轴 | x:x 轴;y:y 轴;both:同时应用于两个轴 |
mpl.rcParams[‘axes.grid.which’] = ‘major’ | 网格应用于哪个刻度 |
|
mpl.rcParams[‘axes.labelpad’] = 4.0 | 轴标题和轴之间的间距 | float 类型间距值 |
mpl.rcParams[‘axes.labelsize’] = ‘medium’ | x 轴和 y 轴标题的字体大小 |
|
mpl.rcParams[‘axes.labelweight’] = ‘normal’ | x 轴和 y 轴标题的字体粗细 |
|
mpl.rcParams[‘axes.linewidth’] = 0.8 | 轴边线宽度 | float 类型宽度值 |
mpl.rcParams[‘axes.titlecolor’] = ‘auto’ | 图表标题颜色 | 默认取 |
mpl.rcParams[‘axes.titlelocation’] = ‘center’ | 图表标题位置 | left:左;right:右;center:中间 |
mpl.rcParams[‘axes.titlepad’] = 6.0 | 图表标题和轴之间的间距 | float 类型间距值 |
mpl.rcParams[‘axes.titlesize’] = ‘large’ | 图表标题字体大小 |
|
mpl.rcParams[‘axes.titleweight’] = ‘normal’ | 图表标题字体粗细 |
|
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:否 |
2 figure 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘figure.dpi’] = 100 | 画布像素(dpi) | float 类型像素值 |
mpl.rcParams[‘figure.edgecolor’] = ‘white’ | 画布边缘颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘figure.facecolor’] = ‘white’ | 画布背景颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘figure.figsize’] = [6.4, 4.8] | 画布尺寸 [长, 宽] | float 类型尺寸值(英寸) |
mpl.rcParams[‘figure.frameon’] = True | 是否启用图框 | True:是;False:否 |
mpl.rcParams[‘figure.titlesize’] = ‘large’ | 画布标题大小 |
|
mpl.rcParams[‘figure.titleweight’] = ‘normal’ | 画布标题粗细 |
|
3 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’ | 定义字体粗细 |
|
4 grid 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘grid.alpha’] = 1.0 | 网格透明度 | float 类型,取值范围:[0, 1] |
mpl.rcParams[‘grid.color’] = ‘#b0b0b0’ | 网格颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘grid.linestyle’] = ‘-’ | 网格线的样式 |
|
mpl.rcParams[‘grid.linewidth’] = 0.8 | 网格宽度 | float 类型宽度值 |
5 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 | 图例边缘线颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘legend.facecolor’] = ‘inherit’ | 图例背景颜色 | 默认继承自 |
mpl.rcParams[‘legend.fancybox’] = True | 是否使用圆形框作为图例背景 | True:使用圆形框;False:使用矩形框 |
mpl.rcParams[‘legend.fontsize’] = ‘medium’ | 图例字体大小 |
|
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’ | 图例在画布中的位置 |
|
mpl.rcParams[‘legend.shadow’] = False | 是否给图例添加阴影效果 | True:是;False:否 |
6 lines 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘lines.antialiased’] = True | 是否以抗锯齿方式渲染线条 | True:是;False:否 |
mpl.rcParams[‘lines.color’] = ‘C0’ | 线条颜色(对 plot() 没有影响) | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘lines.linestyle’] = ‘-’ | 线条样式 |
|
mpl.rcParams[‘lines.linewidth’] = 1.5 | 线条宽度 | float 类型宽度值 |
mpl.rcParams[‘lines.marker’] = ‘None’ | 线条上点的形状 | ., ,, o, v, ^ 等,具体常见 matplotlib.markers |
mpl.rcParams[‘lines.markeredgecolor’] = ‘auto’ | 线条上点边缘的颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘lines.markerfacecolor’] = ‘auto’ | 线条上点的颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘lines.markeredgewidth’] = 1.0 | 线条上点的粗细 | float 类型粗细值 |
mpl.rcParams[‘lines.markersize’] = 6.0 | 线条上点的大小 | float 类型大小值 |
7 patch 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘patch.antialiased’] = True | 以抗锯齿方式渲染补丁 | True:是;False:否 |
mpl.rcParams[‘patch.edgecolor’] = ‘black’ | 补丁边缘颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘patch.facecolor’] = ‘C0’ | 补丁颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘patch.linewidth’] = 1.0 | 补丁边缘宽度(以磅为单位) | float 类型宽度值 |
8 savefig 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘savefig.bbox’] = None | 是否以紧凑形式保存图片 |
|
mpl.rcParams[‘savefig.pad_inches’] = 0.1 |
| float 类型填充值 |
mpl.rcParams[‘savefig.dpi’] = ‘figure’ | 保存图片的像素(dpi) | str 类型像素值 |
mpl.rcParams[‘savefig.edgecolor’] = ‘white’ | 保存图片的边缘颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘savefig.facecolor’] = ‘white’ | 保存图片的画布颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘savefig.format’] = ‘png’ | 保存图片的格式 | eps, pdf, pgf, png, ps, raw, rgba, svg, svgz |
mpl.rcParams[‘savefig.transparent’] = False | 保存图片的背景是否透明 | True:是;False:否 |
9 text 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘text.antialiased’] = True | 是否以抗锯齿方式渲染文本 | True:是;False:否 |
mpl.rcParams[‘text.color’] = ‘red’ | 文本颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘text.usetex’] = False | 是否使用 排版系统 | True:是;False:否 |
10 xtick 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘xtick.color’] = ‘black’ | x 轴刻度的颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘xtick.direction’] = ‘out’ | x 轴刻度的方向 |
|
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 轴刻度文字大小 |
|
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:否 |
11 ytick 部分属性
| 属性及其默认值 | 描述 | 其他取值 |
|---|---|---|
mpl.rcParams[‘ytick.color’] = ‘black’ | y 轴刻度的颜色 | 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 |
mpl.rcParams[‘ytick.direction’] = ‘out’ | y 轴刻度的方向 |
|
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 轴刻度文字大小 |
|
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:否 |