Matplotlib-数据可视化详解

1. 数据可视化简介
  • 可视化介绍

    • 数据可视化是指直观展现数据,它是数据处理过程的一部分。

    • 把数值绘制出来更方便比较。借助数据可视化,能更直观地理解数据,这是直接查看数据表做不到的

    • 数据可视化有助于揭示数据中隐藏的模式,数据分析时可以利用这些模式选择模型

  • 可视化库介绍

    • 基于Matplotlib 绘制静态图形

      • pandas

      • seaborn

      基于JS (javaScript)

      • pyecharts/echarts

      • plotly

2.Matplotlib的API介绍

Matplotlib提供了两种方法来作图:状态接口和面向对象

  • 导包

    python 复制代码
    # 使用Matplotlib需要导入pyplot 
    # Matplotlib.pyplot 包含一系列绘图函数的相关函数
    import matplotlib.pyplot as plt
  • 方式1: 状态接口

    python 复制代码
    # 状态接口方式 绘图.
    import matplotlib.pyplot as plt
    ​
    # 1. 准备x轴 和 y轴的数据.
    x = [-3, 5, 7]  # x轴坐标
    y = [10, 2, 5]  # y轴坐标
    # 2. 创建画布, figure: 创建画布, figsize=指定画布大小
    plt.figure(figsize=(15, 6)) 
    # 3. 绘图, 传入x轴, y轴
    plt.plot(x, y)
    plt.grid(True)  # 添加网格线
    # 4. 设置x轴坐标 和 y轴坐标的范围
    plt.xlim(0, 10)
    plt.ylim(-3, 8)
    # 5. 设置x轴 和 y轴的标签
    plt.xlabel('X Axis', size=20)
    plt.ylabel('Y Axis', size=10)
    # 6. 设置标题.
    plt.title('Line Plot', size=30)
    # 7. 显示图片
    plt.show()
  • 方式2: 面向对象

    python 复制代码
    # 面向对象 绘图.
    import matplotlib.pyplot as plt
    ​
    # 1. 准备x轴 和 y轴的数据.
    x = [-3, 5, 7]  # x轴坐标
    y = [10, 2, 5]  # y轴坐标
    # 2. 创建画布, 坐标轴对象
    fig, ax = plt.subplots(figsize=(15, 6)) 
    # 3. 绘图, 传入x轴, y轴
    ax.plot(x, y)
    ax.grid(True)  # 添加网格线
    # 4. 设置x轴坐标 和 y轴坐标的范围
    ax.set_xlim(0, 10)
    ax.set_ylim(-3, 8)
    # 5. 设置x轴 和 y轴的标签
    ax.set_xlabel('X Axis', size=20)
    ax.set_ylabel('Y Axis', size=10)
    # 6. 设置标题.
    ax.set_title('Line Plot', size=30)
    # 7. 显示图片
    plt.show()
3.Matplotlib案例-anscombe数据集可视化
  • 数据集介绍

    • 通过Anscombe数据集说明数据可视化的重要性

    • Anscombe数据集由英国统计学家Frank Anscombe创建

    • 数据集包含4组数据,每组数据包含两个连续变量。

    • 每组数据的平均值、方差、相关性基本相同,但是当它们可视化后,就会发现每组数据的模式明显不同。

  • 查看四组数据值

    复制代码
    anscombe.groupby('dataset').describe().T

    describe()查看数据的查看数据的分布情况

    发现每组数据中, x, y 的分布情况基本相同, 从均值, 极值和几个4分位数上看, 这几组数据貌似分布差不多

  • 代码实现

    python 复制代码
    import pandas as pd
    ​
    # 1. 加载数据
    anscombe = pd.read_csv('data/anscombe.csv')
    anscombe
    ​
    # 2. 查看每组数据, 一共四组, 每组都是11条数据
    anscombe.dataset.value_counts()
    ​
    # 3. 查看每组数据的具体统计信息, 统计结果几乎一致,但是可视化后, 完全不同.
    anscombe.groupby('dataset').describe().T
    ​
    # 4.上面的数据一共可以分成4分 I II III IV  我们把这四份数据分别可视化, 画4张小图, 放到一个画布中
    fig = plt.figure(figsize=(16,8))
    # 在画布中 设置一个两行两列的框, 第一个框 对应axes1
    axes1 = fig.add_subplot(2,2,1)
    # 在画布中 设置一个两行两列的框, 第二个框 对应axes2
    axes2 = fig.add_subplot(2,2,2)
    # 在画布中 设置一个两行两列的框, 第三个框 对应axes3
    axes3 = fig.add_subplot(2,2,3)
    # 在画布中 设置一个两行两列的框, 第四个框 对应axes4
    axes4 = fig.add_subplot(2,2,4)
    ​
    # scatter()函数: 创建散点图.
    # 分别传入四组数据的 x 和 y列值即可, 对应四个坐标系.
    axes1.scatter(anscombe[anscombe['dataset']=='I']['x'],anscombe[anscombe['dataset']=='I']['y'])
    axes2.scatter(anscombe[anscombe['dataset']=='II']['x'],anscombe[anscombe['dataset']=='II']['y'])
    axes3.scatter(anscombe[anscombe['dataset']=='III']['x'],anscombe[anscombe['dataset']=='III']['y'])
    axes4.scatter(anscombe[anscombe['dataset']=='IV']['x'],anscombe[anscombe['dataset']=='IV']['y'])
    plt.show()
4.Matplotlib单变量可视化-直方图
  • 概述

    • 直方图会将数据分组后, 绘制成图表, 来显示数据的分布情况.
  • 示例代码

    python 复制代码
    # 生成等差数列
    import numpy as np
    np.linspace(3.07, 50.81, 11)  # 等差数列, 包左包右, 生成11个数
    ​
    ​
    # 具体的绘制直方图的动作.
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示汉字
    plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
    ​
    plt.figure(figsize=(16, 8))
    # bins表示把数据分成几个组(等价于: np.linspace(), 生成等差数列
    plt.hist(tips['total_bill'], bins=10) # 就写到这里, 先不写下边代码, 可以看到10个区间.   
    ​
    plt.title('总账单金额的分布情况')
    plt.grid(True)
    plt.xlabel('账单金额')
    plt.ylabel('出现次数')
    ​

    import numpy as np np.linspace(3.07,50.81,11) # bins = 10 相当于在账单的最小值, 和最大值范围内生成了11值的等差数列

    11个值划分10个区间, 直方图的高度, 就是落到每个区间中的数据的条目数

5.Matplotlib双变量可视化-散点图
  • 概述

    • 双变量(bivariate)指两个变量

    • 散点图用于表示一个连续变量随另一个连续变量的变化所呈现的大致趋势

    • 例如: 了解账单金额小费之间的关系可以绘制散点图

  • 示例代码

    python 复制代码
    # 绘制画布
    plt.figure(figsize=(12, 8))
    # 绘制散点图, 传入: x轴(这里是: 账单总金额), y轴(这里是: 小费)
    plt.scatter(tips['total_bill'], tips['tip'])
    # 设置x轴 和 y轴 值
    plt.xlabel('账单金额')
    plt.ylabel('小费金额')
    # 显示网格
    plt.grid(True)
6.Matplotlib多变量可视化-散点图
  • 概述

    • 在散点图的基础上, 可以通过颜色来区分不同的类别

    • 散点的大小也可以用来表示一个变量

  • 示例代码

    • 添加一列, 用来区分不同性别 显示的颜色

      python 复制代码
      # 添加一列, 用来区分不同性别显示的颜色
      def recode_sex(sex):
          if sex=='Female':
              return 'r'
          else:
              return 'b'
          
      # 调用上述自定义函数, 给 tips这个df对象, 新增一列.
      tips['sex_color'] = tips['sex'].apply(recode_sex)
      ​
      # 查看下男女各组总数
      tips.sex_color.value_counts()
    • 具体的绘制动作

    python 复制代码
    plt.figure(figsize=(12, 8))
    # x轴: 账单总金额, y轴: 小费
    # c: 表示散点的颜色
    # s: 表示散点的大小, 可以是一个数, 也可以是一个序列.
    # alpha: 表示散点的透明度.
    plt.scatter(tips.total_bill, tips.tip, c=tips.sex_color, s=tips['size'] * 10, alpha=0.5)
    plt.xlabel('账单金额')
    plt.ylabel('小费金额')
    plt.legend(tips.sex)
相关推荐
bryant_meng2 小时前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
KevinRay_3 小时前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
Captain823Jack3 小时前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站4 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack4 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
PieroPc4 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan5 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
码农君莫笑5 小时前
使用blazor开发信息管理系统的应用场景
数据库·信息可视化·c#·.net·visual studio
测试老哥5 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
終不似少年遊*5 小时前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法