Matplotlib数据可视化(python)

Matplotlib

python的数据可视化库有很多个,matplotlib是其中最基础、最常用的。

常见的图形分类

选择绘图函数--以plot函数

1.绘图函数决定要绘制什么样的图形,不同的图形有不同的函数名称

2.绘图语法:plt.plot(x,y,color,linestyle,marker,format string,...)

参数作用(具体参考教材)
xX轴数据,传入参数值时不要写参数名x
yY轴数据,传入参数值时不要写参数名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, ...)

参数作用(具体参考教材)
xX轴数据,传入参数值时不要写参数名x
yY轴数据,传入参数值时不要写参数名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,...)

参数作用(具体参考教材)
xX轴数据,传入一个列表序列类型数据
yy轴数据,传入一个列表序列类型数据
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()
3.输出结果

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值