Python中Matplotlib数据可视化详解
目录
引言:Matplotlib 是 Python 中最流行的数据可视化库之一,它提供了丰富的绘图功能,可以创建各种静态、动态或交互式的图表。
一、基本概念
二、语法和常用参数
三、基本流程
显示或保存图表
四、常见的图表类型及其特点
1.折线图 (Line Plot)
1.1图形特点
1.3拓展(上色和多折线图)
2. 柱状图 (Bar Chart)
2.1图形特点
2.2柱形图的常用函数及其说明
2.3代码及其输出结果
2.4.1绘制 “2019年城乡就业人数柱形图 ”
2.4.2 根据“books.xlsx”表格的数据,绘制如下图形。 要求将代码和输出结果截图上传
3.饼图 (Pie Chart)
3.1图形特点
3.2 饼图的常用函数及其说明
3.3 代码及其输出结果
编辑
3.4拓展
3.4.1分裂饼图
3.4.2内嵌环形饼图
4.面积图(Area Chart)
4.1图形特点
4.2代码及其输出结果
4.3拓展
5.散点图 (Scatter Plot)
5.1图形特点
5.2代码及其输出结果
五、文章总结
1.Matplotlib基础介绍
2.核心功能演示
3.高级技巧
4.实战建议
引言:Matplotlib 是 Python 中最流行的数据可视化库之一,它提供了丰富的绘图功能,可以创建各种静态、动态或交互式的图表。
一、基本概念
-
Figure(图形):绘图的最外层容器,可以包含多个子图
-
Axes(坐标轴):实际的绘图区域,每个 Axes 包含 x 轴和 y 轴
-
Axis(轴):包含刻度、刻度标签等元素的数轴
二、语法和常用参数
plt.plot() 绘图:
语法:plt.plot(x, y, color, linestyle, linewidth, marker, markerfacecolor, markersize, label)
各参数介绍如下:
x: x轴数据
y: y轴数据
color: 线的颜色
linestyle: 线条样式
linewidth: 线条宽度(用数字表示大小)
marker: 标记的样式
markerfacecolor: 标记填充颜色
markersize: 标记尺寸(用数字表示大小)
label: 线条的标签(后文结合 legend() 创建图例来讲)
color 参数:
b:蓝色 g:绿色 r:红色
m:洋红色 c:蓝绿色 y:黄色
k:黑色 w: 白色
三、基本流程
-
准备数据
-
创建图形和坐标轴
-
绘制图表
-
自定义图表(标题、标签、图例等)
-
显示或保存图表
四、常见的图表类型及其特点
1.折线图 (Line Plot)
1.1图形特点
特点:
用线段连接数据点,显示数据变化趋势
适合展示时间序列数据或连续变量的变化
可以同时绘制多条折线进行比较
能够清晰显示数据的上升、下降或波动趋势
可以添加标记点突出数据位置
1.2图形代码及其输出结果
# 绘制第一张图表
import matplotlib.pyplot as plt
#折线图
plt.plot([1,3,5,7,9], [1, 8, 3, 6, 2]) # x轴默认是 [0,1,2,3,4]

1.3拓展(上色和多折线图)
1.3.1模仿体温表
import matplotlib.pyplot as plt
import pandas as pd
# 用figure()方法来设置画布大小、分辨率、颜色、边框
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False # 解决负号不显示问题
flg = plt.figure( figsize=(5,3), facecolor = 'yellow')
df = pd.read_excel('体温.xls')
# 折线图
x = df['日期'] # x轴数据
y = df['体温'] # y轴数据
plt.plot(x, y, color = 'm', linestyle = '--', marker = 'o' )
plt.xlabel('2020年2月') # x轴标题
plt.ylabel('基础体温') # y轴标题
plt.grid(color = 'r', linestyle = '--',linewidth = 1, axis='y') # 设置网格线,用 plt.grid()。 axis='y'是将 Y 轴是网格线隐藏。
plt.legend('基础体温', fontsize = 8, loc = 'upper left') # 手动添加图例。fontsize字体大小,loc 图例显示位置。
# plt.legend() # 自动显示图例
plt.show()

1.3.2多折线图(模拟成绩单)
import pandas as pd
import matplotlib.pyplot as plt
df1=pd.read_excel('data.xls') #导入Excel文件
#多折线图
x1=df1['姓名']
y1=df1['语文']
y2=df1['数学']
y3=df1['英语']
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.rcParams['xtick.direction'] = 'out' #x轴的刻度线向外显示
plt.rcParams['ytick.direction'] = 'in' #y轴的刻度线向内显示
plt.title('语数外成绩大比拼',fontsize='18') #图表标题
plt.plot(x1,y1,label='语文',color='r',marker='p')
plt.plot(x1,y2,label='数学',color='g',marker='.',mfc='r',ms=8,alpha=0.7)
plt.plot(x1,y3,label='英语',color='b',linestyle='-.',marker='*')
plt.grid(axis='y') #显示网格关闭y轴
plt.ylabel('分数')
plt.yticks(range(50,150,10))
plt.legend(['语文','数学','英语']) #图例
plt.savefig('image.png')
plt.show()

2. 柱状图 (Bar Chart)
2.1图形特点
用长短不等的矩形条表示不同类别的数值
适合比较不同类别间的离散数据
可以垂直(柱状)或水平(条形)显示
支持堆叠和分组显示
直观展示类别间的差异和排名
2.2柱形图的常用函数及其说明
绘制柱状图,我们主要用到 bar() 函数。
函数的常用参数及其说明:bar(x,height, width,bottom,align='center',**kwargs)
X: 包含所有柱子的下标的列表
height: 包含所有柱子的高度值的列表
width: 每个柱子的宽度。可以指定一个固定值,那么所有的柱子都是一样的宽。或者设置一个列表,这样可以分别对每个柱子设定不同的宽度。
bottom: 指定柱形在起始位置
align:柱子对齐方式,有两个可选值:center 和 edge。center 表示每根柱子是根据下标来对齐,
edge 则表示每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数,默认值是 center。
color:每根柱子呈现的颜色。同样可指定一个颜色值,让所有柱子呈现同样颜色;或者指定带有不同颜色的列表,让不同柱子显示不同颜色。
edgecolor:每根柱子边框的颜色。同样可指定一个颜色值,让所有柱子边框呈现同样颜色;或者指定带有不同颜色的列表,让不同柱子的边框显示不同颜色。
2.3代码及其输出结果
# 简单柱形图
import matplotlib.pyplot as plt
x=[1,2,3,4,5,6]
height=[10,20,30,40,50,60]
plt.bar(x,height)

2.4拓展
2.4.1绘制 “2019年城乡就业人数柱形图 ”
import numpy as np
import matplotlib.pyplot as plt
data = np.load('2001-2019年劳动力与就业人员数据.npz', encoding='ASCII', allow_pickle=True)
print(data)
# print(data["arr_0"])
# print(data["arr_1"])
# 绘制 “2019年城乡就业人数柱形图 ”
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
columns = data['arr_0'] # 提取其中的columns数组,视为数据的标签
values = data['arr_1'] # 提取其中的values数组,视为数据的存在位置
# 绘制柱形图
labels = ['城镇就业人员', '乡村就业人员']
p = plt.figure(figsize=(6, 6), dpi = 70) # 设置画布大小为 6 * 6 英寸。dpi:每英寸的点数
plt.bar(range(2), values[-1, 3:5], width=0.2) # values[-1, 3:5] 获取 values 数组最后一行数据,中的列索引为 3、4 两列的数据。width=0.2:柱子的宽度
plt.xlabel('类别')
plt.ylabel('就业人数(万人)')
plt.xticks(range(2), labels) # 设置 X 轴的刻度标签。它将 X 轴的(0,1)位置与 labels = ['城镇就业人员', '乡村就业人员'] 的值分别对应关联。
plt.title('2019年城乡就业人数柱形图')
plt.show() # 显示图表

2.4.2 根据“books.xlsx”表格的数据,绘制如下图形。 要求将代码和输出结果截图上传
books.xlsx:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('books.xlsx')
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
x=df['年份']
height=df['销售额']
plt.grid(axis="y", which="major") # 只在y轴上生成虚线网格。which="major":只显示主刻度线对应的网格线
#x、y轴标签
plt.xlabel('年份')
plt.ylabel('线上销售额(元)')
#图表标题
plt.title('2013-2019年线上图书销售额分析图')
plt.bar(x,height,width = 0.5,align='center',color = 'b',alpha=0.5,bottom=0.8) #alpha=0.5透明度
#设置每个柱子的文本标签, format(b,',')格式化销售额为千位分隔符格式
#for a,b in zip(x,height):遍历x轴位置和柱形高度值
# plt.text() - 添加文本标签,具体参数解释如下:
# a - x坐标位置
# b - y坐标位置(柱形顶部)
# format(b,',') - 将数值格式化为带千位分隔符的字符串
# ha='center' - 水平对齐方式为居中
# va='bottom' - 垂直对齐方式为底部对齐
# fontsize=9 - 字体大小
# color='b' - 蓝色文本
# alpha=0.9 - 透明度0.9
for a,b in zip(x,height):
plt.text(a, b,format(b,','), ha='center', va= 'bottom',fontsize=9,color = 'b',alpha=0.9)
plt.legend(['销售额']) # 显示图例

3.饼图 (Pie Chart)
3.1图形特点
用圆形分割表示各部分占总体的比例
适合展示构成比例关系
直观但不宜展示过多类别(通常不超过6个)
可以通过突出某一块(explode)强调特定部分
3D效果可增强视觉吸引力但可能降低准确性
3.2 饼图的常用函数及其说明
主要用于展示各部分数据占总体的比例关系
函数语法; plt.pie(x, explode=None, labels=None, colors=None, autopct=None, **kwargs, radius = 1)
x:表示各部分的数据值,是绘制饼图的核心数据。
explode:用于突出显示某些部分,是一个与 x 长度相同的数组,值越大,对应的部分突出越明显。
labels:各部分的标签,方便我们识别每个扇形代表的内容。
colors:各部分的颜色,可自定义以增加图表的美观度。
autopct:用于显示各部分所占百分比的格式,如 '%1.1f%%' 表示保留一位小数。
radius: 半径,默认值是1
3.3 代码及其输出结果
import matplotlib.pyplot as plt
labels = ['娱乐', '育儿', '饮食', '房贷', '交通', '其它']
x = [200, 500, 1200, 7000, 200, 900]
# 绘制饼图
plt.pie(x, labels=labels, autopct='%1.1f%%')
# 设置图表标题
plt.title("家庭支出比例")
# 显示图表
plt.show()
3.4拓展
3.4.1分裂饼图
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel('data2.xlsx')
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.figure(figsize=(5,3)) #设置画布大小
labels = df1['地区']
sizes = df1['销量']
#设置饼形图每块的颜色
colors = ['red', 'yellow', 'slateblue', 'green','magenta','cyan','darkorange','lawngreen','pink','gold']
# 分裂饼图参数:explode
explode = (0.1, 0,0,0,0,0,0,0,0,0)
plt.pie(sizes, #绘图数据
labels=labels,#添加区域水平标签
colors=colors,# 设置饼图的自定义填充色
labeldistance=1.02,#设置各扇形标签(图例)与圆心的距离
autopct='%.1f%%',# 设置百分比的格式,这里保留一位小数
startangle=90,# 设置饼图的初始角度
radius = 0.5, # 设置饼图的半径
center = (0.2,0.2), # 设置饼图的原点
textprops = {'fontsize':9, 'color':'k'}, # 设置文本标签的属性值
pctdistance=0.6, # 设置百分比标签与圆心的距离
explode=explode, #分裂饼图
shadow=True # 立体感带阴影饼图
)
# 设置x,y轴刻度一致,保证饼图为圆形
plt.axis('equal')
plt.title('2020年1月各地区销量占比情况分析')

3.4.2内嵌环形饼图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
df1 = pd.read_excel('data2.xlsx')
df2=pd.read_excel('data2.xlsx',sheet_name='2月')
#数据集,x1,x2分别对应外环、内环百分比例
x1=df1['销量']
x2=df2['销量']
#设置饼状图各个区块的颜色
colors = ['red', 'yellow', 'slateblue', 'green','magenta','cyan','darkorange','lawngreen','pink','gold']
#外环
plt.pie(x1,autopct='%.1f%%',radius=1,pctdistance=0.85,colors=colors,wedgeprops=dict(linewidth=2,width=0.3,edgecolor='w'))
#内环
plt.pie(x2,autopct='%.1f%%',radius=0.7,pctdistance=0.7,colors=colors,wedgeprops=dict(linewidth=2,width=0.4,edgecolor='w'))
#图例
legend_text=df1['地区']
plt.legend(legend_text,title='地区',frameon=False,bbox_to_anchor=(0.2,0.5))#设置图例标题、位置、去掉图例边框
plt.axis('equal')#设置坐标轴比例以显示为圆形
plt.title('2020年1月和2月各地区销量占比情况分析')
plt.show()

4.面积图(Area Chart)
4.1图形特点
4.2代码及其输出结果
# 简单面积图,用函数 stackplot()
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y1 =[6,9,5,8,4]
y2 = [3,2,5,4,3]
y3 =[8,7,8,4,3]
y4 = [7,4,6,7,12]
plt.stackplot(x, y1,y2,y3,y4, colors=['g','c','r','b']) # 颜色可以不设置,采用默认值
# plt.stackplot(x, y1,y2,y3,y4)
plt.show()

4.3拓展
# 标准面积图
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('books.xlsx')
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
x=df['年份']
y=df['销售额']
#图表标题
plt.title('2013-2019年线上图书销售情况')
plt.stackplot(x, y)
# 强制将y轴的刻度标签显示为普通数字格式(而非科学计数法)。当数据值较大时(如超过1e5),Matplotlib默认会使用科学计数法显示,
plt.ticklabel_format(axis='y', style='plain')
plt.show()

5.散点图 (Scatter Plot)
5.1图形特点
用点表示两个变量的关系
适合展示变量间的相关性或分布模式
可以发现数据集群、异常值和趋势
可以通过点的大小、颜色表示第三个维度
常用于回归分析前的数据探索
5.2代码及其输出结果
# 绘制简单散点图:用scatter()函数
import matplotlib.pyplot as plt
x=[1,2,3,4,5,6]
y=[19,24,37,43,55,68]
plt.scatter(x, y, color= 'r')
plt.show()

五、文章总结
1.Matplotlib基础介绍
Python最经典的数据可视化库,提供丰富的2D/3D图表支持
与NumPy、Pandas无缝集成,适合科学计算和数据分析
2.核心功能演示
折线图:展示趋势变化(如股票走势)
柱状图:对比分类数据(如销售额对比)
散点图:分析变量相关性(如身高体重关系)
直方图:统计数据分布(如考试成绩分布)
饼图:显示比例构成(如市场份额)
3.高级技巧
多子图布局(plt.subplots())
自定义样式(颜色、线型、标记、图例)
3D可视化(曲面图、散点图)
动态动画(FuncAnimation)
4.实战建议
结合Pandas直接绘制DataFrame数据
使用Seaborn增强统计图表美观度
导出高清图片(plt.savefig())
作者:Hzc159
