10 个 pyplot 绘图函数、10 个真实案例,一页看懂折线图、柱形图、条形图、堆积面积图、直方图、饼图、散点图、箱形图、雷达图与误差棒图。下方的每一张图表都可交互,鼠标悬停即可查看数据。
pyplotmatplotlib 是 Python 最常用的绘图库,其中 matplotlib.pyplot 提供了一套与 MATLAB 风格相近的函数接口。本章围绕 10 个基础绘图函数展开:掌握它们,就能覆盖绝大多数日常数据展示需求。
# 1 导入库并解决中文显示 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 2 准备数据 x = [1, 2, 3, 4, 5] y = [10, 20, 15, 25, 22] # 3 绘图 + 设置属性 plt.plot(x, y, color='b', marker='o', linestyle='-') plt.title('示例折线图') plt.xlabel('x 轴'); plt.ylabel('y 轴') plt.grid(True, linestyle='--', alpha=0.4) # 4 显示 plt.show()
plot()折线图用线段把相邻的数据点连接起来,适合表现数据随时间或其他连续变量的变化趋势。调用 plot() 时依次传入 x、y 数据即可;fmt 参数用「颜色 + 点型 + 线型」的组合一次性描述样式,例如 'b-o' 表示蓝色实线加圆点。需要在同一坐标系中对比多条曲线时,可以多次调用 plot(),也可以写成 plot(x1, y1, x2, y2)。
bar()柱形图用柱子的高度表示数值大小,适合比较不同类别的数量差异。width 控制柱宽(默认 0.8),tick_label 设置刻度标签;想让第二组数据叠在第一组之上,只要把第一组的高度传给 bottom 参数;xerr / yerr 还能为柱形添加误差棒。函数返回 BarContainer 对象,可以遍历取出每一根柱子。
barh()当类别名称较长时,横向的条形图比柱形图更易读。barh() 的参数与 bar() 一一对应,只是把「高度」换成了「宽度」:width 表示条形的长度,height 表示条形的粗细,left 则用于绘制堆积条形图。本例把商品种类放在 y 轴刻度标签上,用条形长度表示网购替代率。
stackplot()堆积面积图把多组数据按时间堆叠绘制,既能看出总量的变化,也能看出各部分的构成比例。stackplot() 只需依次传入 x 和多组 y 数据,labels 用于生成图例,baseline 决定堆叠的基准线(默认为 'zero',即从 0 开始堆叠)。
hist()直方图用来展示一组数据的分布情况:先把数据分成若干个区间(bins),再统计落入每个区间的数据个数。bins 可以是区间数量,也可以是自定义的区间边界;density=True 时纵轴显示频率密度而非频数。柱子越高,说明数据越集中在该区间。
pie()饼图用扇形的面积表示各部分占总体的比例,圆环图则是把圆心挖空后的饼图。labels 设置标签,autopct 控制百分比格式(如 '%3.1f%%'),explode 让某个扇形离开圆心,startangle 指定起始角度,wedgeprops={'width': 0.7} 可以把饼图变成圆环图。
scatter()散点图用点的位置反映两个变量之间的关系,气泡图则在此基础上用点的大小表示第三个变量。s 控制点的面积,c 控制颜色,marker 控制形状,cmap 可配合数值实现颜色映射。本例中车速越大,制动距离增长得越快,呈现明显的非线性关系。
boxplot()箱形图用五个统计量概括一组数据的分布:最小值、下四分位数、中位数、上四分位数和最大值,箱体之外的圆点即异常值。widths 控制箱体宽度,vert=False 让箱体横向摆放,patch_artist=True 为箱体填充颜色,whis 决定异常值的判定范围(默认 1.5 倍四分位距)。
polar()雷达图把多个维度的指标画在同一张极坐标图上,适合对比个体在多个维度上的强弱。使用 polar(theta, r) 时,theta 是各维度对应的角度(弧度),r 是对应的数值;把极坐标轴按维度数量等分,并把首尾数据闭合,就能得到常见的雷达图。点击下方图例可以单独查看某位用户的测试结果。
errorbar()误差棒图在数据点的上下(或左右)画出表示波动范围的线段,用来表达测量的不确定度或数据的离散程度。yerr / xerr 指定误差大小,fmt 控制点线样式,capsize 与 capthick 分别控制误差棒端帽的长度和粗细。
本章介绍了 matplotlib 中绘制简单图表的 10 个函数,涵盖趋势、对比、构成、分布、关系、多维与不确定性七类表达需求。真正决定图表效果的,往往不是代码,而是「想让读者看到什么」——先确定表达目的,再挑选合适的图形。