

◾ 编程语言:.NET/Java/Python/Go/Node...
◾ 移动生态:HarmonyOS/iOS/Android/小程序
◾ 前沿领域:物联网/网络安全/大数据/AI/元宇宙
◾ 游戏开发:Unity3D引擎深度解析
在数据分析和科学研究中,图表是传达信息、揭示趋势和洞察数据的重要工具。Matplotlib作为Python中最强大和灵活的绘图库之一,凭借其丰富的绘图功能,成为了数据科学家和分析师们的得力助手。无论是简单的折线图还是复杂的热力图,Matplotlib都能够帮助我们以直观的方式展示数据背后的故事。
在本篇文章《Matplotlib 常用图表的绘制》中,我们将系统地介绍如何利用Matplotlib绘制各种常用图表,包括折线图、柱状图、散点图、饼图等。通过具体的示例与代码演示,你将了解到每种图表的绘制方法、适用场景以及如何进行个性化定制,让你的图表更具表现力和专业性。
plot() 函数语法
plt.plot(
x, y,
label=None, # 图例标签
color=None, # 线条颜色
linestyle='-', # 线型(实线、虚线等)
marker=None, # 数据点标记样式
markersize=6, # 标记大小
markerfacecolor=None, # 标记填充颜色
alpha=1.0, # 透明度(0~1)
**kwargs # 其他样式参数
)学生语数外成绩对比
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.show()
(1) 线条与标记样式
参数 | 说明 | 示例值 |
|---|---|---|
| 线条颜色 |
|
| 线型 |
|
| 数据点标记 |
|
| 标记大小 |
|
| 标记填充色 |
|
| 透明度(0透明,1不透明) |
|
(2) 坐标轴与网格
参数 | 说明 | 示例 |
|---|---|---|
| 自定义y轴刻度 |
|
| 网格显示 |
|
.xlsx 文件需安装 openpyxl:pip install openpyxl'语文' 列是否存在)。SimHei 不可用,替换为其他中文字体(如 'Microsoft YaHei')。x 轴数据(如学生姓名顺序)一致,避免错位。markersize,避免重叠。alpha 增强可读性。plt.legend(loc='upper right') 调整图例位置。plt.annotate() 标注极值点(如最高分)。bar() 函数语法与参数详解函数语法
matplotlib.pyplot.bar(
x, # x轴数据(类别标签)
height, # 柱子高度(y轴数据)
width=0.8, # 柱子宽度(默认0.8,范围0~1)
bottom=None, # 柱子底部基准值(用于堆叠图)
align='center', # 对齐方式('center'或'edge')
color=None, # 柱子颜色
alpha=1.0, # 透明度(0~1)
label=None, # 图例标签
**kwargs # 其他样式参数(如边缘颜色edgecolor)
)年度图书销售额分析代码解析
import matplotlib.pyplot as plt
x=[1,2,3,4,5,6]
height=[10,20,30,40,50,60]
plt.bar(x,height)
plt.show()
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") # 生成虚线网格
#x、y轴标签
plt.xlabel('年份')
plt.ylabel('线上销售额(元)')
#图表标题
plt.title('2013—2019年线上图书销售额分析图')
plt.bar(x,height,width = 0.5,align='center',color = 'b',alpha=0.5)
#设置每个柱子的文本标签,format(b,',')格式化销售额为千位分隔符格式
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(['销售额']) #图例
plt.show()
多平台销售额对比代码解析
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('books.xlsx',sheet_name='Sheet2')
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
x=df['年份']
y1=df['京东']
y2=df['天猫']
y3=df['自营']
width =0.25
#y轴标签
plt.ylabel('线上销售额(元)')
#图表标题
plt.title('2013—2019年线上图书销售额分析图')
plt.bar(x,y1,width = width,color = 'darkorange')
plt.bar(x+width,y2,width = width,color = 'deepskyblue')
plt.bar(x+2*width,y3,width = width,color = 'g')
#设置每个柱子的文本标签,format(b,',')格式化销售额为千位分隔符格式
for a,b in zip(x,y1):
plt.text(a, b,format(b,','), ha='center', va= 'bottom',fontsize=8)
for a,b in zip(x,y2):
plt.text(a+width, b,format(b,','), ha='center', va= 'bottom',fontsize=8)
for a, b in zip(x, y3):
plt.text(a + 2*width, b, format(b, ','), ha='center', va='bottom', fontsize=8)
plt.legend(['京东','天猫','自营'])#图例
plt.show()输出效果
x + width 和 x + 2*width 偏移避免重叠。 
(1) 参数设置技巧
n 个并列柱子,单柱子宽度应满足 width < 1/n(如3组柱子,width=0.25)。 color=['#1f77b4', '#ff7f0e', '#2ca02c'])。 (2) 常见问题解决
问题 | 原因 | 解决方案 |
|---|---|---|
中文乱码 | 未指定中文字体 | 设置 |
柱子重叠 | 宽度或偏移计算错误 | 确保 |
数据标签错位 | 坐标偏移未匹配柱子位置 | 检查 |
(3) 扩展功能
bottom 参数叠加数据:plt.bar(x, y1, label='A')
plt.bar(x, y2, bottom=y1, label='B') # y2堆叠在y1上方plt.barh(x, width) 替代 plt.bar。pie() 函数核心参数语法
matplotlib.pyplot.pie(
x, # 各块比例(自动归一化)
explode=None, # 各块离中心距离(突出显示)
labels=None, # 各块标签
colors=None, # 各块颜色
autopct=None, # 百分比显示格式(如'%1.1f%%')
startangle=0, # 起始角度(0为x轴正方向)
shadow=False, # 是否显示阴影
radius=1.0, # 饼图半径
wedgeprops=None, # 饼块属性(如边框宽度、颜色)
textprops=None, # 文本属性(字体、颜色)
pctdistance=0.6, # 百分比标签距圆心比例
labeldistance=1.1, # 标签距圆心比例
center=(0,0), # 饼图中心坐标
frame=False, # 是否显示坐标轴框架
rotatelabels=False # 旋转标签
)各省销量占比分析
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel('data2.xls')
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']
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)# 设置百分比标签与圆心的距离
# 设置x,y轴刻度一致,保证饼图为圆形
plt.axis('equal')
plt.title('2020年1月各省销量占比情况分析')
plt.show()输出效果

突出显示最大占比
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel('data2.xls')
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']
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 = (0.1,0,0,0,0,0,0,0,0,0))# 设置百分比标签与圆心的距离
# 设置x,y轴刻度一致,保证饼图为圆形
plt.axis('equal')
plt.title('2020年1月各省销量占比情况分析')
plt.show()输出效果

添加阴影增强立体感
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel('data2.xls')
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']
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 = (0.1,0,0,0,0,0,0,0,0,0),shadow=True)# 设置百分比标签与圆心的距离
# 设置x,y轴刻度一致,保证饼图为圆形
plt.axis('equal')
plt.title('2020年1月各省销量占比情况分析')
plt.show()输出效果

单层环形图
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel('data2.xls')
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']
plt.pie(sizes, #绘图数据
labels=labels,#添加区域水平标签
colors=colors,# 设置饼图的自定义填充色
autopct='%.1f%%',# 设置百分比的格式,这里保留一位小数
#radius =1 , # 设置饼图的半径
pctdistance=0.85,
startangle = 180,
textprops = {'fontsize':9, 'color':'k'}, # 设置文本标签的属性值
wedgeprops = {'width': 0.4, 'edgecolor': 'k'})
plt.title('2020年1月各省销量占比情况分析')
plt.show()输出效果
wedgeprops={'width': 0.4} 设置环宽为半径的40%。
双环形对比分析
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
df1 = pd.read_excel('data2.xls')
df2=pd.read_excel('data2.xls',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()输出效果

labeldistance 和 pctdistance 参数。rotatelabels=True 旋转标签。wedgeprops={'width': 0.4} 控制环宽(值越大环越窄)。autopct='%1.1f%%' 保留1位小数,autopct='%d%%' 显示整数。plt.pie() 多次绘制,调整 radius 和 wedgeprops 实现层叠效果。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。