Python中Matplotlib数据可视化详解

目录

引言:Matplotlib 是 Python 中最流行的数据可视化库之一,它提供了丰富的绘图功能,可以创建各种静态、动态或交互式的图表。

一、基本概念

二、语法和常用参数

三、基本流程 

显示或保存图表

四、常见的图表类型及其特点

1.折线图 (Line Plot)

1.1图形特点

1.3拓展(上色和多折线图)

2. 柱状图 (Bar Chart) 

 2.1图形特点

2.2柱形图的常用函数及其说明

2.3代码及其输出结果

2.4.1绘制 “2019年城乡就业人数柱形图 ”

2.4.2 根据“books.xlsx”表格的数据,绘制如下图形。 要求将代码和输出结果截图上传

3.饼图 (Pie Chart) 

3.1图形特点

3.2 饼图的常用函数及其说明

3.3 代码及其输出结果

 ​编辑

3.4拓展 

3.4.1分裂饼图

 3.4.2内嵌环形饼图

4.面积图(Area Chart) 

 4.1图形特点

 4.2代码及其输出结果

4.3拓展 

 5.散点图 (Scatter Plot)

5.1图形特点

5.2代码及其输出结果 

五、文章总结

1.Matplotlib基础介绍

2.核心功能演示

3.高级技巧 

4.实战建议 


引言:Matplotlib 是 Python 中最流行的数据可视化库之一,它提供了丰富的绘图功能,可以创建各种静态、动态或交互式的图表。

一、基本概念

  1. Figure(图形):绘图的最外层容器,可以包含多个子图

  2. Axes(坐标轴):实际的绘图区域,每个 Axes 包含 x 轴和 y 轴

  3. Axis(轴):包含刻度、刻度标签等元素的数轴

二、语法和常用参数

plt.plot() 绘图: 
语法:plt.plot(x, y, color, linestyle, linewidth, marker, markerfacecolor, markersize, label)
各参数介绍如下:
  x: x轴数据
  y: y轴数据
  color: 线的颜色
  linestyle: 线条样式
  linewidth: 线条宽度(用数字表示大小)
  marker: 标记的样式
  markerfacecolor: 标记填充颜色
  markersize: 标记尺寸(用数字表示大小)
  label: 线条的标签(后文结合 legend() 创建图例来讲)
color 参数:
b:蓝色    g:绿色    r:红色
m:洋红色  c:蓝绿色  y:黄色
k:黑色    w: 白色

三、基本流程 

  1. 准备数据

  2. 创建图形和坐标轴

  3. 绘制图表

  4. 自定义图表(标题、标签、图例等)

  5. 显示或保存图表

四、常见的图表类型及其特点

1.折线图 (Line Plot)

1.1图形特点

特点

  • 用线段连接数据点,显示数据变化趋势

  • 适合展示时间序列数据或连续变量的变化

  • 可以同时绘制多条折线进行比较

  • 能够清晰显示数据的上升、下降或波动趋势

  • 可以添加标记点突出数据位置

  • 1.2图形代码及其输出结果

    # 绘制第一张图表 
    import matplotlib.pyplot as plt
    #折线图
    plt.plot([1,3,5,7,9], [1, 8, 3, 6, 2])  # x轴默认是 [0,1,2,3,4]
    

     

    1.3拓展(上色和多折线图)

    1.3.1模仿体温表

    import matplotlib.pyplot as plt
    import pandas as pd
    # 用figure()方法来设置画布大小、分辨率、颜色、边框
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
    plt.rcParams['axes.unicode_minus'] = False   # 解决负号不显示问题
    
    flg = plt.figure( figsize=(5,3), facecolor = 'yellow')  
    df = pd.read_excel('体温.xls')
    # 折线图
    x = df['日期'] # x轴数据
    y = df['体温'] # y轴数据
    
    plt.plot(x, y, color = 'm', linestyle = '--', marker = 'o' )
    
    plt.xlabel('2020年2月')  # x轴标题
    plt.ylabel('基础体温')   # y轴标题
    
    plt.grid(color = 'r', linestyle = '--',linewidth = 1, axis='y') # 设置网格线,用 plt.grid()。 axis='y'是将 Y 轴是网格线隐藏。
    plt.legend('基础体温', fontsize = 8, loc = 'upper left')  # 手动添加图例。fontsize字体大小,loc 图例显示位置。
    # plt.legend() # 自动显示图例
    plt.show()

     

    1.3.2多折线图(模拟成绩单)

    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.savefig('image.png')
    plt.show()

    2. 柱状图 (Bar Chart) 

     2.1图形特点
  • 用长短不等的矩形条表示不同类别的数值

  • 适合比较不同类别间的离散数据

  • 可以垂直(柱状)或水平(条形)显示

  • 支持堆叠和分组显示

  • 直观展示类别间的差异和排名

  • 2.2柱形图的常用函数及其说明

    绘制柱状图,我们主要用到 bar() 函数。

    函数的常用参数及其说明:bar(x,height, width,bottom,align='center',**kwargs)

    X: 包含所有柱子的下标的列表
        
    height: 包含所有柱子的高度值的列表
        
    width: 每个柱子的宽度。可以指定一个固定值,那么所有的柱子都是一样的宽。或者设置一个列表,这样可以分别对每个柱子设定不同的宽度。
        
    bottom: 指定柱形在起始位置
        
    align:柱子对齐方式,有两个可选值:center 和 edge。center 表示每根柱子是根据下标来对齐,
           edge 则表示每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数,默认值是 center。
        
    color:每根柱子呈现的颜色。同样可指定一个颜色值,让所有柱子呈现同样颜色;或者指定带有不同颜色的列表,让不同柱子显示不同颜色。

    edgecolor:每根柱子边框的颜色。同样可指定一个颜色值,让所有柱子边框呈现同样颜色;或者指定带有不同颜色的列表,让不同柱子的边框显示不同颜色。
     

    2.3代码及其输出结果
    # 简单柱形图
    import matplotlib.pyplot as plt
    
    x=[1,2,3,4,5,6]
    height=[10,20,30,40,50,60]
    
    plt.bar(x,height)

    2.4拓展 

    2.4.1绘制 “2019年城乡就业人数柱形图 ”
    import numpy as np
    import matplotlib.pyplot as plt
    data = np.load('2001-2019年劳动力与就业人员数据.npz', encoding='ASCII', allow_pickle=True) 
    
    print(data)
    # print(data["arr_0"])
    # print(data["arr_1"])
    
    # 绘制 “2019年城乡就业人数柱形图 ”
    plt.rcParams['font.sans-serif']=['SimHei']    #解决中文乱码
    columns = data['arr_0']  # 提取其中的columns数组,视为数据的标签
    values = data['arr_1']  # 提取其中的values数组,视为数据的存在位置
    # 绘制柱形图
    labels = ['城镇就业人员', '乡村就业人员']
    p = plt.figure(figsize=(6, 6), dpi = 70) # 设置画布大小为 6 * 6 英寸。dpi:每英寸的点数
    plt.bar(range(2), values[-1, 3:5], width=0.2) # values[-1, 3:5] 获取 values 数组最后一行数据,中的列索引为 3、4 两列的数据。width=0.2:柱子的宽度
    plt.xlabel('类别')
    plt.ylabel('就业人数(万人)')
    plt.xticks(range(2), labels) # 设置 X 轴的刻度标签。它将 X 轴的(0,1)位置与 labels = ['城镇就业人员', '乡村就业人员'] 的值分别对应关联。
    plt.title('2019年城乡就业人数柱形图')
    plt.show() # 显示图表

    2.4.2 根据“books.xlsx”表格的数据,绘制如下图形。 要求将代码和输出结果截图上传

     books.xlsx:

    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")  # 只在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,bottom=0.8)  #alpha=0.5透明度
    
    #设置每个柱子的文本标签, format(b,',')格式化销售额为千位分隔符格式
    #for a,b in zip(x,height):遍历x轴位置和柱形高度值
    # plt.text() - 添加文本标签,具体参数解释如下:
        # a - x坐标位置
        # b - y坐标位置(柱形顶部)
        # format(b,',') - 将数值格式化为带千位分隔符的字符串
        # ha='center' - 水平对齐方式为居中
        # va='bottom' - 垂直对齐方式为底部对齐
        # fontsize=9 - 字体大小
        # color='b' - 蓝色文本
        # alpha=0.9 - 透明度0.9
    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(['销售额'])  # 显示图例
    

    3.饼图 (Pie Chart) 

    3.1图形特点
  • 用圆形分割表示各部分占总体的比例

  • 适合展示构成比例关系

  • 直观但不宜展示过多类别(通常不超过6个)

  • 可以通过突出某一块(explode)强调特定部分

  • 3D效果可增强视觉吸引力但可能降低准确性

  • 3.2 饼图的常用函数及其说明
    主要用于展示各部分数据占总体的比例关系
    函数语法; plt.pie(x, explode=None, labels=None, colors=None, autopct=None, **kwargs, radius = 1)
      x:表示各部分的数据值,是绘制饼图的核心数据。
      explode:用于突出显示某些部分,是一个与 x 长度相同的数组,值越大,对应的部分突出越明显。
      labels:各部分的标签,方便我们识别每个扇形代表的内容。
      colors:各部分的颜色,可自定义以增加图表的美观度。
      autopct:用于显示各部分所占百分比的格式,如 '%1.1f%%' 表示保留一位小数。
      radius: 半径,默认值是1
    3.3 代码及其输出结果
    import matplotlib.pyplot as plt
    
    labels = ['娱乐', '育儿', '饮食', '房贷', '交通', '其它']
    x = [200, 500, 1200, 7000, 200, 900]
    
    # 绘制饼图
    plt.pie(x, labels=labels, autopct='%1.1f%%')
    # 设置图表标题
    plt.title("家庭支出比例")
    # 显示图表
    plt.show()
    
     
    3.4拓展 
    3.4.1分裂饼图

    import pandas as pd
    from matplotlib import pyplot as plt
    df1 = pd.read_excel('data2.xlsx')
    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']
    
    # 分裂饼图参数:explode
    explode = (0.1, 0,0,0,0,0,0,0,0,0)
    
    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=explode, #分裂饼图
            shadow=True # 立体感带阴影饼图
           )
    # 设置x,y轴刻度一致,保证饼图为圆形
    plt.axis('equal')
    plt.title('2020年1月各地区销量占比情况分析')
    

     3.4.2内嵌环形饼图
    import pandas as pd
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    
    df1 = pd.read_excel('data2.xlsx')
    df2=pd.read_excel('data2.xlsx',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()
    

    4.面积图(Area Chart) 

     4.1图形特点
  • 展示趋势与累积量:不仅显示数据的变化趋势(类似折线图),还能直观地展示数据的总量或部分占比
  • 强调变化幅度:填充颜色使数据的变化幅度更明显,适合突出增长或下降的程度。
  •  适合堆叠(Stacked Area Chart):可以叠加多个数据系列,展示各部分的构成及其随时间的变化
  •  4.2代码及其输出结果
    # 简单面积图,用函数 stackplot()
    import matplotlib.pyplot as plt
    x = [1,2,3,4,5]
    
    y1 =[6,9,5,8,4]
    y2 = [3,2,5,4,3]
    y3 =[8,7,8,4,3]
    y4 = [7,4,6,7,12]
    
    plt.stackplot(x, y1,y2,y3,y4, colors=['g','c','r','b'])  # 颜色可以不设置,采用默认值
    # plt.stackplot(x, y1,y2,y3,y4)
    plt.show()
    

    4.3拓展 
    # 标准面积图
    
    import pandas as pd
    import matplotlib.pyplot as plt
    df = pd.read_excel('books.xlsx')
    plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
    x=df['年份']
    y=df['销售额']
    #图表标题
    plt.title('2013-2019年线上图书销售情况')
    plt.stackplot(x, y)
    # 强制将y轴的刻度标签显示为普通数字格式(而非科学计数法)。当数据值较大时(如超过1e5),Matplotlib默认会使用科学计数法显示,
    plt.ticklabel_format(axis='y', style='plain')  
    plt.show()

     5.散点图 (Scatter Plot)

    5.1图形特点
  • 用点表示两个变量的关系

  • 适合展示变量间的相关性或分布模式

  • 可以发现数据集群、异常值和趋势

  • 可以通过点的大小、颜色表示第三个维度

  • 常用于回归分析前的数据探索

  • 5.2代码及其输出结果 
    # 绘制简单散点图:用scatter()函数
    import matplotlib.pyplot as plt
    
    x=[1,2,3,4,5,6]
    y=[19,24,37,43,55,68]
    
    plt.scatter(x, y, color= 'r')
    plt.show()
    

    五、文章总结

    1.Matplotlib基础介绍

  • Python最经典的数据可视化库,提供丰富的2D/3D图表支持

  • 与NumPy、Pandas无缝集成,适合科学计算和数据分析

  • 2.核心功能演示

  • 折线图:展示趋势变化(如股票走势)

  • 柱状图:对比分类数据(如销售额对比)

  • 散点图:分析变量相关性(如身高体重关系)

  • 直方图:统计数据分布(如考试成绩分布)

  • 饼图:显示比例构成(如市场份额) 

  • 3.高级技巧 

  • 多子图布局(plt.subplots()

  • 自定义样式(颜色、线型、标记、图例)

  • 3D可视化(曲面图、散点图)

  • 动态动画(FuncAnimation

  • 4.实战建议 

  • 结合Pandas直接绘制DataFrame数据

  • 使用Seaborn增强统计图表美观度

  • 导出高清图片(plt.savefig()

  • 作者:Hzc159

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python中Matplotlib数据可视化详解

    发表回复