数据挖掘——matplotlib

matplotlib概述

Mat指的是Matlab,plot指的是画图,lib即library,顾名思义,matplotlib是python专门用于开发2D图表的第三方库,使用之前需要下载该库,使用pip命令即可下载。

pip install matplotlib

1、matplotlib画图流程

matplotlib可分为三层结构,分别为:容器层(canvas),辅助显示层和显示层,而容器显示层又可以分为画板层,画布层和绘图区。辅助显示层主要是添加网格,图例等,增加可读性。而显示层则负责是将图像显现出来。

# 简单画图-折线图
import matplotlib.pyplot as plt
plt.figure()  # 容器层
plt.plot([1, 0, 9], [4, 5, 6])   # 三个点(1,4)(0,5)(9,6)  并连线
plt.show()  # 显示图像

结果如下,依次将三点连线
在这里插入图片描述

2、常用操作

(a)是否添加网格

plt.grid(visible,linstyle,alpha)
# visible传入布尔值,为True表示可见
# linestyle 表示线的形状
# alpha 表示透明系数

(b) 修改刻度

plt.xticks(ticks, [labels], **kwargs)
# ticks:数组类型,用于设置X轴刻度间隔
# [labels]:数组类型,用于设置每个间隔的显示标签
# **kwargs:用于设置标签字体倾斜度和颜色等外观属性。

(c )设置x,y轴说明以及标题

plt.xlabel('name')   # 设置x轴名称
plt.ylabel('name')   # 设置y轴名称
plt.title('title')   # 设置标题

(d)设置图例

plt.legend(loc='best')  # loc指的为图例位置,还有其他取值,不过一般设为best即可

(e) 设置多个绘图区
如果想要在一幅图上显示多个图像,可以使用如下方法:

figure,axes = plt.subplots(nrows,ncols)
# 划分绘图区,参数表示几行几列,默认一行一列,即一个绘图区
# 其返回值为一个figure对象和axes,使用axes[i]可以操作对应画图
# 设置每个子图区和上面大部分操作相同,但是对于修改x,y轴标题和刻度的时候需要修改一下方法名
# 修改对应的刻度使用axes[i].set_xticks(),修改x,y轴说明和标题用set_xlabel(),set_ylabel(),set_title()

(f)设置图片大小

plt.figure(figsize,dpi) 
# figsize传入一个元组,指定figure的宽和高,单位为英寸
# dpi指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80

(g)图片的保存

plt.savefig(loc)
# loc指存储路径,默认为当前目录
# 注意保存必须在plt.show()之前进行,否则保存出来是一个空白图片

3、常用的图形(折线图,柱状图,饼状图,直方图,散点图)

(a) 折线图(plot)

 plt.plot(x,y,color,linestyle,label)
 """
 x:横轴数据
 y:纵轴数据
 color:颜色,可以使用RGB或者英语单词
 linestyle:线的类型
 label:标签,如果后面设置图例,需要在此设置label
 """

需求:利用折线图绘制上海和北京两地上午11点到12点的气温变化,要求创建两个绘图区并显示图例,加上网格以及x轴、y轴说明,x轴时间刻度为每5分钟显示一次,y轴显示气温为0到40之间,一小格代表5摄氏度。上海温度在25-28摄氏度之间,北京温度在20-27摄氏度之间。

import matplotlib.pyplot as plt
import random
plt.rcParams['font.family'] = 'STFangsong'  # 正常显示中文:仿宋体
# 准备数据
x = range(60)
y_shanghai = [random.uniform(25, 28) for i in x]
y_beijing = [random.uniform(20, 27) for i in x]
figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)   # 创建两个绘图区,一行两列
axes[0].plot(x, y_shanghai, color='red', label='上海')
axes[1].plot(x, y_beijing, color='green', linestyle='--', label='北京')
# 设置刻度
time = ['11点{}分'.format(i) for i in range(0, 60, 5)]
axes[0].set_xticks(x[::5], time)
axes[1].set_xticks(x[::5], time)
# 设置y轴刻度
axes[0].set_yticks(range(0, 40, 5))
axes[1].set_yticks(range(0, 40, 5))
# 设置x,y轴说明
axes[0].set_xlabel("时间")
axes[1].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[1].set_ylabel("温度")
# 设置图例,和前面plot中的label对应
axes[0].legend()
axes[1].legend()
# 加入网格,透明度为0.5
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)
# 加标题
axes[0].set_title("上海中午11点到12点气温折线图")
axes[1].set_title("北京中午11点到12点气温折线图")
plt.show()

示意图如下所示:
折线图实例
(b)散点图(scatter)

plt.scatter(x,y)
"""
x:横轴数据
y:纵轴数据
散点图只在坐标系上描出对应的点,可以看出变量之间的关系
"""

需求:用散点图画出房价和面积之间的关系,数据如下:房价(万元):[195.53, 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],对应的面积(平方米):[225.98, 247.97, 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]

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'STFangsong'
# 创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 绘制图形
x = [225.98, 247.97, 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 = [195.53, 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]
plt.scatter(x, y)
plt.xlabel("房屋面积(平方米)")
plt.ylabel("房屋价格(万元)")
plt.xticks(range(0, 500, 50))
plt.show()

示意图如下所示:
在这里插入图片描述
经图像分析,房屋面积和房屋价格呈正相关。
(c )柱状图(Bar)

plt.bar(x,y,color)
# x 表示x轴数据
# y 表示y轴数据
# color 表示颜色,可以传入一个列表

需求:画出电影与对应票房的柱状图
movie = [“头脑特工队2”,
“沙丘:第二部分”,
“哥斯拉大战金刚:新帝国”,
“功夫熊猫4”,
“猩球崛起:王国”,
“小丑2:双重疯狂”,
“捉鬼敢死队:冰冻帝国”,
“鲍勃·马利:一爱”,
“养蜂人”,
“木法沙:狮子王”
]
data = [
850.5, # 百万美元(预测)
720, # 百万美元(预测)
650, # 百万美元(预测)
600, # 百万美元(预测)
450, # 百万美元(估计)
800, # 百万美元(预测)
188, # 百万美元
177, # 百万美元
153, # 百万美元
690 # 百万美元(预测)
]

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'STFangsong'
movie = [
    "头脑特工队2",
    "沙丘:第二部分",
    "哥斯拉大战金刚:新帝国",
    "功夫熊猫4",
    "猩球崛起:王国",
    "小丑2:双重疯狂",
    "捉鬼敢死队:冰冻帝国",
    "鲍勃·马利:一爱",
    "养蜂人",
    "木法沙:狮子王"
]
data = [
    850.5,  # 百万美元(预测)
    720,    # 百万美元(预测)
    650,    # 百万美元(预测)
    600,    # 百万美元(预测)
    450,    # 百万美元(估计)
    800,    # 百万美元(预测)
    188,    # 百万美元
    177,    # 百万美元
    153,    # 百万美元
    690     # 百万美元(预测)
]
plt.figure(figsize=(20, 8), dpi=80)
color = ['b', 'r', 'g', 'y', 'c', 'm', 'y', 'k', 'c', 'g']
plt.bar(movie, data, color=color)
plt.grid(True, linestyle="--", alpha=0.5)
plt.title("电影票房")
plt.xlabel("电影名称")
plt.ylabel("票房(百万美元)")
plt.show()

示意图如下所示:
电影票房柱状图
(d)直方图(hist)
直方图与柱状图的区别为:直方图各个柱状之间是连续的,而柱状图是离散的。

plt.hist(x,bins,**kwargs(density)) 
# x为数据,bins为组数,density为频率,为True则显示为频率

需求:描绘电影时长的频率分布直方图,时长数据见具体程序。

import matplotlib.pyplot as plt
plt.rcParams['font.family']='STFangsong'
movie_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]
plt.figure(figsize=(20, 8), dpi=80)
plt.hist(movie_time, bins=int((max(movie_time)-min(movie_time))//2), density=True)  # 频率分布直方图,所有density为True
plt.xticks([i for i in range(min(movie_time), max(movie_time)+2, 2)])   # 加2因为range是左闭右开,防止最大值取不到,所以加2
plt.grid(linestyle='--', alpha=0.5)
plt.title("电影时长分布直方图")
plt.xlabel("时长")
plt.ylabel("频率")
plt.show()

示意图如下所示:
电影时长频率分布直方图
(e)饼状图

plt.pie(x,labels,autopct,colors)
# x:数量,根据数量自动计算百分比
# labels:每部分名称,需要和x一一对应
# autopct:占比指定%1.2f%%
# colors:每部分颜色
# 一般超过9个类的时候就不用饼图了,而使用柱形图

需求:描绘电影和对应票房的饼状图。
movie_name = [‘雷神3:诸神黄昏’, ‘正义联盟’, ‘东方快车谋杀案’, ‘寻梦环游记’, ‘全球风暴’, ‘降魔传’, ‘追捕’, ‘七十七天’, ‘密战’,‘狂兽’, ‘其它’]
place_count = [60605, 54546, 45819, 28243, 13270, 9945, 7679, 6799, 6101, 4621, 20105]

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'STFangsong'
movie_name = ['雷神3:诸神黄昏', '正义联盟', '东方快车谋杀案', '寻梦环游记', '全球风暴', '降魔传', '追捕', '七十七天', '密战',
              '狂兽', '其它']
place_count = [60605, 54546, 45819, 28243, 13270, 9945, 7679, 6799, 6101, 4621, 20105]
plt.figure(figsize=(20, 8), dpi=80)
plt.pie(place_count, labels=movie_name, autopct="%1.2f%%", colors=['b', 'r', 'g', 'y', 'c', 'm', 'y', 'k', 'c', 'g', 'y'])
plt.legend()
# 将长径和短径设为相等,构成一个圆,否则为椭圆
plt.axis('equal')
plt.show()

示意图如下所示:
在这里插入图片描述

4、总结

对于各类图形的绘画,发现只是在方法名和参数上有所不同,只需要掌握折线图对应plot,散点图对应scatter,柱状图对应bar,饼图对应pie,直方图对应hist,再传入具体的参数即可。
折线图:plt.plot(x,y) # x为横轴数据,y为纵轴数据
散点图:plt.scatter(x,y) # x为横轴数据,y为纵轴数据
柱状图:plt.bar(x,y) # x为横轴数据,y为纵轴数据
饼图:plt.pie(x,labels) # x轴数据,labels为对应的标签
直方图:plt.hist(x,bins,density) # x为数据,bins为组数,density为是否按照频率显示,默认为False

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

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

相关文章

Nuxt框架中内置组件详解及使用指南(四)

title: Nuxt框架中内置组件详解及使用指南(四) date: 2024/7/9 updated: 2024/7/9 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt 3框架中的两个内置组件:和的使用方法与示例。用于捕获并处理客户端错误,提供…

【漏洞复现】29网课交单平台 SQL注入

声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 29网课交单平台是一个在线学习平台,用于帮助学生完成网络课程的学习任务。这个平台提供了包括…

过滤器与拦截器区别、应用场景介绍

我们在进行 Web 应用开发时,时常需要对请求进行拦截或处理,故 Spring 为我们提供了过滤器和拦截器来应对这种情况。 那么两者之间有什么不同呢?本文将详细讲解两者的区别和对应的使用场景。 过滤器 过滤器是一种在 Java Web 应用中用于处理…

Celery,一个实时处理的 Python 分布式系统

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…

Start LoongArch64 Alpine Linux VM on x86_64

一、Build from source(build on x86_64) Obtain the latest libvirt, virt manager, and QEMU source code, compile and install them 1.1 Build libvirt from source sudo apt-get update sudo apt-get install augeas-tools bash-completion debhelper-compat dh-apparmo…

Python学习笔记33:进阶篇(二十二)pygame的使用之image模块

前言 基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。 我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前&#xff…

Codeforces Round 954 (Div. 3) F. Non-academic Problem

思路&#xff1a;考虑缩点&#xff0c;因为是无向图&#xff0c;所以双连通分量缩完点后是一棵树&#xff0c;我们去枚举删除每一条树边的答案&#xff0c;然后取最小值即可。 #include <bits/stdc.h>using namespace std; const int N 3e5 5; typedef long long ll; …

Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换

Profibus和ModbusTCP是工业控制自动化常用的二种通信协议。Profibus是一种串口通信协议&#xff0c;它提供了迅速靠谱的数据传输和各种拓扑结构&#xff0c;如总线和星型构造。Profibus可以和感应器、执行器、PLC等各类设备进行通信。 ModbusTCP是一种基于TCP/IP协议的通信协议…

Clickhouse的联合索引

Clickhouse 有了单独的键索引&#xff0c;为什么还需要有联合索引呢&#xff1f;了解过mysql的兄弟们应该都知道这个事。 对sql比较熟悉的兄弟们估计看见这个联合索引心里大概有点数了&#xff0c;不过clickhouse的联合索引相比mysql的又有些不一样了&#xff0c;mysql 很遵循最…

Springboot各个版本维护时间

Springboot各个版本维护时间

【 正己化人】 把自己做好,能解决所有问题

阳明先生说&#xff1a;与朋友一起辩论学问&#xff0c;纵然有人言辞观点浅近粗疏&#xff0c;或者是炫耀才华、显扬自己&#xff0c;也都不过是毛病发作。只要去对症下药就好&#xff0c;千万不能怀有轻视别人的心理&#xff0c;因为那不是君子与人为善的心。 人会爱发脾气、…

微信服务里底部的不常用功能如何优化的数据分析思路

图片.png 昨天下午茶时光&#xff0c;和闺蜜偶然聊起&#xff0c;其实在微信服务底部&#xff0c;有很多被我们忽略遗忘&#xff0c;很少点过用过的功能服务&#xff0c;往往进入服务只为了收付款或进入钱包&#xff0c;用完就走了&#xff0c;很少拉到底部&#xff0c;看到和用…

Python函数 之 函数基础

print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数&#xff0c;函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…

LiveNVR监控流媒体Onvif/RTSP用户手册-录像计划:批量配置、单个配置、录像保存(天)、配置时间段录像

TOC 1、录像计划 支持单个通道 或是 通道范围内配置支持快速滑选支持录像时间段配置 1.1、录像存储位置如何配置&#xff1f; 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 支持 Windows Linux 及其它CPU架构&#xff08;国产、嵌入式…&#xff09;操作系统安装包下载 、 安装…

亚马逊跟卖采集选品,2小时自动检索3000条商品数据与...

自动查商标局2个小时2928条数据。 ERP采集3000条数据需要多久&#xff1f;10&#xff1a;34开始的&#xff0c;12&#xff1a;52分&#xff0c;应该是两个小时多。采集3000条数据&#xff0c;2928条&#xff0c;平均每个就是3秒左右。 可以看一下采集出来的数据&#xff0c;打…

【C++知识点总结全系列 (08)】:面向对象编程OOP

这里写目录标题 1、OOP概述(1)面向对象四大特征A.抽象B.封装C.继承D.多态 (2)构造函数A.What&#xff08;什么是构造函数&#xff09;B.Why&#xff08;构造函数的作用&#xff09;C. Which&#xff08;有哪些构造函数&#xff09; (3)析构函数A.What&#xff08;什么是析构函数…

Python基础知识——(003)

文章目录 P12——11. 保留字和标识符 1. 保留字 2. Python标识符的命名规则&#xff08;必须遵守&#xff09; 3. Python标识符的命名规范&#xff08;建议遵守&#xff09; P13——12. 变量与常量 变量的语法结构 变量命名应遵循以下几条规则 常量 P14——13. 数值类型…

数据结构作业/2024/7/9

2>实现双向循环链表的创建、判空、尾插、遍历、尾删、销毁 fun.c #include "head.h" //1.双向循环链表的创建 doubleloop_ptr create_list() …

如何在 PostgreSQL 中确保数据的异地备份安全性?

文章目录 一、备份策略1. 全量备份与增量备份相结合2. 定义合理的备份周期3. 选择合适的备份时间 二、加密备份数据1. 使用 PostgreSQL 的内置加密功能2. 使用第三方加密工具 三、安全的传输方式1. SSH 隧道2. SFTP3. VPN 连接 四、异地存储的安全性1. 云存储服务2. 内部存储设…

Spring Cloud 引入

1.单体架构&#xff1a; 定义&#xff1a;所有的功能实现都打包成一个项目 带来的后果&#xff1a; ①后端服务器的压力越来越大&#xff0c;负载越来越高&#xff0c;甚至出现无法访问的情况 ②业务越来越复杂&#xff0c;为了满足用户的需求&#xff0c;单体应用也会越来越…