Matplotlib实现数据可视化

Matplotlib是Python中应用较为广泛的绘图工具之一,首次发布于2007年。它在函数设计上参考了MATLAB,因此名字以"Mat"开头,中间的"plot"代表绘图功能,结尾的"lib"表示它是一个集合。Matplotlib支持众多图形的绘制

Matplotlib绘图流程

  1. 准备数据
  2. 添加内容
  3. 绘制图形
  4. 保存/显示

一、折线图

1、实现AQI走势折线图

 import matplotlib.pyplot as pltimport numpy as np​plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式plt.rcParams['axes.unicode_minus'] = False# 1、准备数据data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)x = data[:31, 2]  # 日期y = data[:31, -1]  # AQI# 2、添加内容plt.title("2017年1月份AQI走势图") plt.xlabel("日期")                 plt.ylabel("AQI的值")     x_label = [str(int(i)) for i in x]  # 设置x轴名称plt.xticks(x, x_label)  # 设置x轴对应的刻度名称# 3、绘制图形plt.plot(x,y,c='red')# 4、显示图形plt.show()

常用标签和图形设置函数:

函数名描述
plt.title("标题内容")添加标题,可以指定标题名称、位置、颜色、字体大小
plt.xlabel("名称")添加X轴名称
plt.ylabel("名称")添加Y轴名称
plt.xlim(left,right)指定当前图形X轴的范围,即确定一个数值区间
plt.ylim(left,right)指定当前图形Y轴的范围,即确定一个数值区间
plt.xticks(ticks,labels,rotation)获取或设置X轴的当前刻度位置和标签。ticks刻度值,列表型。labels:放置在给定刻度线位置的标签。rotation:倾斜角度
plt.yticks(ticks,labels)获取或设置Y轴的当前刻度位置和标签
plt.legend(title,loc)显示 图例。title:图例添加标题,列表型。loc:图例的位置,可以设置为'beast','upper right','upper left','lower left','lower right','right','center left','center right','lower center','upper center','center'
plt.grid()显示网格线
plt.savefig()保存为图片

2、图形的优化和美化

plot()函数的常用参数:

 plot(*args, scalex=True, scaley=True, data=None, **kwargs)
参数描述
*args一个可变位置参数
**kwargs一个可变长关键字参数。下面的x、y、fmt、c/color都属于可变长参数
x,yX轴和Y轴对应的数据。数组或列表
fmt一个格式字符串
c/color设置颜色
w设置线宽

fmt是一种格式字符串,由颜色、标记和线型三部分组成:

 fmt = '[color][market][line]'

常用颜色符号

字符描述字符描述字符描述字符描述
'b'蓝色'r'红色'm'品红'k'黑色
'g'绿色'c'青色'y'黄色'w'白色

常用标记符号

字符描述字符描述字符描述字符描述
'.''4'右箭头'H'六边形2'_'标记线
','像素's'正方形'+'加号'v'下三角
'o'圆圈'p'五边形'x'X号'^'上三角
'1'下箭头'P'加号'D'菱形'<'左三角
'2'上箭头'*'星号'd'小菱形'>'右三角
'3'左箭头'h'六边形1'|'垂直线

常用线型符号

字符描述字符描述
'-'实线'-.'点画线
'--'长虚线':'短虚线
 # 红色长虚线,数据使用星号标记:plt.plot(x,y,"m--*")​# 黑色点画线,数据使用五边形标记:plt.plot(x,y,"k-.D")​# 蓝色短虚线,无数据标记plt.plot(x,y,"b:")      # 颜色,线型和标记都是可选项

3、添加注释

使用matplotlib.pyplot.annotate()函数可实现添加注释:

 matplotlib.pyplot.annotate(text, xy, *args,**kwargs)

annotate()函数常用参数:

参数描述
text注释的文本,字符串型
xy要注释的点,元组型,(x轴,y轴)
xytext注释文本所在的位置,元组型,(x轴,y 轴)
arrowprops设置在xy和xytext之间绘制箭头的样式,可选,字典型,可设置以下特征:width:箭头宽度。headwidth:箭头底部宽度。headlength:箭头长度。facecolor:填充颜色。edgecolor:边框颜色。
 # 使用箭头标注最小值所在位置:index = np.argmin(y)                # 获取y中最小值所对应的索引plt.annotate(text='最小值',                    # 注释的文本xy=(x[index], y[index]),xytext=(x[index], y[index] + 50),color='red',                       # 文字颜色arrowprops=dict(facecolor='g',     # 填充颜色headlength=10,     # 箭头长度headwidth=10,      # 箭头底部宽度width=2,           # 箭头宽度edgecolor='g',     # 边框颜色))

如果只是设置注释文本,可以使用matplotlib.pylot.text()函数实现:

 matplotlib.pylot.text(x, y, s, fontdict=None, **kwargs)

text()函数的常用参数:

参数描述
x,y放置文本的位置
s文本内容
color文本颜色
fontdict设置文字属性,字典型。设置的属性主要有以下几种:fontsize:文字大小。fontstyle:文字样式,可设置为'normal','italic','oblique'。fontfamily:字体,可设为字体名称、'serif','sans-serif','cursive','fantasy','monospace'。alpha透明度,0~1的小数。rotation:文字的旋转角度,可设为数值、'vertical','horizontal'
 plt.text(12,350,"这是通过text设置的文字",color='red',fontdict={"fontsize":15,             # 文字大小"fontfamily":"sans-serif", # 字体"alpha":0.5                # 透明度"rotation":15              # 倾斜15度})

二、条形图

1、条形图

import numpy as np
import matplotlib.pyplot as plt
# 设置中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
plt.rcParams['axes.unicode_minus'] = False
# 1、读取数据
data = np.loadtxt('../数据集/aqi_new.csv',delimiter=',',dtype=float,skiprows=1)
x = np.arange(1,21) 		# 日期1-22
y = data[:20,3] 			# PM2.5
# 2、添加内容
plt.title("2017年1月份(前20天)AQI走势图")	   # 设置标题
plt.xlabel("日期")							# 设置X轴名称
plt.ylabel("PM2.5的值")						# 设置Y轴名称
# 3、绘制图形
x_label = [str(int(i)) for i in x]  # 设置x轴刻度标签
plt.bar(x,y,						# X,Y轴坐标值facecolor="g",				# 条形框的填充色edgecolor="b",				# 条形框的边框色align="center",				# 条形框与X轴刻度的对齐方式tick_label=x_label,			# 显示在X轴刻度上的文字alpha=0.6					# 透明度)
# 4、显示图形
plt.show()

matplotlib.pyplot.bar()函数可以实现条形图的绘制:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center',data=None, **kwargs)

bar()函数的常用参数:

参数描述
x,heightX轴和Y轴对应的数据
width条形框的宽度,默认值为0.8
align设置条形框与刻度线的对齐方式,默认为'center'。'center':条形图中央与刻度线对齐。'edge':条形图左边缘与刻度线对齐
facecolor填充颜色
edgecolor边框颜色
tick_label设置与X轴刻度对应的文字,默认使用数字标签

2、堆叠条形图

import numpy as np
import matplotlib.pyplot as plt
# 设置中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
plt.rcParams['axes.unicode_minus'] = False
# 1、读取数据
data = np.loadtxt('../数据集/aqi_new.csv',delimiter=',',dtype=float,skiprows=1)
x = np.arange(1,21) # 日期1-22
pm25_1 = data[:20,3]	# 1月份PM2.5
pm25_2 = data[32:52,3]	# 2月份PM2.5
# 2、添加内容
plt.title("2017年1月份和2月份前20天PM2.5比较")	# 设置标题
plt.xlabel("日期")							 # 设置X轴名称
plt.ylabel("PM2.5的值")						 # 设置Y轴名称
x_label = [str(int(i)) for i in x]  		  # 设置x轴刻度标签
plt.xticks(x,x_label,rotation=45)			  # 设置X轴的位置、刻度线和倾斜度
# 3、绘制图形
plt.bar(x,pm25_1,color='r',alpha=0.6)
plt.bar(x,pm25_2,color='g',alpha=0.6)
plt.legend(['1月份','2月份'])
# 4、展示图形
plt.show()

需要注意的是,plt.legend()一定要在绘制图形代码的后面,否则无法显示

3、并排条形图

import numpy as np
import matplotlib.pyplot as plt
# 设置中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
plt.rcParams['axes.unicode_minus'] = False
# 1、读取数据
data = np.loadtxt('../数据集/aqi_new.csv',delimiter=',',dtype=float,skiprows=1)
bw = 0.3 # 设置条形框的宽度
x=np.arange(1,21)  # 日期1-20
x2=x+bw # 设置PM10的条形图的位置
pm25 = data[:20,3]      # 1月份PM2.5
pm10 = data[:20,4]      # 1月份PM10
# 2、添加内容
plt.title("2017年1月份前20天PM2.5和PM10比较")    # 设置标题
plt.xlabel("日期")                             # 设置X轴名称
plt.ylabel("PM2.5或PM10的值")                  # 设置Y轴名称
x_label = [str(int(i)) for i in x]            # 设置x轴刻度标签
plt.xticks(x+bw/2,x_label,rotation=45)         # 设置x轴刻度和刻度标签
# 3、绘制图形
plt.bar(x,pm25,color='r',width=bw)
plt.bar(x2,pm10,color='g',width=bw)
plt.legend(['PM2.5','PM10'])
# 4、展示图形
plt.show()

三、散点图

scatter()函数实现散点图:

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vmax=None, alpha=None, linewidths=None, *,edgecolors=None, plotnonfinite=False, data=None, **kwargs)

scatter()函数的常用参数:

参数描述
x,yX轴和Y轴对应的数据
s指定点的大小
c设置颜色
market绘制的点的形状
alpha点的透明度,取值为0-1的小数

import matplotlib.pyplot as plt
import numpy as np
# 设置中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)
# 1、准备数据
aqi = data[:366,-1]
pm25 = data[:366,3]
pm10 = data[:366,4]
# 2。添加内容
plt.title("2017年PM2.5、PM10与AQI关系散点图")
plt.xlabel("各指标值")
plt.ylabel("AQI的值")
# 3、绘制图形
plt.scatter(pm25,aqi,c='r',marker='*')
plt.scatter(pm10,aqi,c='g',marker='o')
plt.legend(['PM2.5','PM10'])
# 4、显示图形
plt.show()

四、子图

子图是将画布切割为多个网格区域,每个区域独立展示图形的格式。子图可以同时展示多个图形,并能清晰、直观地比较图形之间的差异。

import matplotlib.pyplot as plt
import numpy as np
# 设置中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
plt.rcParams['axes.unicode_minus'] = False
# 1、准备数据
data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)
aqi = data[:200, -1]
pm25 = data[:200, 3]
pm10 = data[:200, 4]
SO2 = data[:200, 5]
NO2 = data[:200, 6]
CO = data[:200, 7]
O3 = data[:200, 8]
# 2、绘制子图
plt.figure(figsize=(12, 10))    # 创建图形,figsize用于设置图形宽和高,单位为英寸
# 子图1
plt.subplot(221)      # 子图位置在2*2网格中的第一格
plt.title("PM2.5、PM10与AQI关系散点图")
plt.scatter(pm25,aqi,c='r',marker='*')
plt.scatter(pm10,aqi,c='g',marker='o')
plt.legend(['PM2.5','PM10'])
# 子图2
plt.subplot(222)
plt.title("SO2、NO2与AQI关系散点图")
plt.scatter(SO2,aqi,c='r',marker='*')
plt.scatter(NO2,aqi,c='g',marker='o')
plt.legend(['SO2','NO2'])
# 子图3
plt.subplot(2,2,3)
plt.title("CO与AQI关系散点图")
plt.scatter(CO,aqi,c='r',marker='*')
# 子图4
plt.subplot(2,2,4)
plt.title("O3与AQI关系散点图")
plt.scatter(O3,aqi,c='r',marker='*')
plt.show()

五、饼图

使用matplotlib.pyplot.pie()函数实现饼图的绘制:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None,pctdistance=0.6, shadow=False, labeldistance=1.1,startangle=0, radius=1, counterclock=True, wedgeprops=None,textprops=None, center=(0, 0), frame=False,rotatelabels=False, *, normalize=True, hatch=None, data=None)

pie()函数的常用参数

参数描述
x绘制“饼”的数据,array型
explode脱离圆心的幅度,取值范围0-1,1表示完全脱离
labels指定每一项的名称,array型
colors指定每一项的颜色,string型或array型,默认为None
autopct数值的显示方式,string型,默认为None
shadow是否显示阴影效果,默认为False
startangle逆时针的旋转角度,float型,默认为0
radius指定饼图的半径,float型,默认值为1

 

import matplotlib.pyplot as plt
import numpy as np# 设置中文格式
plt.rcParams['font.sans-serif'] = ['SimHei'] 
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
data = np.loadtxt('../数据集/aqi_new.csv', delimiter=',', skiprows=1)
aqi = data[:366,-1]
l1 = len(aqi[aqi<=50])  # 优
l2 = len(aqi[np.logical_and(aqi>50,aqi<=100)])  # 良
l3 = len(aqi[np.logical_and(aqi>100,aqi<=150)])  # 轻度污染
l4 = len(aqi[np.logical_and(aqi>150,aqi<=200)])  # 中度污染
l5 = len(aqi[np.logical_and(aqi>200,aqi<=300)])  # 重度污染
l6 = len(aqi[aqi>300])  # 严重污染
# 绘制图形
plt.title('2017年空气质量占比图')
plt.pie(x=[l1,l2,l3,l4,l5,l6],explode=[0,0,0,0,0,0.1],labels=['优','良','轻度污染','中度污染','重度污染','严重污染'],colors=['b','g','r','c','m','y'],autopct="%1.1f%%",shadow=True
)
plt.show()

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

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

相关文章

Unity多线程简单示例

using UnityEngine; using System.Threading;public class texxxst : MonoBehaviour {Thread thread;void Start(){// 创建一个新的线程&#xff0c;并传入要执行的方法thread new Thread(new ThreadStart(DoWork));// 启动线程thread.Start();}void DoWork(){for (int i 0; …

高颜值高性能的开源免费自托管照片和视频备份方案:Immich

Immich&#xff1a;安全存储您的珍贵记忆&#xff0c;高颜值且高性能的自托管照片与视频备份解决方案&#xff0c;让您随时随地无忧回顾美好时光。- 精选真开源&#xff0c;释放新价值。 概览 在数字化时代&#xff0c;我们的照片和视频越来越多&#xff0c;如何安全、有效地备…

solidworks镜像实体怎么用

在SolidWorks中&#xff0c;镜像实体功能用于复制并反转实体或特征&#xff0c;使其沿着指定的基准面对称。以下是使用SolidWorks镜像实体的基本步骤&#xff1a; 1. 打开模型&#xff1a;首先打开SolidWorks软件&#xff0c;并加载您想要镜像的三维实体模型。 2. 找到镜像命…

揭秘操作系统:核心功能与Linux系统解析

1.引言 在先前探讨中&#xff0c;我们了解到计算机主机内部的硬件资源需要一种高效管控手段&#xff0c;由此催生了操作系统的诞生。操作系统&#xff08;Operating System&#xff0c;简称OS&#xff09;&#xff0c;是计算机生态系统中不可或缺的核心组件&#xff0c;以其复杂…

TypeScript常用知识点整理

介绍 TypeScript 是 JavaScript 的一个超集&#xff0c;添加了静态类型支持和更多现代编程特性&#xff0c;提高了代码的可靠性和可维护性。最终会被编译成标准的 JavaScript 代码运行。 使用npm install -g typescript进行全局安装 将编写好的ts代码进行运行&#xff0c;第…

加密软件如何给文件加密

加密软件如何给文件加密 市面上有很多给文件加密的软件&#xff0c;它是如何给文件加密的呢&#xff1f;加密过程是否安全&#xff0c;效果是否理想呢&#xff1f;下面以安企神软件为例给大家介绍 给文件加密的关键步骤和技术。 1、选择加密算法 安企神软件可能会采用国际公…

如何彻底删除node和npm

如何彻底删除node和npm 前言&#xff1a; 最近做个项目把本地的node更新了&#xff0c;之前是v10.14.2更新至v16.14.0 &#xff0c;想着把之前的项目起来下&#xff0c;执行npm install 结果启动不了&#xff0c;一直报npm版本不匹配需要更新本地库异常… 找了几天发现是npm 和…

AI大模型探索之路-基础篇3:构建Chat Completions驱动的多轮对话机器人

文章目录 前言一、初步测试二、读取本地知识库三、问答测试四、实现多轮对话总结 前言 在上一篇《AI大模型应用开发篇之Chat Completions API》中熟悉了 Chat Completions API相关特点和各种场景的使用样例&#xff1b; 本章主要记录如何基于Chat Completions API实现简单的多…

【数据结构与算法】:快速排序和归并排序的非递归实现

1. 递归实现的缺陷 在以前的文章中我们把快速排序和归并排序的递归实现方式进行了介绍&#xff0c;但是在校招面试和在企业的日常开发过程中&#xff0c;仅掌握递归方法是不够的&#xff0c;因为递归也有它的缺陷。 我们知道在函数调用过程中会在内存中建立栈帧&#xff0c;栈…

solidity(3)

地址类型 pragma solidity ^0.8.0;contract AddressExample {// 地址address public _address 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;address payable public _address1 payable(_address); // payable address&#xff0c;可以转账、查余额// 地址类型的成员uint256…

C/C++与Python:各自的优势与前景展望

在讨论C/C和Python这两种编程语言的前景时&#xff0c;我们必须认识到每种语言都有其独特的定位和应用场景&#xff0c;并不存在绝对意义上的“谁更有前景”。它们分别在不同的领域发挥着重要作用&#xff0c;而且在未来的技术发展过程中&#xff0c;二者都将继续保持其不可替代…

Linux进程间通信【二】

system V进程间通信 管道通信本质是基于文件的&#xff0c;也就是说操作系统并没有为此做过多的设计工作&#xff0c;而system V IPC是操作系统特地设计的一种通信方式。但是不管怎么样&#xff0c;它们的本质都是一样的&#xff0c;都是在想尽办法让不同的进程看到同一份由操…

【深度学习】海洋生物数据集,图片分类

文章目录 任务描述数据收集数据处理模型训练指标评测web app代码和帮助 任务描述 收集9种以上的海洋生物图片&#xff0c;然后基于深度学习做一个分类模型&#xff0c;训练完成后&#xff0c;分类模型就可以对未知图片进行分类。 在之后随便传一张图片&#xff0c;分类模型就…

【静态分析】静态分析笔记01 - Introduction

参考&#xff1a; BV1zE411s77Z [南京大学]-[软件分析]课程学习笔记(一)-introduction_南京大学软件分析笔记-CSDN博客 ------------------------------------------------------------------------------------------------------ 1. program language and static analysis…

ORB-SLAM3整体流程详解

0. 简介 在之前&#xff0c;作者曾经转过一篇《一文详解ORB-SLAM3》的文章。那篇文章中提到了ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统&#xff0c;可以在单目&#xff0c;双目和RGB-D相机上利用针孔或者鱼眼模型运行。与ORB-SLAM2相比&#xff0c;ORB-SLAM3…

接口自动化框架设计必备利器之参数传递

在我们设计自动化测试框架的时候&#xff0c;我们会经常将测试数据保存在外部的文件&#xff08;如Excel、YAML&#xff09;中&#xff0c;实现测试脚本与测试数据解耦&#xff0c;方便后期维护。 当涉及到业务场景接口用例时&#xff0c;由于接口与接口存在关联关系&#xff…

STL容器之unordered_map类

文章目录 STL容器之unordered_map类1、unordered_map1.1、unordered_map介绍1.2、unordered_map的使用1.2.1、unordered_map的常见构造1.2.2、unordered_map的迭代器1.2.3、unordered_map的容量1.2.4、unordered_map的增删查1.2.5、unordered_map的桶操作 2、unordered_multima…

【快速上手ESP32(基于ESP-IDFVSCode)】04-PWM

PWM PWM&#xff0c;即脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09;&#xff0c;是一种模拟控制方式&#xff0c;根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置&#xff0c;来实现晶体管或MOS管导通时间的改变&#xff0c;从而达到控制开关稳压电源输出…

物联网系统设计 8

1 规划中小型LoRa 中小型分时复用&#xff0c;大型项目需要学习LoRaWAN 1.1 通信记录 1.2 节点能耗 1278芯片 满功率20DMB&#xff0c;增加PA&#xff0c;发送功率 30 DBM 内置天线柔性 棒状 3db 203 休眠、发生、接收 计算链路预算&#xff0c;工作电流&#xff0c;工…

Blocs v5.2.3 mac版 可视化网页设计工具 兼容 M1/M2/M3

Mac毒搜集到的Blocs 是一款mac上专业强大的精美网页设计软件。特点就是简介、高效、高质&#xff0c;可以帮助我们快速设计出精美的网页&#xff0c;retina视网膜特性支持&#xff0c;优化自适应网页的开发。 应用介绍 Blocs 是一款mac上专业强大的精美网页设计软件。专注于简…