1.Matplotlib介绍:
1.1Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
1.2Matplotlib 可以用来绘制各种静态,动态,交互式的图表。
1.3Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
1.4Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
2.Matplotlib 应用
Matplotlib 通常与 NumPy 和 SciPy(Scientific Python)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。SciPy 是一个开源的 Python 算法库和数学工具包。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
3.常见的图形及其绘制方法
3.1Matplotlib 柱形图
我们可以使用 pyplot 中的 bar() 方法来绘制柱形图。
bar() 方法语法格式如下:
plt.bar(x,height,width='',bottom=None,*,align'',data=None)
参数说明:
参数 | 作用 |
x | 浮点型数组,柱形图的 x 轴数据。 |
height | 浮点型数组,柱形图的高度。 |
width | 浮点型数组,柱形图的宽度。 |
bottom | 浮点型数组,底座的 y 坐标,默认 0。 |
align | 柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。 |
以下实例我们简单实用 bar() 来创建一个柱形图:
案例:统计明日科技的python类的图书销量,画柱形图
import pandas as pd
import matplotlib.pyplot as plt
# 导入数据
df_bar = pd.read_excel('../dataset/明日科技图书销量.xlsx')
df_bar
# 筛选python类图书
df_python = df_bar[df_bar['商品名称'].str.contains('Python')]
df_python
# 汇总所有天中各python书籍的总销量
# 代码:data_bar = df_python.groupby('')
# 汇总所有天中各python书籍的总销量
data_bar = df_python.groupby('商品名称')['成交商品件数'].sum()
data_bar
# 画图
plt.rcParams['font.family'] = 'SimHei' #显示中文
x = data_bar.index # 分组聚合结果的索引
y = data_bar.values # 分组聚合结果的值
plt.bar( #柱形图函数
x, # x轴的数据
y, # y轴的数据
width=0.5, # 柱子宽度,最大值是1
color = 'pink' # 颜色
)
plt.title('明日科技python图书销量') # 标题
# 在图中显示文本标签
for x0,y0 in zip(x,y):
plt.text(x0,y0+500,f'(y0)',ha='center')
plt.xticks(rotation=15) # x轴刻度旋转15度
plt.show()#显示图形
效果图如下:
3.2Matplotlib 饼图
饼图(Pie Chart)是一种常用的数据可视化图形,用来展示各类别在总体中所占的比例。
我们可以使用 pyplot 中的 pie() 方法来绘制饼图。
pie() 方法语法格式如下:
plt.pie(x,explode,labels,colors,radius,autopct...)
参数说明:
参数 | 作用 |
x | 浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。 |
explode | 数组,表示各个扇形之间的间隔,默认值为0。 |
labels | 列表,各个扇形的标签,默认值为 None。 |
colors | 数组,表示各个扇形的颜色,默认值为 None。 |
autopct | 设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。 |
radius | 设置饼图的半径,默认为 1。 |
... | (更多参数参考:https://www.runoob.com/matplotlib/matplotlib-pie.html) |
以下实例我们简单实用 pie() 来创建一个饼图:
案列:统计超市销售数据中男生和女生各自的支付方式占比情况
# 导入数据
df_pie = pd.read_excel('../dataset/超市销售数据.xlsx')
df_pie
# 对性别、支付方式做分组,统计每组的笔数(计数)
data_pie = df_pie.groupby(['性别','支付方式'])['发票编号'].count()
data_pie
# 画图,女性的图
data_woman = data_pie['女']
plt.pie(
data_woman.values,
labels=data_woman.index,# 数据项,即数据对应的含义
autopct='%1.2f%%', # 控制小数点位数
)
plt.show()
效果图如下:
3.3Matplotlib 折线图
绘图过程如果我们可以自定义线的样式,包括线的类型、颜色和大小等。
我们可以使用 pyplot 中的 plot() 方法来绘制饼图。
plot() 方法语法格式如下:
plt.plot(x,y,color,linestyle,marker,format_string...)
参数说明:
参数 | 作用 |
x | x轴数据,传入参数值时不来要写参数名x。 |
y | y轴数据,传入参数值时不来要写参数名y。 |
color | 图形颜色,接受颜色英文名首字母、十六进制颜色代码等。 |
linestyle | 线条样式,'-是实线'、'--'是虚线,... |
marker | 点的样式,'*'是星号,'o'是圆点,... |
format_string | 可以通过一串字符控制图形样式,如'r--o'表示红色、虚线、圆点。 |
... | ...(更多参数参考:https://www.runoob.com/matplotlib/matplotlib-line.html) |
以下实例我们简单实用 plot() 来创建一个折线图:
案例:画某只股票的收盘价(close)和20日均线(ma20)的折线图
# 导入数据
df_plot = pd.read_excel('../dataset/股价数据.xlsx')
df_plot
# 对时间做顺序排序
df_plot2 = df_plot.sort_values(by='date').reset_index(drop=True)
df_plot2
# 画图
n = 100 # 取前n个数据画图
x = df_plot2['date'][:n]
y1 = df_plot2['close'][:n]
y2 = df_plot2['ma20'][:n]
plt.plot(
x,
y1,'m-', # 通过字符串配置线条样式
y2,'b--'
)
plt.title('股票的收盘价和20日居均线折线图')# 标题
plt.legend(['收盘价','20日均线']) # 图示
plt.xticks([i for i in range(0,n,int(n/7))],rotation=15) # 选择7个等距x刻度显示
plt.show()
效果图如下:
3.4Matplotlib 散点图
我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。
scatter() 方法语法格式如下:
plt.scatter(x,y,s,c,marker,alpha,linewidths,...)
参数说明:
参数 | 作用 |
x,y | 长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。 |
s | 点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。 |
c | 点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。 |
marker | 点的样式,默认小圆圈 'o'。 |
alpha | 透明度设置,0-1 之间,默认 None,即不透明。 |
linewidths | 标记点的长度。 |
... | ...(更多参数参考:https://www.runoob.com/matplotlib/matplotlib-scatter.html) |
以下实例我们简单实用 scatter() 来创建一个散点图:
案例:图书浏览量和
# 导入数据
df_scatter = pd.read_excel('../dataset/明日科技图书销量.xlsx')
df_scatter
plt.scatter(
df_scatter['浏览量'],
df_scatter['成交商品件数'],
s = 20, # 点的大小
c = 'r', # 颜色
marker='+' # 点的样式
)
plt.xlim(0,5000) # x轴的范围
plt.ylim(0,400)# y轴的范围
plt.xlabel('浏览量',loc='right')# x轴名称
plt.ylabel('成交数量',loc='top')# y轴名称
plt.show()
效果图如下:
3.5Matplotlib 直方图
我们可以使用 pyplot 中的 hist() 方法来绘制直方图。
hist() 方法可以用于可视化数据的分布情况,例如观察数据的中心趋势、偏态和异常值等。
hist() 方法语法格式如下:
plt.hist(x,bins,align,orientation,rwidth,color,...)
参数说明:
参数 | 作用 |
x | 表示要绘制直方图的数据,可以是一个一维数组或列表。 |
bins | 可选参数,表示直方图的箱数。默认为10。 |
align | 可选参数,表示直方图箱子的对齐方式,可以是'left'、'mid'、'right'。默认为'mid'。 |
orientation | 可选参数,表示直方图的方向,可以是'vertical'、'horizontal'。默认为'vertical'。 |
rwidth | 可选参数,表示每个箱子的宽度。默认为None。 |
color | 可选参数,表示直方图的颜色。 |
... | ...(更多参数参考:https://www.runoob.com/matplotlib/matplotlib-hist.html) |
以下实例我们简单实用 hist() 来创建一个直方图:
案例:航空公司用户的年龄分布直方图
# 导入数据
df_hist = pd.read_excel('../dataset/航空公司数据.xlsx')
df_hist
plt.hist(
df_hist['年龄'],
bins = [i for i in range(int(df_hist['年龄'].min()),int(df_hist['年龄'].max()),1)]
)
plt.title('航空公司用户年龄分布直方图')# 标题
plt.xlabel('年龄区间')# x轴名称
plt.ylabel('人数')# y轴名称
plt.show()
效果图如下:
3.6Matplotlib 箱型图
箱型图也称为须状图,显示包含最小值,第一四分位数,中位数,第三四分位数和最大值的一组数据的摘要。在方块图中,绘制从第一个四分位数到第三个四分位数的方框。垂直线穿过中间的框。须状从每个四分位数到最小值或最大值。
我们可以使用 pyplot 中的 boxplot() 方法来绘制直方图。
boxplot() 方法语法格式如下:
plt.boxplot(x,labels,wert,whis,...)
参数说明:
参数 | 作用 |
x | 列表,序列数据,可以接收多个序列。 |
labels | 序列数据的标签,接受字符串的列表。 |
vert | 控制箱型图的方向,接收布尔值 |
whis | 控制上下限和下位分数之间的距离,默认为1.5。 |
... | ...(更多参数参考:https://www.cainiaojc.com/matplotlib/matplotlib-box-plot.html) |
以下实例我们简单实用 boxplot() 来创建一个箱型图:
案例:航空公司用户的年龄分布箱型图
# 导入数据
df_boxplot = pd.read_excel('../dataset/航空公司数据.xlsx')
df_boxplot
plt.boxplot(
df_boxplot['年龄'].dropna(),# 输入序列,但是不能有空值
vert=False, # 横向显示
labels= ['年龄']
)
plt.show()
效果图如下: