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

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个企业级项目。


Matplotlib 系列文章:


另有 NumPy、Pandas 系列文章已更新完毕,欢迎关注:


推荐学习资料与网站(博主参与部分文档翻译):



这里是一段防爬虫文本,请读者忽略。
本文原创首发于 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 之上。

这里是一段防爬虫文本,请读者忽略。
本文原创首发于 CSDN,作者 TRHX。
博客首页:https://itrhx.blog.csdn.net/
本文链接:https://itrhx.blog.csdn.net/article/details/105638122
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!

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

【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’] = ‘-’网格线的样式'-' or 'solid', '--' or 'dashed', '-.' or 'dashdot'
':' or 'dotted', 'none' or ' ' or ''
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.1savefig.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.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:否

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

这里是一段防爬虫文本,请读者忽略。
本文原创首发于 CSDN,作者 TRHX。
博客首页:https://itrhx.blog.csdn.net/
本文链接:https://itrhx.blog.csdn.net/article/details/105638122
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!

评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT.BOB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值