
安装:
pip install matplotlib
介绍
Matplotlib 是 Python 中最常用的 2D 绘图库,也可以用来绘制 3D 图形。它提供了一套面向对象(OO)和基于 pyplot 的 MATLAB 风格接口,几乎能画出所有静态、动态、交互式的图表。
matplotlib/ ├─ init.py # 顶层命名空间,常用别名 import matplotlib as mpl ├─ pyplot.py # MATLAB 风格接口,最常用 import matplotlib.pyplot as plt ├─ artist.py # 绘图元素基类 ├─ axes.py # Axes 对象 ├─ figure.py # Figure 对象 ├─ axis.py # X/YAxis 对象 ├─ backend_*.py # 各后端实现
matplotlib.pyplot
最常用的高层接口,直接操作当前 figure/axes,函数式调用。
典型函数:plot、scatter、hist、imshow、subplots、savefig、show 等。
matplotlib.figure
管理整张图(Figure 对象),包含一个或多个 Axes。
matplotlib.axes
真正的“画布”,所有绘图都在 Axes 上完成。
关键方法:plot、bar、pie、contour、pcolormesh、annotate 等。
子模块 matplotlib.axes.Axes 中 >200 个绘图/辅助方法。
函数名称 | 描述 |
---|---|
Plot | 折线图或点图 |
Scatter | 绘制x与y的散点图 |
Bar | 绘制条形图 |
Barh | 绘制水平条形图 |
Stem | 棉签图 |
Boxplot | 绘制箱型图 |
Hist | 绘制直方图 |
his2d | 绘制2D直方图 |
Pie | 绘制饼状图 |
Step | 绘制阶梯图 |
Quiver | 绘制一个二维按箭头 |
Stackplot | 绘制堆叠图 |
Polar | 绘制极坐标图 |
折线图
plot() 用于画图它可以绘制点和线,语法格式如下:
# 画单条线 plot([x], y, [fmt], *, data=None, **kwargs) # 画多条线 plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数说明:
x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。x 轴是可选,不指定则以y轴长度为个数,生成从0开始的整数数组为x轴。
fmt:可选,定义基本格式(如颜色、标记和线条样式)。
**kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。
基础折线图:
import matplotlib.pyplot as plt x = [1,2,3,4] y = [2,4,9,26] plt.plot(x,y) plt.show()
标签信息:
在画布中添加标签信息:
- plt.xlabel(): x轴坐标信息
- plt.ylabel(): y轴坐标信息
- plt.title(): 顶部标题信息
import matplotlib.pyplot as plt x = [1,2,3,4] y = [2,4,9,26] plt.plot(x,y) plt.xlabel("x") plt.ylabel("y") plt.title("title") plt.show()
网格:
plt.grid(): 设置画布中显示网格线
import matplotlib.pyplot as plt x = [1,2,3,4] y = [2,4,9,26] plt.plot(x,y) plt.xlabel("x") plt.ylabel("y") plt.title("title") plt.grid() plt.show()
点图:
设置fmt参数,绘制点图
import matplotlib.pyplot as plt x = [1,2,3,4] y = [2,4,9,26] plt.plot(x,y, "o") plt.show()
柱状图
bar() 方法语法格式如下:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数说明:
- x:数组,柱形图的 x 轴数据。
- height:数组,柱形图的高度。
- width:浮点型数组,柱形图的宽度。
- bottom:数组,底座的 y 坐标,默认 0。
-
align:柱形图与 x 坐标的对齐方式
- ‘center’ 以 x 位置为中心,这是默认值。
- ‘edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=’edge’。
- **kwargs::其他参数。
基础柱状图:
import matplotlib.pyplot as plt x = ["apple", "banana", "origin", "watermelon"] y = [12, 22, 6, 18] plt.bar(x, y) plt.show()
设置柱状图颜色:
import matplotlib.pyplot as plt x = ["apple", "banana", "origin", "watermelon"] y = [12, 22, 6, 18] plt.bar(x, y, color="blue") plt.show()
import matplotlib.pyplot as plt x = ["apple", "banana", "origin", "watermelon"] y = [12, 22, 6, 18] plt.bar(x, y, color=["skyblue", "origin", "magenta", "cyan"]) plt.show()
柱状图填充
使用 hatch 参数可以指定柱状图填充形状, 取值包括:’/’, ‘\’, ‘|’, ‘-‘, ‘+’, ‘x’, ‘o’, ‘O’, ‘.’, ‘*’
import matplotlib.pyplot as plt x = ["apple", "banana", "origin", "watermelon"] y = [12, 22, 6, 18] plt.bar(x, y, hatch="/") plt.show()
设置数值
使用 plt.bar_label 函数给柱状图设置数值参数
import matplotlib.pyplot as plt x = ["apple", "banana", "origin", "watermelon"] y = [12, 22, 6, 18] bar = plt.bar(x, y) plt.bar_label(bar) plt.show()
柱状对比图:
import matplotlib.pyplot as plt y_1 = [0.1136, 1.4602, 0.3427, 1.8336] y_2 = [0.2234, 1.2587, 0.4416, 1.8415] #2、创建画布 plt.figure(figsize=(20,8)) plt.bar([i-0.1 for i in range(4)], y_1, width=0.2, label='before optimize') plt.bar([i+0.1 for i in range(4)], y_2, width=0.2, label='after optimize') #4、修改X刻度 plt.xticks([0,1,2,3], ['MSE', 'RMSE', 'MAE', 'R2']) plt.legend() plt.grid(True) plt.title("model optimize compare") plt.xlabel("metrics") plt.ylabel("value") plt.show()
饼图
pie 是饼图的函数,下面是函数接口:
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
- x:浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。
- labels:列表,各个扇形的标签,默认值为 None。
- colors:数组,表示各个扇形的颜色,默认值为 None。
基础饼图:
import matplotlib.pyplot as plt import numpy as np x = np.array([35, 25, 25, 15]) plt.pie(x) plt.show()
标签和颜色:
labels:设置每一个饼图的标签,和饼图个数不一致会报错
colors:设置每一个饼图的颜色,和饼图个数不一致会报错
x = [35, 25, 25, 15] label = ['apple', "banana", "orange", "watermelon"] color=["skyblue", "pink", "teal", "cyan"] plt.pie(x, labels=label, colors=color) plt.show()
添加百分比:
autopct: 设置百分比,%0.1f%% 代表小数点后一位的带百分号的百分比
x = [35, 25, 25, 15] label = ['apple', "banana", "orange", "watermelon"] color=["skyblue", "pink", "teal", "cyan"] plt.pie(x, labels=label, colors=color, autopct="%0.1f%%") plt.show()
棉签图
import numpy as np pred = np.array([0.5, 0.9, 0.23, 0.56, 0.8, 0.4, 0.5, 0.4, 0.7, 0.1, 0.9]) y_test = np.array([0.1, 0.2, 0.3, 0.8, 0.1, 0.2, 0.9, 0.1, 0.5, 0.3, 0.4]) diff = pred - y_test plt.stem(list(range(len(diff))), diff, linefmt="-.") plt.show()
箱线图
boxplot(箱线图,又称为盒须图、盒式图)是在1977年由美国统计学家John Tukey发明,分析数据需要为定量数据。通过箱线图,可以直观的探索数据特征,比如观察数据中是否存在异常数据,离群数据。
箱线图共由五个数值点构成,分别是最小观察值,25%分位数(Q1),中位数,75%分位数(Q3),最大观察值,
- 最小观察值 = Q1 – 1.5(IQR), IQR = Q3 –Q1
- 最大观察值 = Q3 + 1.5(IQR), IQR = Q3 –Q1
下图显示了箱型图与正态分布的概率分布函数的比较。
箱线图查看:
下极限(Min):数据集中最小的值。
下四分位数(Q1):数据的第25百分位数。
中位数(Q2):数据的第50百分位数。
上四分位数(Q3):数据的第75百分位数。
上极限(Max):数据集中最大的值。
注意:
上下限:上下限并不是整个数据样本的最大值和最小值,而是
- 上限 = 去除异常值的最大值(Q3+1.5IQR)
- 下限 = 去除异常值的最小值(Q1-1.5IQR)
在上下限这里分别划出两条线段作为异常值的分界点。
import numpy as np arr = np.array([0.5, 0.9, 0.23, 0.56, 0.8, 0.4, 0.5, 0.4, 0.7, 0.1, 0.9]) plt.boxplot(arr) plt.show()
存在异常值的数据:
import numpy as np arr = np.array([2.5, 0.9, 0.23, 0.56, 0.8, 2.4, 0.5, 0.4, 0.7, 0.1, 0.9]) plt.boxplot(arr) plt.show()
箱体填充:
import numpy as np arr = np.array([0.5, 0.9, 0.23, 0.56, 0.8, 0.4, 0.5, 0.4, 0.7, 0.1, 0.9]) plt.boxplot(arr, patch_artist=True) plt.show()
中位线样式:
import numpy as np arr = np.array([0.5, 0.9, 0.23, 0.56, 0.8, 0.4, 0.5, 0.4, 0.7, 0.1, 0.9]) plt.boxplot(arr, patch_artist=True, medianprops={'linestyle': '-', 'color': 'y', 'linewidth': 1.5}) plt.show()