怎么使用Matplotlib画图(折线图、散点图、柱状图、直方图、饼图)

文章目录

  • 前言
  • 一、Matplotlib介绍
    • 1.1 什么是Matplotlib
    • 1.2 为什么要学习Matplotlib
    • 1.3 实现一个简单的Matplotlib画图(Hello World)
    • 1.4 认识Matplotlib图像结构
    • 1.5 拓展知识点:matplotlib三层结构
      • 1.5.1 容器层
      • 1.5.2 辅助显示层
      • 1.5.3 图像层
  • 二、折线图(plot)与基础绘图功能
    • 2.1 折线图绘制
    • 2.2 完善原始折线图1(辅助显示层)
    • 2.3 完善原始折线图2(图像层)
    • 2.4 多个坐标系显示-plt.subplots(面向对象的画图方法)
  • 三、散点图(scatter)
  • 四、柱状图(bar)
  • 五、直方图(histogram)
  • 六、饼图(pie)
    • 总结


前言

  1. 折线图:以折线的上升或下降来表示统计数量的增减变化的统计图。特点:能够显示数据的变化趋势,反映事物的变化情况。
  2. 散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)。
  3. 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。
  4. 直方图:由一系列高度不等的纵向条纹或线段表示数据分布情况。一般用横轴表示数据范围,纵轴表示分布情况。特点:绘制连续性的数据展示一组或多组数据的分布状况。
  5. 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。特点:分类数据的占比情况。

一、Matplotlib介绍

1.1 什么是Matplotlib

  • 专门用于开发2D图表(包括3D图表)
  • 使用起来及其简单
  • 以渐进、交互式方式实现数据可视化

1.2 为什么要学习Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。能将数据进行可视化,更直观的呈现。使数据更加客观,更具有说服力。

1.3 实现一个简单的Matplotlib画图(Hello World)

import matplotlib.pyplot as plt
plt.figure() # 创建画布
plt.plot([1, 0, 9], [4, 5, 6]) # 画图
plt.show() # 呈现图像

在这里插入图片描述

1.4 认识Matplotlib图像结构

图像标题、x轴标题、y轴标题、大刻度、小刻度、绘图区、绘图区边框线、网格、图例说明等。

1.5 拓展知识点:matplotlib三层结构

1.5.1 容器层

容器层主要由Canvas、Figure、Axes组成。
Canvas:是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。
Figure:是Canvas上方一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。
Axes:是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。

特点为:
一个figure画布可以包含多个axes(坐标系/绘图区),但是一个axes只能属于一个figure。
一个axes(坐标系/绘图区)可以包含多个axis(坐标轴),包含两个即为2d坐标系,3个即为3d坐标系。

补充:
Figure:指整个图像(可以通过plt.figure()设置画布的大小和分辨率等)。
Axes(坐标系):数据的绘图区域。
Axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签。

1.5.2 辅助显示层

辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axisLabel)、坐标轴刻度(tick)、坐标轴刻度标签(tickLabel)、网格线(grid)、图例(legend)、标题(title)等内容。

该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。

1.5.3 图像层

二、折线图(plot)与基础绘图功能

2.1 折线图绘制

以展示上海一周的天气,比如上星期一到星期日的天气温度为例。

plt.figure() # 1、创建画布
plt.plot([1, 2, 3, 4, 5, 6, 7], [15, 18, 19, 18, 16, 15, 18]) # 2、绘制图像
plt.show() # 3、显示图像

plt.figure(figsize=(), dpi=)
figsize指定图的长宽
dpi是图像的清晰度

plt.figure(figsize=(10, 8), dpi=80) # 1、创建画布
plt.plot([1, 2, 3, 4, 5, 6, 7], [15, 18, 19, 18, 16, 15, 18]) # 2、绘制图像
plt.show() # 3、显示图像

2.2 完善原始折线图1(辅助显示层)

例:画出,某城市11点到12点一小时内每分钟的温度变化折线图,温度范围在15-18度之间。

# 1、准备数据
x = range(60)
y = [random.uniform(15, 18) for i in x]
# 2、创建画布
plt.figure(figsize=(10, 8))
# 3、绘制图像
plt.plot(x, y)
# 4、显示图像
plt.show()

在这里插入图片描述
添加自定义x、y刻度
plt.xticks(x, **kwargs):x是要显示的刻度值。
plt.yticks(y, **kwargs):y是要显示的刻度值。

x = range(60)
y = [random.uniform(15, 18) for i in x]
plt.figure(figsize=(12, 6))
plt.plot(x, y)
# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.yticks(range(0, 40, 5)) # 刻度0-40,步长5
plt.xticks(x[::5], x_label[::5])
plt.show()

添加网格与添加描述信息
plt.grid(True, linestyle=‘–’, alpha=0.5) # (显示网格,线条风格,透明度)。

x = range(60)
y = [random.uniform(15, 18) for i in x]
plt.figure(figsize=(12, 6))
plt.plot(x, y)
plt.yticks(range(0, 40, 5)) # 刻度0-40,步长5
plt.xticks(x[::5])
# 显示网格
plt.grid(True, linestyle='--', alpha=0.5)
# 添加x轴标题、y轴标题、图标标题
plt.xlabel("time change")
plt.ylabel("温度变化")
plt.title('某城市11-12点每分钟温度变化')
plt.show()

在这里插入图片描述

2.3 完善原始折线图2(图像层)

显示图例:plt.legend()
在同一个坐标系中画不同的图像

x = range(60)
y_beijing = [random.uniform(1, 3) for i in x]
y_shanghai = [random.uniform(15, 18) for i in x]
# 创建画布
plt.figure(figsize=(12, 6))
# 多次plot,添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条
plt.plot(x, y_shanghai, color='r', label='shanghai', linestyle='--')
plt.plot(x, y_beijing, color='b', label='beijing')
# 显示图例,光添加label没用,只是在辅助层,还要在图像层显示
plt.legend()
plt.yticks(range(0, 40, 5)) # 刻度0-40,步长5
plt.xticks(x[::5])
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlabel("time change")
plt.ylabel("temperature variation")
plt.title("Temperature change per minute at 11-12 o 'clock in Shanghai and Beijing")
plt.show()

在这里插入图片描述

2.4 多个坐标系显示-plt.subplots(面向对象的画图方法)

如果想要将上述北京和上海的图显示在同一个图的不同坐标系当中,可以通过subplots函数实现。

plt.subplots(nrows=1, ncols=1, **fig_kw)创建一个带有多个axes(坐标系/绘图区)的图像,返回两个对象。

在这里插入图片描述

三、散点图(scatter)

需求:探究房屋面积和房屋价格的关系

# 1、准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
       163.56, 120.06, 207.83, 342.75, 147.9,  53.06, 224.72,  29.51,
        21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
       140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1,
        30.74, 400.02, 205.35, 330.64, 283.45]
# 2、创建画布
plt.figure(figsize=(7, 4))
# 3、绘制图像
plt.scatter(x, y)
# 4、显示图像
plt.show()

在这里插入图片描述

四、柱状图(bar)

# 1、准备数据
movie_names = ['Thor 3: Ragnarok', 'Justice League', 'Coco', 'Geostorm', 'Tale of Demon Vanquish', 'Manhunt', 'Other']
tickets = [73853, 57767,  15969, 14839, 8725, 8716, 52222]
# 2、创建画布
plt.figure(figsize=(12, 4))
# 3、绘制柱状图
x_ticks = range(len(movie_names))
plt.bar(x_ticks, tickets, color=['b','r','g','y','c','m','y','k','c','g','b'])
# 修改x刻度
plt.xticks(x_ticks, movie_names)
# 添加标题
plt.title("Box office revenue comparison")
# 添加网格显示
plt.grid(linestyle="--", alpha=0.5)
# 4、显示图像
plt.show()

在这里插入图片描述

需求2-如何对比电影票房收入才更能加有说服力?

# 1、准备数据
movie_name = ['Thor 3: Ragnarok','Justice League','Coco']
first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]
# 2、创建画布
plt.figure(figsize=(7, 4))
# 3、绘制柱状图
plt.bar(range(3), first_day, width=0.2, label="First-day box office")
plt.bar([0.2, 1.2, 2.2], first_weekend, width=0.2, label="First-week box office")
# 显示图例
plt.legend()
# 修改刻度
plt.xticks([0.1, 1.1, 2.1], movie_name)
# 4、显示图像
plt.show()

在这里插入图片描述

五、直方图(histogram)

直方图绘制
plt.hist(x, bins=None, normed=None)
1、设置组距
2、设置组数(相应公式:组数=极差/组距=(max-min)/bins)

需求:电影时长分布状况

# 1、准备数据
time = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142,
        127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,
        78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130, 126, 130, 126, 116, 123, 106, 112,
        138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,
        105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114, 105, 115, 132, 145, 119, 121, 112,
        139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102, 123,
        107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133, 112, 114, 122, 109, 106, 123, 116,
        131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,
        136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141, 120, 117, 106, 149, 122, 122, 110,
        118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,
        121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113, 134, 106, 144, 110, 137, 137, 111,
        104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,
        131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111, 111, 133, 150]
# 2、创建画布
plt.figure(figsize=(7, 4))
# 3、绘制直方图
distance = 2 # 组距
group_num = int((max(time) - min(time)) / distance) # 组数

plt.hist(time, bins=group_num, density=True)

# 修改x轴刻度
plt.xticks(range(min(time), max(time) + 2, distance))
# 添加网格
plt.grid(linestyle="--", alpha=0.5)
# 4、显示图像
plt.show()

在这里插入图片描述

六、饼图(pie)

plt.pie(x, labels=,autopct=,colors)
x是数量。自动算百分比
labels是每部分名称
autopct是占比显示指定%1.2f%%
colors是每部分颜色

# 1、准备数据
movie_names = ['Thor 3: Ragnarok', 'Justice League', 'Coco', 'Geostorm', 'Tale of Demon Vanquish', 'Manhunt', 'Other']
tickets = [73853, 57767,  15969, 14839, 8725, 8716, 52222]

# 2、创建画布
plt.figure(figsize=(7, 4), dpi=80)
# 3、绘制饼图
plt.pie(tickets, labels=movie_names, colors=['b','r','g','y','c','m','y','k','c','g','y'], autopct="%1.2f%%")

# 显示图例
plt.legend()
plt.axis('equal')
# 4、显示图像
plt.show()

在这里插入图片描述


总结

一步一个脚印,lyy加油!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对某登录站点的JS前端逆向思路

前言 js逆向一直没有相关了解,虽然目前渗透遇见的不是很多,大多数遇见的要么不加密,要么无法实现其加密流程,不过最近看到了一个较为简单的站点正好能够逆向出来,就做了简单记录。本文旨在介绍js逆向的一些基础思路&a…

Golang数据类型(数字型)

Go数据类型(数字型) Go中数字型数据类型大致分为整数(integer)、浮点数(floating point )和复数(Complex)三种 整数重要概念 整数在Go和Python中有较大区别,主要体现在…

Spring Security 6.x 系列(7)—— 源码分析之Builder设计模式

一、Builder设计模式 WebSecurity、HttpSecurity、AuthenticationManagerBuilder 都是框架中的构建者,把他们放到一起看看他们的共同特点: 查看AuthenticationManagerBuilder的继承结构图: 查看HttpSecurity的继承结构图: 查看W…

Java实现飞翔的鸟小游戏

Java实现飞翔的鸟小游戏 1.准备工作 创建一个新的Java项目命名为“飞翔的鸟”,并在src中创建一个包命名为“com.qiku.bird",在这个包内分别创建4个类命名为**“Bird”、“BirdGame”、“Column”、“Ground”,并向需要的图片**素材导入…

Redis7--基础篇4(Redis事务)

Redis事务是什么 可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令都会序列化,按顺序串行,而不会被其他命令插入。 其作用就是在一个队列中,一次性、顺序、排他的执行一系列命令。 Redis事务 VS 数据…

【Java】文件I/O-文件内容操作-输入输出流-Reader/Writer/InputStream/OutputStream四种流

导读 在文件I/O这一节的知识里,对文件的操作主要分为两大类: ☑️针对文件系统进行的操作 ☑️针对文件内容进行的操作 上文已经讲了针对文件系统即File类的操作,这篇文章里博主就来带了解针对文件内容的操作,即输入输出流&am…

润申信息企业标准化管理系统 SQL注入漏洞复现

0x01 产品简介 润申信息科技企业标准化管理系统通过给客户提供各种灵活的标准法规信息化管理解决方案,帮助他们实现了高效的标准法规管理,完成个性化标准法规库的信息化建设。 0x02 漏洞概述 润申信息科技企业标准化管理系统 CommentStandardHandler.as…

视频分割方法:批量剪辑高效分割视频,提取m3u8视频技巧

随着互联网的快速发展,视频已成为获取信息、娱乐、学习等多种需求的重要载体。然而,很多时候,需要的只是视频的一部分,这就要对视频进行分割。而m3u8视频是一种常见的流媒体文件格式,通常用于在线视频播放。本文将分享…

linux提权_永久提权_临时提权

2.3 提权 2.3.1 su:永久提权 su命令用于切换当前用户身份到指定用户或者以指定用户的身份执行命令或程序。 ​ 普通用户切换到root用户,可以使用su - 或su root,但是必须输入root密码才能完成切换。root用户切换到普通用户,可以使用su user…

什么是HTML语义化,有什么好处?

HTML 语义化就是让页面的内容结构化,便于对浏览器 、搜索引擎解析。 用正确的标签做正确的事情,语义类标签是对内容的补充,表达标题摘要、文章结构、强调重点、丰富含义、避免歧义。 HTML 语义化的好处:HTML 语义化不是一定要执…

【OpenGL】Clion配置

OpenGL简介 OpenGL(Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。OpenGL是行业领域中…

SSD-Single Shot Detector

文章目录 SSD模型主要改进点模型说明 训练Choosing scales and aspect ratios for default boxesMatching strategyTraining objectiveHard negative miningData augmentation 实验结果基本网络参数PASCAL VOC2007模型消融实验PASCAL VOC2012COCO推理速度比较 前面提到了两种经…

Netfilter中的NAT

目录 前瞻 SNAT和DNAT SNAT DNAT 实验 前瞻 NAT: (network address translation),支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链 NAT分为SNAT和DNAT SNAT:支持POSTROUTING, INPUT&…

Element UI 实战:跨页保存表格选中状态与判断状态可选性的高效方案

引言 在前文中,我们曾深入探讨了在修改数据后跨页时提醒用户可能丢失数据的问题。虽然这种方式对于一些场景是足够的,但当涉及选择框时,我们需要更为智能和高效的解决方案。在本文中,我们将分享一种基于 Element UI 的实际案例&am…

Java封装讯飞星火大模型历险记

问题描述与分析 现状描述与目标 在使用讯飞星火大模型API的过程中,API的返回结果在可以在其他线程中进行分次打印,但是在main方法中直接打印返回结果,显示为空。这种情况下不利于二次封装,希望在main方法中获取完整的API返回结果…

【开源视频联动物联网平台】帧率、码率和分辨率

帧率、码率和分辨率是视频和图像处理中的重要概念,它们直接影响到视频的带宽占用和显示效果。在进行视频项目时,根据应用需求对视频参数进行调整是必要的,因此了解这些参数的具体含义和指标是非常重要的。 在进行视频项目时,需要…

实战Flask+BootstrapTable后端传javascript脚本给前端实现多行编辑(ajax方式)

相信看到此文的朋友们一定会感到庆幸,总之我是用了两天死磕,才得到如下结果,且行且珍惜,祝好各位! 话不多说,有图有源码 1.看图 2.前端实现页面 <!DOCTYPE html> {% from "common/_macro.html" import static %} <html> <meta charset"utf-8&…

Python开发运维:PyMongo 连接操作 MongoDB

目录 一、理论 1.PyMongo模块 2.Mongo Shell 二、实验 1. Windows11安装MongoDB 7.0.4 2.Windows11安装MongoDB Shell 2.1.0 3.PyMongo 连接 MongoDB&#xff08;无密码方式&#xff09; 4.PyMongo 连接 MongoDB&#xff08;有密码方式&#xff09; 5.PyMongo 操作 Mo…

rabbitmq消息队列实验

实验目的&#xff1a;实现异步通信 实验条件&#xff1a; 主机名 IP地址 组件 test1 20.0.0.10 rabbitmq服务 test2 20.0.0.20 rabbitmq服务 test3 20.0.0.30 rabbitmq服务 实验步骤&#xff1a; 1、安装rabbitmq服务 2、erlang进入命令行&#xff0c;查看版本 …

zookeeper集群和kafka集群

&#xff08;一&#xff09;kafka 1、kafka3.0之前依赖于zookeeper 2、kafka3.0之后不依赖zookeeper&#xff0c;元数据由kafka节点自己管理 &#xff08;二&#xff09;zookeeper 1、zookeeper是一个开源的、分布式的架构&#xff0c;提供协调服务&#xff08;Apache项目&…