Matplotlib 系列文章:
- Python 数据分析三剑客之 Matplotlib(一):初识 Matplotlib 与其 matplotibrc 配置文件
- Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性
- Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性
- Python 数据分析三剑客之 Matplotlib(四):线性图的绘制
- Python 数据分析三剑客之 Matplotlib(五):散点图的绘制
- Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制
- Python 数据分析三剑客之 Matplotlib(七):饼状图的绘制
- Python 数据分析三剑客之 Matplotlib(八):等高线 / 等值线图的绘制
- Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制
- Python 数据分析三剑客之 Matplotlib(十):3D 图的绘制
- Python 数据分析三剑客之 Matplotlib(十一):最热门最常用的 50 个图表【译文】
专栏:
【NumPy 专栏】【Pandas 专栏】【Matplotlib 专栏】
推荐学习资料与网站:
【NumPy 中文网】【Pandas 中文网】【Matplotlib 中文网】【NumPy、Matplotlib、Pandas 速查表】
1 | 这里是一段防爬虫文本,请读者忽略。 |
【1x00】设置图例
matplotlib.pyplot.legend()
方法可以为图表设置图例。
基本语法:matplotlib.pyplot.legend(\*args, \*\*kwargs)
部分常见参数:
参数 | 描述 |
---|---|
loc | 图例在画布中的位置,默认为 best,其他取值:best , upper right , upper left , lower left lower right , right , center left , center right lower center , upper center , center 也可以用数字 0 - 10 来表示上述位置 |
bbox_to_anchor | 调整图例在画布中的位置,当 loc 达不到我们想要的效果时,就可以使用该参数 该参数接收一个二元数组 (x, y),x 用于控制图例的左右移动,值越大越向右边移动 y 用于控制图例的上下移动,值越大,越向上移动 |
borderaxespad | 图例距离轴之间的距离,float 类型,默认为 0.5 |
borderpad | 图例边框空白区域大小,float 类型,默认为 0.4 |
columnspacing | 图例列间距,float 类型,默认为 2.0 |
edgecolor | 图例边缘线颜色,支持英文颜色名称及其简写、十六进制颜色码等 更多颜色示例参见官网 Color Demo |
facecolor | 图例背景颜色,默认继承自 axes.facecolor 其他颜色,支持英文颜色名称及其简写、十六进制颜色码等 更多颜色示例参见官网 Color Demo |
fancybox | 是否使用圆形框作为图例背景, 默认为 True |
fontsize | 图例字体大小,默认为 medium ,xx-small , x-small , small , medium large , x-large , xx-large , smaller , larger 也可以使用数字来表示字体大小 |
framealpha | 图例透明度,float 类型,默认为 0.8,取值范围:[0, 1] |
handleheight | 图例的高度 ,float 类型,默认为 0.7 |
handlelength | 图例的宽度,float 类型,默认为 2.0 |
handletextpad | 图例和图例文本之间的水平距离,float 类型,默认为 0.8 |
labelspacing | 不同图例之间的垂直距离,float 类型,默认为 0.5 |
shadow | 是否给图例添加阴影效果,默认为 False |
【1x01】方法一:指定 label 参数
在画图的时候先指定 label
标签文本,再调用 legend()
方法即可。
1 | import matplotlib.pyplot as plt |
【1x02】方法二:使用 set_label 方法
在画图的时候先使用 set_label()
方法指定标签文本,再调用 legend()
方法即可。
1 | import matplotlib.pyplot as plt |
【1x03】方法三:直接使用 legend 方法
直接使用 legend()
方法来指定图例标签也可以达到同样效果,图例以列表或者元组形式储存,图例与绘制图形的顺序一一对应。
1 | import matplotlib.pyplot as plt |
也可以使用两个元组,将绘制的图形和图例一一对应来储存:
1 | import matplotlib.pyplot as plt |
以上三种方法绘制的图形均一致:
【2x00】数学公式 LaTeX
LaTeX(LATEX,音译“拉泰赫”)是一种基于 TeX 的排版系统,常用于生成复杂表格和数学公式,Matplotlib 提供了自己的 TeX 表达式解析器,布局引擎和字体,布局引擎基于 Donald Knuth 的 TeX 布局算法改编。使用数学公式时用 $
将其包围起来即可。具体的符号与其对应的英文表示参见官方文档:https://matplotlib.org/tutorials/text/mathtext.html
应用举例:
1 | import numpy as np |
【3x00】调整 x / y 轴刻度和范围
在生成图像时,默认会按照所给的数据均匀设置几个刻度,如果对默认的刻度不满意,则可以使用 xticks()
或 yticks()
方法指定刻度值。xlim()
与 ylim()
则可以设置刻度的范围。
基本语法:matplotlib.pyplot.xticks([ticks=None, labels=None, \*\*kwargs])
matplotlib.pyplot.yticks([ticks=None, labels=None, \*\*kwargs])
参数 | 描述 |
---|---|
ticks | 数组形式的位置列表,即显示第 n 个位置的刻度,可选项,若传递空列表将删除所有 xtick / ytick |
labels | 数组形式的值,在对应刻度线显示的标签信息。仅当同时传递了刻度时,才能传递此参数 |
**kwargs | 其他参数参见 Text |
其他参数里面有一个常用的 rotation
参数,次参数可以用于设置刻度标签的旋转角度,对于标签太长的可以将其旋转一个角度来显示。
应用举例:
1 | import matplotlib.pyplot as plt |
1 | import matplotlib.pyplot as plt |
【4x00】画布边框与坐标轴的移动
Matplotlib 所绘制的图表中的每个绘图元素,例如线条 Line2D、文字 Text、刻度等在内存中都有一个对象与之对应。
matplotlib.pyplot.gca()
函数用于获取当前的绘图区 Axes
(Get Current Axes)
matplotlib.pyplot.gcf()
函数用于获取当前的画布 Figure
(Get Current Figure)
例如:matplotlib.pyplot.plot()
实际上会通过 matplotlib.pyplot.gca()
获得当前的 Axes对象 ax
,然后再调用 ax.plot()
方法实现真正的绘图。我们可以通过这种方法来实现画布边框的隐藏和坐标轴的移动。
应用举例:
1 | import matplotlib.pyplot as plt |
1 | 这里是一段防爬虫文本,请读者忽略。 |
【5x00】创建子图
子图的概念:在同一张画布中创建多个图像,方便对数据进行对比。
【5x01】方法一:add_subplot()
首先创建一个画布,然后利用 add_subplot()
方法填充子图,该方法接收三个参数,前两个参数表示子图有几行几列,最后一个参数表示第几个子图,如:fig.add_subplot(221)
表示总共有两行两列(2x2=4)一共4个子图,当前是第一个子图。若子图大于9个则用逗号隔开即可。
应用举例:
1 | import numpy as np |
【5x02】方法二:pyplot.subplot()
matplotlib.pyplot.subplot()
方法和 add_subplot()
方法有点儿类似,同样接收三个参数,前两个参数表示子图有几行几列,最后一个参数表示第几个子图。
1 | import numpy as np |
【5x03】方法三:pyplot.subplots()
matplotlib.pyplot.subplots()
函数会将画布分割成指定的列和行,分割后依次在各个区域画图即可。注意与 matplotlib.pyplot.subplot()
略有差别。
fig, axes = plt.subplots
的意思是:plt.subplots
方法会返回一个包含 figure(画布) 和 axes(绘图区) 对象的元组,fig 和 axes 参数分别接收这两个对象,后期对不同绘图区进行处理即可。
1 | import numpy as np |
【6x00】填充补丁
matplotlib.patches
可用于在画布上填充圆形、长方形、椭圆形、多边形等多种图像补丁。
官方文档:https://matplotlib.org/api/patches_api.html
类 | 描述 |
---|---|
matplotlib.patches.Arc(xy, width, height, angle=0.0, theta1=0.0, theta2=360.0, **kwargs) | 椭圆弧 |
matplotlib.patches.Arrow(x, y, dx, dy, width=1.0, **kwargs) | 箭头 |
matplotlib.patches.Circle(xy, radius=5, **kwargs) | 圆 |
matplotlib.patches.Ellipse(xy, width, height, angle=0, **kwargs) | 椭圆 |
matplotlib.patches.CirclePolygon(xy, radius=5, resolution=20, **kwargs) | 近似多边形的圆形面片 |
matplotlib.patches.Polygon(xy, closed=True, **kwargs) | 不规则多边形 |
matplotlib.patches.Rectangle(xy, width, height, angle=0.0, **kwargs) | 矩形 |
matplotlib.patches.RegularPolygon(xy, numVertices, radius=5, orientation=0, **kwargs) | 正多边形 |
matplotlib.patches.Shadow(patch, ox, oy, props=None, **kwargs) | 创建给定补丁的阴影 |
matplotlib.patches.Wedge(center, r, theta1, theta2, width=None, **kwargs) | 楔形 |
应用举例:
1 | import numpy as np |
【7x00】保存图像
matplotlib.pyplot.savefig()
方法可以将绘制的图像保存到本地,支持多种格式:eps, pdf, pgf, png, ps, raw, rgba, svg, svgz。
plt.show()
函数后,会创建一个新的空白的图片,所以在保存图片时注意要在 plt.show()
前调用 plt.savefig()
基本语法:matplotlib.pyplot.savefig(fname, dpi=None, facecolor='w', edgecolor='w', format=None, transparent=False)
参数 | 描述 |
---|---|
fname | str 类型 / 文件路径 / 类似文件的对象 如果未设置格式,则根据 fname 的扩展名(如果有)和 rcParams[“savefig.format”] = ‘png’ 推断输出格式如果设置了格式,则它将确定输出格式 |
dpi | 保存图片的像素(dpi),以每英寸点数为单位。如果为 None,则默认取 rcParams[’savefig.dpi’] = ‘figure’ |
facecolor | 保存图片的画布颜色,默认为 white |
edgecolor | 保存图片的边缘颜色,默认为 white |
format | 保存图片的格式,未设置则取 fname 中的格式 |
transparent | 保存图片的背景是否透明 |
应用举例:
1 | import matplotlib.pyplot as plt |
1 | 这里是一段防爬虫文本,请读者忽略。 |