Matplotlib
1 什么是Matplotlib
Matplotlib 是一个用于绘制图表和可视化数据的 Python库。它提供了丰富的绘图工具,可以用于生成各种静态、交互式和动画图表。Matplotlib 是数据科学、机器学习和科学计算领域中最流行的绘图库之一。
是专门用于开发2D图表(包括3D图表)
以渐进、交互式方式实现数据可视化
对图像元素控制力强。
可输出PNG、PDF、SVG和EPS等多种格式
2 为什么要学习Matplotlib
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。
- 能将数据进行可视化,更直观的呈现
- 使数据更加客观、更具说服力
例如下面两个图为数字展示和图形展示:
3 实现Matplotlib画图 — 折线图
3.1 matplotlib.pyplot模块
导包
matplotlib.pytplot包含了一系列类似于matlab的画图函数。
import matplotlib.pyplot as plt
3.2 图形绘制流程
1.创建画布 – plt.figure()
plt.figure(figsize=(), dpi=)
figsize: 指定图的长宽
dpi: 图像的清晰度,0-1清晰度逐渐增大
返回fig对象
2.绘制图像 – plt.plot(x, y)
以折线图为例
3.显示图像 – plt.show()
3.3 折线图绘制与显示
案例:展现上海一周的天气,比如从星期一到星期日的天气温度如下**
import matplotlib.pyplot as plt # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制折线图 plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13]) # 3.显示图像 plt.show()
4 散点图绘制
散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
api:plt.scatter(x, y)
参数解释:
x,y分别是一组数据,可以用列表表示
案例:
需求:探究房屋面积和房屋价格的关系
房屋面积数据:
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,
21.61, 483.21, 245.25, 399.25, 343.35]
房屋价格数据:
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]
import matplotlib.pyplot as plt import random #设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字符集 plt.rcParams['axes.unicode_minus'] = False # 设置负号正常显示 # 0.准备数据 x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64, 163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51, 21.61, 483.21, 245.25, 399.25, 343.35] y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34, 140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 , 30.74, 400.02, 205.35, 330.64, 283.45] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制散点图 plt.scatter(x, y) # 3.显示图像 plt.show() 可见,房屋价格和面积成正相关 在这里插入图片描述 5 柱状图绘制
可见,房屋价格和面积成正相关
5 柱状图绘制
柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。
特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)
api:plt.bar(x, width, align=‘center’, **kwargs)
参数解读
Parameters:
x : 需要传递的数据
width : 柱状图的宽度
align : 每个柱状图的位置对齐方式
{‘center’, ‘edge’}, optional, default: ‘center’
**kwargs :
color:选择柱状图的颜色
案例:
需求-对比每部电影的票房收入
电影数据如下图所示:
准备数据
[‘雷神3:诸神黄昏’,‘正义联盟’,‘东方快车谋杀案’,‘寻梦环游记’,‘全球风暴’, ‘降魔传’,‘追捕’,‘七十七天’,‘密战’,‘狂兽’,‘其它’]
[73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
绘制柱状图
代码:
import matplotlib.pyplot as plt import random #设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字符集 plt.rcParams['axes.unicode_minus'] = False # 设置负号正常显示 # 0.准备数据 # 电影名字 movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它'] # 横坐标 x = range(len(movie_name)) # 票房数据 y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制柱状图 plt.bar(x, y, width=0.5, color=['b','r','g','y','c','m','y','k','c','g','b']) # 2.1b修改x轴的刻度显示 plt.xticks(x, movie_name) # 2.2 添加网格显示 plt.grid(linestyle="--", alpha=0.5) # 2.3 添加标题 plt.title("电影票房收入对比",fontsize=25) # 3.显示图像 plt.show()
6 饼状图绘制
饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
特点:分类数据的占比情况(占比)
api:plt.pie(x, labels=,autopct=,colors)
参数解读
Parameters:
x:数量,自动算百分比
labels:每部分名称
autopct:占比显示指定%1.2f%%
colors:每部分颜色
案例:
import matplotlib.pyplot as plt import random #设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字符集 plt.rcParams['axes.unicode_minus'] = False # 设置负号正常显示 # 0.准备数据 #饼状图,只要给了数字,程序会自动计算占比 x = [1,2,3,4,5] label = ['class1','class2','class3','class4','class5'] # 1.创建画布 plt.figure() # 2.绘制图形 #autopct表示显示每部分占比 plt.pie(x,labels=label,autopct="%.2f%%") # 3.显示图像 plt.show()
如果想实现饼状图某个部分被抽取出去,可以借助explode参数
创建一个列表,被抽取的部分对应的值写成非零,其他部分写成0即可 该字段的意思是被抽取的部分中心距离原点的距离
explode = [0,0,0.1,0,0]
#绘制图形
#autopct表示显示每部分占比
plt.pie(x,labels=label,autopct=“%.2f%%”,explode=explode)