Matplotlib
python的数据可视化库有很多个,matplotlib是其中最基础、最常用的。
常见的图形分类
选择绘图函数--以plot函数
1.绘图函数决定要绘制什么样的图形,不同的图形有不同的函数名称
2.绘图语法:plt.plot(x,y,color,linestyle,marker,format string,...)
参数 | 作用(具体参考教材) |
x | X轴数据,传入参数值时不要写参数名x |
y | Y轴数据,传入参数值时不要写参数名y |
color | 图形颜色,接收颜色英文名、颜色英文名首字母、十六进制颜色代码等 |
linestyle | 线条样式,' - '是实线,' - - '是虚线,... |
marker | 点的样式,' * '是星号,' o '是圆点,... |
format_string | 可以通过一串字符控制图形样式,如' r- -o '表示红色、虚线、圆点 |
设置坐标轴
1.坐标轴分为x轴和y轴,其内容包括坐标轴标题、刻度、范围和网格线
2.Matplotlib库中通过不同函数控制以上坐标轴的设置。
函数名 | 传入参数及其作用(具体参考教材) |
plt.xlabel() | 传入一个字符串,表示x轴的名称(标签) |
plt.ylabel() | 传入一个字符串,表示y轴的名称(标签) |
plt.xticksl() | 传入一个列表,表示x轴的各个刻度的值(刻度为类别型数据时使用) |
plt.yticksl() | 传入一个列表,表示y轴的各个刻度的值(刻度为类别型数据时使用) |
plt.xlim() | 传入一个列表或是两个数,表示x轴的取值范围(刻度为数字型数据时使用) |
plt.ylim() | 传入一个列表或是两个数,表示y轴的取值范围(刻度为数字型数据时使用) |
plt.grid() | 不需要传入参数,使直角坐标系显示网格 |
添加文本标签
1.可以在画布中任意位置一次性添加一个文本信息
2.语法: plot.text (x,y,s, ha, va, fontsize, color, ...)
参数 | 作用(具体参考教材) |
x | 输入一个x轴的值(数字或字符)),表示要插入文本的x坐标 |
y | 输入一个y轴的值(数字或字符)),表示要插入文本的y坐标 |
s | 要插入的文本字符串 |
ha | 水平对齐方式,'center' \ 'left' \ 'right' |
va | 垂直对齐方式,'center' \ 'top' \ 'bottom' |
fontsizs | 字体大小,传入一个数字 |
color | 文本字体颜色 |
设置标题和图例
1.标题显示在画布和图表的正上方。图例一般显示在图表角落,用于描述数据的含义
2.显示标题语法: plot.title ('标题’)
3.显示图例语法: plot.legend (数据标签’,loc,fontsize,...)
4.loc参数:决定图例的位置,如“upper right”表示右上方
Matplotlib各图形的绘制函数
1.柱形图
(1).柱形图能够查看各项数据的大小差异
(2).绘图函数: plt.bar( x ,height, width, ...)
(3).可以通过多个plt.bar()绘制多重柱形图
参数 | 作用(具体参考教材) |
x | 列表,表示柱子在x轴的刻度,一般为字符 |
height | 列表,表示柱子在y轴的刻度,为数字 |
width | 数字,表示柱子的宽度 |
... | …(更多内容见教材) |
案例:明日科技图书销量统计python类图书销量,画柱形图
1.导入数据
df_book = pd.read_excel(r'E:/python2.0/数据集合集/明日科技图书销量.xlsx')
df_book
2.查询条件为python类的图书
df_book_python = df_book [df_book['商品名称'].str.contains('Python')]
df_book_python
result = df_book_python.groupby('商品名称')['成交商品件数'].sum()
result
3.绘制图形
x = result.index # x轴数据
y = result.values # y轴数据
plt.rcParams['font.family']='simHei' # 让图形显示中文
plt.bar( # 柱形图函数
x,
y,
width=0.5, # 柱子宽度
color = '#ff8090' # 颜色
)
plt.title('Python类图书销量') # 标题
plt.xticks(rotation=15) # x抽刻度倾斜
for a,b in zip(x,y): # 追历x和y轴数据同个位置的值
plt.text( # 依次显示各数据标签
a, # 标签x轴坐标
b+500, # 标签y轴坐标
f'{b}', # 标签文本格式
ha='center' #标签对齐方式
)
plt.show() # 显示图形
4.输出结果(柱形图)
2.饼图
1.饼图能够查看各项数据在总计中的占比情况
2.绘图函数: plt.pie( x,labels,radius,autopct ...)
参数 | 作用(具体参考教材) |
x | 接收列表,里面是各个数据的值 |
labels | 接收列表,里面是各个数据的标签 |
radius | 接收数字,表示饼图的半径,默认是1 |
autopct | 接收字符串 '%%1.xf%' ,表示饼图中显示百分比数并保留一位小数 |
... | …(更多内容见教材) |
案例:统计超市销售数据中男性和女性的支付方式占比情况的差异
1.导入数据
df_sale = pd.read_excel(r'E:/python2.0/数据集合集/超市销售数据.xlsx')
df_sale
2.交叉分析
gender_zffs = pd.pivot_table(
data=df_sale,
index='性别',
columns='支付方式',
values='购买数量(件)',
aggfunc='sum'
)
gender_zffs
3.绘制图形
plt.pie(
gender_zffs.loc['女',:],
labels =gender_zffs.loc['女',:].index,
autopct='%1.2f%%',
explode=[0,0,0.1],
colors=['#ff8062','skyblue','red']
)
plt.show()
4.输出结果(饼图)
3.折线图
1.折线图能够查看时间序列数据的波动趋势
2.绘图函数: plt.plot( x, y, color, linestyle, marker, format_string, ...)
参数 | 作用(具体参考教材) |
x | X轴数据,传入参数值时不要写参数名x |
y | Y轴数据,传入参数值时不要写参数名y |
color | 图形颜色,接收颜色英文名、颜色英文名首字母、十六进制颜色代码等 |
linestyle | 线条样式,' - '是实线,' - - '是虚线,... |
marker | 点的样式,' * '是星号,' o '是圆点,... |
format_string | 可以通过一串字符控制图形样式,如' r- -o '表示红色、虚线、圆点 |
案例: 股票开盘价和收盘价的折线图
1.导入数据
df_stock = pd.read_excel(r'E:/python2.0/数据集合集/股价数据.xlsx')
df_stock
2.重新排序,日期升序
df_stock_sort = df_stock.sort_values(by='date').reset_index(drop=True)
df_stock_sort
3.数据准备
x = df_stock_sort['date']
y1 = df_stock_sort['open']
y2 = df_stock_sort['ma20']
y2
4.绘制图形
plt.plot(
x,
y1,
'-', # 控制y1折线的样式的字符串, - 表示实线
y2,
'--' # 控制y2折线的样式的字符串, --表示虚线
)
plt.title('某股票开盘价和20日均线的折线图')
plt.xticks([0,100,200,300,400,500,600],rotation = 15) #只显示指定的几个x轴刻度
plt.show()
5.输出结果(折线图)
4.散点图
1.散点图能够查看两个序列数据之间的相关关系
2.绘图函数: plt.scatter (x,y,s,c,marker,...)
参数 | 作用(具体参考教材) |
x | X轴数据,传入一个列表序列类型数据 |
y | y轴数据,传入一个列表序列类型数据 |
s | 点标记的大小 |
c | 点标记的颜色 |
marker | 点的样式,' * ' 是星号,' o '是圆点,... |
... | ... (更多内容见教材) |
案例:图书的浏览量和成交量之间的关系
1.导入数据
df_book = pd.read_excel(r'E:/python2.0/数据集合集/明日科技图书销量.xlsx')
df_book
2.绘制图形
plt.scatter(
df_book['浏览量'],
df_book['成交商品件数'],
s = 1
)
plt.title('浏览器和成交量散点图')
plt.xlim(0,5000)
plt.ylim(0,400)
plt.show()
3.输出结果(散点图)
5.直方图
1.直方图能够查看序列数据的分布情况
2.数据的分布即统计序列在不同区间内数据的个数
3.绘图函数: plt.hist( x,bins,…)
参数 | 作用(具体参考教材) |
x | 列表、序列数据 |
bins | 统计数据分布的区间,接收一个列表 |
... | ... (更多内容见教材) |
案例:航空公司用户年龄分布
1.导入数据
df_air = pd.read_excel(r'E:/python2.0/数据集合集/航空公司数据.xlsx')
df_air
2.绘制图形
plt.hist(
df_air['年龄'],
bins = [i for i in range(0,100,2)] #柱子的区间边界点,以表生成式的方式生成较方便
)
plt.title('用户年龄分布图(直方图)')
plt.show()
3.输出结果(直方图)
6.箱形图
1.通过四分位数(Q1\Q2\Q3)和上限、下限表示数据分布
2.上限 = Q3+1.5*(Q3-Q1),下限 = Q1-1.5*(Q3-Q1)
3.箱型图通过圆点来显示序列的异常值
4.绘图函数: plt.boxplot ( x, labels, vert, whis ...)
参数从 | 作用(具体参考教材) |
x | 列表、序列数据,可以接收多个序列 |
labels | 序列数据的标签,接收字符串的列表 |
vert | 控制箱型图的方向,接收布尔值 |
whis | 控制上下限和上下位分数之间的距离,默认为1.5 |
... | ... (更多内容见教材) |
案例:航空公司用户年龄分布
1.导入数据
df_air = pd.read_excel(r'E:/python2.0/数据集合集/航空公司数据.xlsx')
df_air
2.数据准备
df_air['年龄']
3.绘制图形
plt.boxplot(
df_air['年龄'].dropna(), #数据中不能有空值,如果画多个箱型图,则数据要以列表的形式性
labels=['年龄'], #必须输入一个列表
vert=False
)
plt.show()
4.输出结果(箱形图)
7.同时显示多张图
1.导入数据
df_air = pd.read_excel(r'E:/python2.0/数据集合集/航空公司数据.xlsx')
df_air
2.绘制图形
#定义一个画布对象
plt.figure(figsize=(16,8))
plt.subplot(2,3,4)
#重新定义x和y的值,因为上方x和y被重新定义(覆盖)过了
x = result.index # x轴数据
y = result.values # y轴数据
plt.bar( # 柱形图函数
x,
y,
width=0.5, # 柱子宽度
color = '#ff8090' # 颜色
)
plt.title('Python类图书销量') # 标题
plt.xticks(rotation=15) # x抽刻度倾斜
for a,b in zip(x,y): # 追历x和y轴数据同个位置的值
plt.text( # 依次显示各数据标签
a, # 标签x轴坐标
b+500, # 标签y轴坐标
f'{b}', # 标签文本格式
ha='center' #标签对齐方式
)
plt.subplot(2,3,2)
plt.pie(
gender_zffs.loc['女',:], # 数据,自动计算百分类
labels =gender_zffs.loc['女',:].index, #文本标签
autopct='%1.2f%%', #数据标签格式
explode=[0,0,0.1], #扇形到原点的距离
colors=['#ff8062','skyblue','green']
)
plt.subplot(2,3,5)
x = df_stock_sort['date']
y1 = df_stock_sort['open']
y2 = df_stock_sort['ma20']
plt.plot(
x,
y1,
'-', # 控制y1折线的样式的字符串, - 表示实线
y2,
'--' # 控制y2折线的样式的字符串, --表示虚线
)
plt.title('某股票开盘价和20日均线的折线图')
plt.xticks([0,100,200,300,400,500,600],rotation = 15) #只显示指定的几个x轴刻度
plt.subplot(2,3,1)
plt.scatter(
df_book['浏览量'],
df_book['成交商品件数'],
s = 1
)
plt.title('浏览器和成交量散点图')
plt.xlim(0,5000) # x轴显示的范围
plt.ylim(0,400) #y轴显示的范围
plt.subplot(2,3,3)
plt.hist(
df1['飞行次数'],
bins = [i for i in range(0,200,4)] #柱子的区间边界点,以表生成式的方式生成较方便
)
plt.title('用户飞行次数直方图')
plt.subplot(2,3,6)
plt.boxplot(
df_air['年龄'].dropna(), #数据中不能有空值,如果画多个箱型图,则数据要以列表的形式性
labels=['年龄'], #必须输入一个列表
vert=False,
)
plt.show()