Matplotlib-数据可视化详解

news2024/11/15 12:41:06
1. 数据可视化简介
  • 可视化介绍

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

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

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

  • 可视化库介绍

    • 基于Matplotlib 绘制静态图形

      • pandas

      • seaborn

      基于JS (javaScript)

      • pyecharts/echarts

      • plotly

2.Matplotlib的API介绍

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

  • 导包

    # 使用Matplotlib需要导入pyplot 
    # Matplotlib.pyplot 包含一系列绘图函数的相关函数
    import matplotlib.pyplot as plt

  • 方式1: 状态接口

    # 状态接口方式 绘图.
    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: 面向对象

    # 面向对象 绘图.
    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分位数上看, 这几组数据貌似分布差不多

  • 代码实现

    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单变量可视化-直方图
  • 概述

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

  • 示例代码

    # 生成等差数列
    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)指两个变量

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

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

  • 示例代码

    # 绘制画布
    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多变量可视化-散点图
  • 概述

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

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

  • 示例代码

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

      # 添加一列, 用来区分不同性别显示的颜色
      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()

    • 具体的绘制动作

    • 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HDFS分布式文件系统01-HDFS架构与SHELL操作

HDFS分布式文件系统 学习目标第一课时知识点1-文件系统的分类单机文件系统网络文件系统分布式文件系统 知识点2-HDFS架构知识点3-HDFS的特点知识点4-HDFS的文件读写流程知识点5-HDFS的健壮性 第二课时知识点1-HDFS的Shell介绍HDFS Shell的语法格式如下。HDFS Shell客户端命令中…

三篇文章速通JavaSE到SpringBoot框架 上 JavaSE基础语法

文章目录 前置环境变量基本数据类型引用数据类型标识符运算符 流程控制三种基本流程结构 方法方法声明格式方法的调用方式方法的重载方法的重写重载和重写的区别 数组数组的特点 面向对象基本概念类的编写和对象的创建与使用类的编写对象的创建和使用 构造器构造器特点 封装以属…

55 循环神经网络RNN的实现_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录循环神经网络的从零开始实现[**独热编码**]初始化模型参数循环神经网络模型预测[**梯度裁剪**]训练小结练习 循环神经网络的从零开始实现 import math import torch from torch import nn from torch.nn import functional as F from d2l i…

玄机靶场--蚁剑流量

木马的连接密码是多少 黑客执行的第一个命令是什么 id 黑客读取了哪个文件的内容,提交文件绝对路径 /etc/passwd 黑客上传了什么文件到服务器,提交文件名 黑客上传的文件内容是什么 黑客下载了哪个文件,提交文件绝对路径 蚁剑流量特征总结 …

proteus仿真(2)

一,配置编译器 可以在proteus中写stm32的代码,需要先检查是否配置了keil的编译器 选择调试,编译器配置 stm32为ARM版本 51为8051版本 如果已经配置了keil—arm,但是打开没有,可以选择检查当前,刷新一下。 …

【有啥问啥】多臂老虎机(Multi-Armed Bandit,MAB)算法详解

多臂老虎机(Multi-Armed Bandit,MAB)算法详解 1. 引言 多臂老虎机(Multi-Armed Bandit,MAB)问题源自概率论和决策论,是一个经典的决策优化问题。最早提出的形式是赌场中的老虎机问题&#xff…

若依vue3.0表格的增删改查文件封装

一、因若依生成的文件没进行封装,维护起来比较麻烦。所以自己简单的进行封装了一下 gitee代码(文件)地址:https://gitee.com/liu_yu_ting09/ruo_yi.git 二、封装的方法(下面绿色按钮进行全局封装一个JeecgListMixin.js…

【解密 Kotlin 扩展函数】扩展函数的底层原理(十八)

导读大纲 1.1.1 从 Java 调用扩展函数1.1.2 扩展函数无法重载 1.1.1 从 Java 调用扩展函数 在编译器底层下,扩展函数是一种静态方法,它接受接收器对象作为第一个参数 调用它不涉及创建适配器对象或任何其他运行时开销这使得从 Java 使用扩展函数变得非常简单 调用静态方法并传…

《深度学习》卷积神经网络CNN 实现手写数字识别

目录 一、卷积神经网络CNN 1、什么是CNN 2、核心 3、构造 二、案例实现 1、下载训练集、测试集 代码实现如下: 2、展示部分图片 运行结果: 3、图片打包 运行结果: 4、判断当前使用的CPU还是GPU 5、定义卷积神经网络 运行结果&a…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.3-2.4

目录 第四门课 卷积神经网络(Convolutional Neural Networks)第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)2.3 残差网络(ResNets)(Residual Networks (ResNets))2.4 残差网络为什么有用&am…

武汉正向科技 格雷母线检测方式 :车检,地检

正向科技|格雷母线原理运用-车检,地检 地上检测方式 地址编码器和天线箱安装在移动站上,通过天线箱发射地址信号,地址解码器安装在固定站(地面)上,在固定站完成地址检测。 车上检测方式 地址编码器安装在…

【OpenCV】场景中人的识别与前端计数

1.OpenCV代码设计讲解 突发奇想,搞个摄像头,识别一下实验室里面有几个人,计数一下(最终代码是累加计数,没有优化),拿OpenCV来玩一玩 首先,还是优先启动电脑摄像头,本项…

react hooks--useCallback

概述 useCallback缓存的是一个函数,主要用于性能优化!!! 基本用法 如何进行性能的优化呢? useCallback会返回一个函数的 memoized(记忆的) 值;在依赖不变的情况下,多次定义的时候,返回的值是…

MySQL record 07 part

索引 注意,是排序,有序就会加快查找的速度。 优势: 劣势 索引会单独占用存储空间索引虽然可以提高排序和查找的速度,但同时也会降低更新、删除、新增数据的速度,因为MySQL此时既要更改表,也要维护更改表后…

ubuntu安装无线网卡驱动(非虚拟机版)

本文不是基于虚拟机,是双系统 太夸张了 实验室居然没网线 只有一个师兄留下来的无线网卡 装完了ubuntu结果没网 make都用不了 然后搜了下大概发现是没有预装gcc和make 参考如下 https://zhuanlan.zhihu.com/p/466440088 https://wwsk.lanzouj.com/iAj4t2ao46zc…

电脑配置不够,想玩老头环可以上ToDesk云电脑体验一下

最近,《艾尔登法环》游戏更新了好多新东西,让玩家特别兴奋。比如说,FromSoftware工作室一直在改进游戏,让游戏运行得更稳、更流畅。而且,《艾尔登法环:黄金树幽影》这个扩展包一出,游戏世界变得…

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘attribute‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

调用JS惰性函数问题

第一次调用这个函数时 console.log(a) 会被执行,打印出 a,全局变量 a 被重定义并被赋予了新的函数,当再一次调用时,console.log(b) 被执行。 用处:因为各浏览器之间的行为差异,经常会在函数中包含了大量的…

Kafka技术详解[1]:简介与基础概念

目录 1. Kafka入门 1.1 概述 1.1.1 初识Kafka 1.1.2 消息队列 1.1.3 生产者-消费者模式 1.1.4 消息中间件对比 1.1.5 ZooKeeper 1. Kafka入门 1.1 概述 1.1.1 初识Kafka Kafka是由Scala和Java语言开发的高吞吐量分布式消息发布和订阅系统,也是大数据技术领…

《汇编语言》第14章——实验 14访问CMOS RAM

编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间 assume cs:code data segment db 2024/09/23 00:00:00,$ data endscode segment start:mov ax,datamov es,axcall get_hms_funccall get_ymd_funcmov dh,12 ;dh中存放…