2.1绘制折线图 — plot()
使用 pyplot 的 plot() 函数可以快速地绘制折线图。
语法
- x、y:表示 x 轴与 y 轴的数据
- fmt:定义图的基本属性的字符串,形式为
'[color][marker][line]',即颜色、点型、线型 - label:图例标签
- 返回值:一个包含 Line2D 类对象(代表线条)的列表
绘制多线条折线图的三种方式
# 第1种:分别调用 plt.plot(x1, y1) plt.plot(x2, y2) # 第2种:一次传入多组数据 plt.plot(x1, y1, x2, y2) # 第3种:传入二维数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) plt.plot(arr[0], arr[1:])
2.2绘制柱形图或堆积柱形图 — bar()
使用 pyplot 的 bar() 函数可以快速地绘制柱形图或堆积柱形图,返回一个 BarContainer 类的对象(可遍历获取每个柱形,也可通过 patches 或 errorbar 属性获取所有柱形或误差棒)。
语法
- x:柱形的 x 坐标;height:柱形的高度
- width:柱形的宽度,默认 0.8
- bottom:柱形底部的 y 坐标(用于堆积)
- align:柱形与刻度的对齐方式,默认 'center'
- tick_label:x 轴刻度标签
- xerr、yerr:误差棒数据
示例代码
# 一组柱形 x = np.arange(5) y1 = np.array([10, 8, 7, 11, 13]) plt.bar(x, y1, tick_label=['a','b','c','d','e'], width=0.3) # 两组柱形(并列) y2 = np.array([9, 6, 5, 10, 12]) plt.bar(x, y1, width=0.3) plt.bar(x + 0.3, y2, width=0.3) # 堆积柱形图:通过 bottom 参数使后绘制的柱形位于先绘制的上方 plt.bar(x, y1, width=0.3) plt.bar(x, y2, bottom=y1, width=0.3) # 带误差棒的柱形图 error = [2, 1, 2.5, 2, 1.5] plt.bar(x, y1, width=0.3, yerr=error)
2.3绘制条形图或堆积条形图 — barh()
使用 pyplot 的 barh() 函数可以快速地绘制条形图或堆积条形图(横向柱形图),同样返回 BarContainer 类的对象。
语法
- y:条形的 y 坐标;width:条形的宽度(x 方向长度)
- height:条形的高度,默认 0.8
- left:条形左侧的 x 坐标(用于堆积)
- xerr、yerr:误差棒数据
示例代码
# 一组条形 y = np.arange(5) x1 = np.array([10, 8, 7, 11, 13]) plt.barh(y, x1, tick_label=['a','b','c','d','e'], height=0.3) # 两组条形(并列):y + bar_height x2 = np.array([9, 6, 5, 10, 12]) plt.barh(y + 0.3, x2, height=0.3) # 堆积条形图:通过 left 参数使后绘制的条形位于先绘制的右方 plt.barh(y, x1, height=0.3) plt.barh(y, x2, left=x1, height=0.3) # 带误差棒的条形图 plt.barh(y, x1, height=0.3, xerr=error)
2.4绘制堆积面积图 — stackplot()
使用 pyplot 的 stackplot() 函数可以快速地绘制堆积面积图。
语法
- x:x 轴数据,可以是一组数据
- y:y 轴数据,可以是一组或多组数据
- labels:每个填充区域的图例标签
- baseline:计算基线的方法,可选 'zero'(常数基线)、'sym'(对称基线)、'wiggle'、'weighted_wiggle'(河流图风格,最小化层的摆动)
示例代码
x = np.arange(6)
y1 = np.array([1, 4, 3, 5, 6, 7])
y2 = np.array([1, 3, 4, 2, 7, 6])
y3 = np.array([3, 4, 3, 6, 5, 5])
# 绘制有三个填充区域堆叠的堆积面积图
plt.stackplot(x, y1, y2, y3)
2.5绘制直方图 — hist()
使用 pyplot 的 hist() 函数可以快速地绘制直方图,用于统计数据的分布情况。
语法
- x:输入数据(一维数组)
- bins:矩形条的个数或取值范围边界序列
- range:统计数据的取值区间,区间外的数据将被忽略
- density:是否将矩形条进行频率统计(归一化)
- weights:每个数据的权重
- bottom:每个矩形条底部的 y 坐标(基线偏移)
- histtype:直方图类型,如 'bar'、'step'、'stepfilled'(填充的线条)
示例代码
# 准备50个随机测试数据,绘制填充的线条直方图 scores = np.random.randint(0, 100, 50) plt.hist(scores, bins=8, histtype='stepfilled') # 10000个随机数,绘制包含25个矩形条的直方图 random_state = np.random.RandomState(19680801) random_x = random_state.randn(10000) plt.hist(random_x, bins=25)
2.6绘制饼图或圆环图 — pie()
使用 pyplot 的 pie() 函数可以快速地绘制饼图或圆环图。
语法
- x:扇形的数据(各部分数值)
- explode:扇形离开圆心的距离(数组,突出某部分)
- labels:扇形的标签文字
- autopct:百分比数值的格式字符串,如 '%3.1f%%'(保留1位小数)
- pctdistance:百分比数值距圆心的半径比例,默认 0.6
- startangle:起始绘制角度(从 x 轴正方向逆时针计)
- radius:扇形半径;shadow:是否显示阴影;wedgeprops:扇形属性,如 {'width': 0.7} 可绘制圆环图
示例代码
data = np.array([20, 50, 10, 15, 30, 55]) pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F']) # 饼图:半径1.5,数值保留1位小数 plt.pie(data, radius=1.5, labels=pie_labels, autopct='%3.1f%%') # 圆环图:通过 wedgeprops 挖空中间 plt.pie(data, radius=1.5, wedgeprops={'width': 0.7}, labels=pie_labels, autopct='%3.1f%%', pctdistance=0.75)
2.7绘制散点图或气泡图 — scatter()
使用 pyplot 的 scatter() 函数可以快速地绘制散点图或气泡图。
语法
- x、y:点的坐标数据
- s:点的大小(用于气泡图)
- c:点的颜色
- marker:点的样式
- cmap:颜色映射表
- linewidths、edgecolors:点的轮廓线宽与轮廓颜色
示例代码
num = 50 x = np.random.rand(num) y = np.random.rand(num) # 散点图 plt.scatter(x, y) # 气泡图:s 控制气泡大小 area = (30 * np.random.rand(num)) ** 2 plt.scatter(x, y, s=area)
2.8绘制箱形图 — boxplot()
使用 pyplot 的 boxplot() 函数可以快速地绘制箱形图,用于展示数据的分布(最小值、下四分位数、中位数、上四分位数、最大值及异常值)。
语法
- x:待绘制的数据
- notch:是否以凹口形式展现箱形图
- sym:异常值对应的符号
- vert:箱体垂直还是水平摆放(False 为横向)
- whis:四分位距的倍数,指定上下须与四分位数的距离
- positions:箱体的位置;widths:箱体的宽度
- 常用参数:patch_artist(是否填充箱体颜色)、showfliers(是否显示异常值)、meanline(是否用线显示均值/中位数)
示例代码
# 绘制不显示异常值的箱形图
data = np.random.randn(100)
plt.boxplot(data, meanline=True, widths=0.3,
patch_artist=True, showfliers=False)
2.9绘制雷达图 — polar()
使用 pyplot 的 polar() 函数可以快速地绘制雷达图(极坐标图)。
语法
- theta:每个标记所在弧度(角度)的数据
- r:每个标记到极点的半径距离数据
- 通常需先将角度转换为弧度,并在数据末尾追加第一个点以闭合多边形
2.10绘制误差棒图 — errorbar()
使用 pyplot 的 errorbar() 函数可以快速地绘制误差棒图。
语法
- x、y:数据点的位置
- yerr、xerr:y 轴 / x 轴方向误差的大小
- fmt:数据点的标记样式与线条样式
- ecolor:误差棒的颜色;elinewidth:误差棒线宽
- capsize:误差棒端帽的大小;capthick:端帽粗细
示例代码
x = np.arange(5) y = (25, 32, 34, 20, 25) y_offset = (3, 5, 2, 3, 3) plt.errorbar(x, y, yerr=y_offset, capsize=3, capthick=2)
2.11本章小结
本章主要介绍了如何使用 matplotlib 库的绘图函数绘制简单的图表,包括: 折线图(plot)、柱形图/堆积柱形图(bar)、条形图/堆积条形图(barh)、 堆积面积图(stackplot)、直方图(hist)、饼图/圆环图(pie)、 散点图/气泡图(scatter)、箱形图(boxplot)、雷达图(polar)、 误差棒图(errorbar)。 掌握这些绘图函数的用法后,可以使用它们绘制简单图表,为后续学习打好扎实的基础。
| 图表类型 | 函数 | 堆积方式 / 关键参数 |
|---|---|---|
| 折线图 | plot() | 多线条:多次调用 / 一次传多组 / 二维数组 |
| 柱形图 | bar() | 堆积用 bottom;误差棒用 yerr |
| 条形图 | barh() | 堆积用 left;误差棒用 xerr |
| 堆积面积图 | stackplot() | baseline:zero / sym / wiggle / weighted_wiggle |
| 直方图 | hist() | bins 条数;histtype='stepfilled' 填充 |
| 饼图/圆环图 | pie() | wedgeprops={'width':0.7} 圆环;autopct 百分比 |
| 散点图/气泡图 | scatter() | s 控制点大小(气泡) |
| 箱形图 | boxplot() | patch_artist 填充;showfliers 异常值;vert 摆放方向 |
| 雷达图 | polar() | theta 角度(弧度)+ r 半径 |
| 误差棒图 | errorbar() | xerr / yerr 误差;capsize、capthick 端帽 |