Skip to content

Matplotlib 之 HelloWorld

1 什么是 Matplotlib

  • 是专门用于开发 2D 图表(包括 3D 图表)
  • 以渐进、交互式方式实现数据可视化

2 为什么要学习 Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

  • 能将数据进行可视化,更直观的呈现
  • 使数据更加客观、更具说服力

例如下面两个图为数字展示和图形展示:

3 实现一个简单的 Matplotlib 画图 — 以折线图为例

3.1 matplotlib.pyplot 模块

matplotlib.pytplot 包含了一系列类似于 matlab 的画图函数。

python
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt

3.2 图形绘制流程

  • 1.创建画布 -- plt.figure()
  • 2.绘制图像 -- plt.plot(x, y)
  • 3.显示图像 -- plt.show()

3.3 折线图绘制与显示

举例:展现上海一周的天气,比如从星期一到星期日的天气温度如下

python
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()

4 认识 Matplotlib 图像结构(了解)

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 修改示例:

python
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’网格线和刻度的位置

line:在画板上方,在线条下方
False:在线条和画板的上方
True:在画板下方

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’网格应用于哪个刻度

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 的值
其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见

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.05x 轴边距取值范围 [0, 1]
mpl.rcParams[‘axes.ymargin’] = 0.05y 轴边距取值范围 [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’画布标题大小

xx-small, x-small, small, medium
large, x-large, xx-large, smaller, larger
也可以使用数字来表示字体大小

mpl.rcParams[‘figure.titleweight’] = ‘normal’画布标题粗细

normal:正常粗细;bold:粗体;light:细体
数字值 400 等价于 normal700 等价于 bold

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’定义字体粗细

normal:正常粗细;bold:粗体;light:细体
数字值 400 等价于 normal700 等价于 bold

4 grid 部分属性

属性及其默认值描述其他取值
mpl.rcParams[‘grid.alpha’] = 1.0网格透明度float 类型,取值范围:[0, 1]
mpl.rcParams[‘grid.color’] = ‘#b0b0b0’网格颜色

其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见

mpl.rcParams[‘grid.linestyle’] = ‘-’网格线的样式

'-' or 'solid', '--' or 'dashed', '-.' or 'dashdot'
':' or 'dotted', 'none' or ' ' or ''

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’图例背景颜色

默认继承自 axes.facecolor
其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见

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:否

6 lines 部分属性

属性及其默认值描述其他取值
mpl.rcParams[‘lines.antialiased’] = True是否以抗锯齿方式渲染线条True:是;False:否
mpl.rcParams[‘lines.color’] = ‘C0’线条颜色(对 plot() 没有影响)

其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见

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’线条上点边缘的颜色

其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见

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是否以紧凑形式保存图片

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’保存图片的边缘颜色

其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见

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 轴刻度的方向

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.5x 轴主(大)刻度与文字标签的距离float 类型距离值
mpl.rcParams[‘xtick.major.size’] = 3.5x 轴主(大)刻度的大小float 类型大小值
mpl.rcParams[‘xtick.major.width’] = 0.8x 轴主(大)刻度的宽度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.4x 轴次(小)刻度与文字标签的距离float 类型距离值
mpl.rcParams[‘xtick.minor.size’] = 2.0x 轴次(小)刻度的大小float 类型大小值
mpl.rcParams[‘xtick.minor.width’] = 0.6x 轴次(小)刻度的宽度float 类型宽度值
mpl.rcParams[‘xtick.minor.visible’] = Falsex 轴次(小)刻度的可见性True:是;False:否

11 ytick 部分属性

属性及其默认值描述其他取值
mpl.rcParams[‘ytick.color’] = ‘black’y 轴刻度的颜色

其他颜色,支持英文颜色名称及其简写、十六进制颜色码等
更多颜色示例参见

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.5y 轴主(大)刻度与文字标签的距离float 类型距离值
mpl.rcParams[‘ytick.major.size’] = 3.5y 轴主(大)刻度的大小float 类型大小值
mpl.rcParams[‘ytick.major.width’] = 0.8y 轴主(大)刻度的宽度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.4y 轴次(小)刻度与文字标签的距离float 类型距离值
mpl.rcParams[‘ytick.minor.size’] = 2.0y 轴次(小)刻度的大小float 类型大小值
mpl.rcParams[‘ytick.minor.width’] = 0.6y 轴次(小)刻度的宽度float 类型宽度值
mpl.rcParams[‘ytick.minor.visible’] = Falsey 轴次(小)刻度的可见性True:是;False:否