Matplotlib实现数据可视化

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

Matplotlib绘图流程

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

一、折线图

1、实现AQI走势折线图

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

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

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

相关文章

HarmonyOS实战开发-短时任务

介绍 本示例主要展示后台任务中的短时任务。 通过ohos.resourceschedule.backgroundTaskManager &#xff0c;ohos.app.ability.quickFixManager 等接口实现应用热更新的方式去展现短时任务机制。 效果预览 使用说明 1.安装本应用之前&#xff0c;先编译好未签名的应用包&a…

【MPI并行程序】完美解决Attempting to use an MPI routine before initializing MPI

文章目录 错误原因解决方案 最近在写并行程序&#xff0c;犯了一个小错误&#xff0c;记录一下&#xff0c;以防止以后再犯。 Attempting to use an MPI routine before initializing MPI&#xff08;在初始化 MPI 之前尝试使用 MPI 例程&#xff09; 错误原因 这个错误通常是因…

MySQL学习笔记2——基础操作

基础操作 一、增删改查1、添加数据2、删除数据3、修改数据4、查询语句 二、主键三、外键和连接1、外键2、连接 一、增删改查 1、添加数据 INSERT INTO 表名[(字段名[,字段名]…)] VALUES (值的列表); --[]表示里面的内容可选添加数据分为插入数据记录和插入查询结果 插入数据…

【Vuforia+Unity】AR判断当前平台获取点击/触摸坐标点选中识别的二维码跳转网页

实现了&#xff1a;【VuforiaUnity】判断当前平台获取点击/触摸坐标点选中识别的二维码跳转网页 using UnityEngine; using Vuforia; public class BarcodeScanner : MonoBehaviour { public TMPro.TextMeshProUGUI barcodeAsText; string platformNum""; privat…

Java研学-RBAC权限控制(一)

一 权限控制 1 介绍 RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;是一种流行的权限控制策略&#xff0c;用于实现复杂系统的安全访问管理。它通过将权限与角色相关联&#xff0c;而不是直接与用户相关联&#xff0c;从而简化了权限管…

《QT实用小工具·二十三》 Ntp校时类

1、概述 源码放在文章末尾 该项目实现了 Ntp校时类 &#xff0c;包含如下功能&#xff1a; 可设置Ntp服务器IP地址。 推荐用默认的阿里云时间服务器 ntp1.aliyun.com 收到时间信号发出。 时间精确到秒。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #if…

组态王与美国罗克韦尔AB PLC之间无线通讯方案详解

组态王与多台美国罗克韦尔AB PLC间的无线通信测试需要用到以下设备&#xff1a; 三菱PLC型号&#xff1a;FX5u 2台 上位机&#xff1a;组态王6.55 1台 达泰欧美系PLC无线通讯终端——DTD418MB 3块 主从关系&#xff1a;1主2从 通讯接口&#xff1a;RJ45接口 供电&…

传统前端 JS 开发者有福了

大家好&#xff0c;春天的百花绽放之际&#xff0c;各个行业也迎来了各自的新生与挑战。有的继续沉下心来夯实基础&#xff0c;有的大力发展出海业务&#xff0c;又或者通过顶级促销套路天女散花般地贩卖高仿保时捷……这厢 Mendix 各位技术小伙伴继续紧跟时代脉搏&#xff0c;…

【linux】拓展知识-linux图形界面(GUI 程序)、X11介绍

linux图形界面 Linux 本身是没有图形化界面的&#xff0c;linux只是一个基于命令行的操作系统&#xff0c;所谓的图形化界面系统只不过中 Linux 下的应用程序。没有图形界面linux还是linux&#xff0c;很多装linux的WEB服务器就根本不装X服务器。 这一点和 Windows 不一样。W…

制作一个RISC-V的操作系统十-Trap和Exception(流 mtvec mepc mcause mtval mstatus trap完整流程)

文章目录 流mtvecmepcmcausemtvalmstatustrap 初始化trap的top half&#xff08;硬件完成&#xff09;trap的bottom half&#xff08;软件完成&#xff09;从trap返回代码实现 流 控制流&#xff1a;程序控制的执行流 trap分为中断和异常 mtvec base&#xff1a;存储trap入…

python|sort_values()排序

sort_value()可以用来对值&#xff08;比如说年龄&#xff09;进行排序 根据 ‘Age’ 列进行升序排序&#xff0c;如果 ‘Age’ 相同则根据 ‘Name’ 列进行降序排序 df_sorted_multi df.sort_values(by[Age, Name], ascending[True, False]) print(df_sorted_multi)

如何在WHM面板上更改主机名

本周有一个客户&#xff0c;购买Hostease的独立服务器并选择了WHM控制面板&#xff0c;询问我们的在线客服&#xff0c;如何在WHM面板上更改主机名。我们为用户提供教程&#xff0c;用户很快完成了设置。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有帮助。…

SpringBoot内容协商快速入门Demo

1.什么内容协商 简单说就是服务提供方根据客户端所支持的格式来返回对应的报文&#xff0c;在 Spring 中&#xff0c;REST API 基本上都是以 json 格式进行返回&#xff0c;而如果需要一个接口即支持 json&#xff0c;又支持其他格式&#xff0c;开发和维护多套代码显然是不合理…

超图SuperMap-Cesium,地形图层,可以渲染一个或多个地形(地形可缓存DEM,TIN方式),webGL代码开发(2024-04-08)

1、缓存文件类型TIN格式&#xff0c;TIN的地形sct只能加一个 const viewer new Cesium.Viewer(cesiumContainer); viewer.terrainProvider new Cesium.CesiumTerrainProvider({isSct: true, // 是否为iServer发布的TIN地形服务,stk地形设置为falserequestWaterMask : true,…

代理IP在爬虫中的连接复用与开销减少

目录 一、引言 二、代理IP的基本概念 三、代理IP在爬虫中的使用 四、代理IP的连接复用 五、减少开销的策略 六、代码示例与注释 七、总结 一、引言 在爬虫开发中&#xff0c;代理IP的使用是常见的做法&#xff0c;尤其在目标网站设置了反爬虫机制时。代理IP能够帮助爬虫…

小狐狸转账失败,提示gas费过高

做web3开发的时候&#xff0c;明明自己小狐狸里还有2.15的代币&#xff0c;但页面我要转出2.1的时候&#xff0c;明明是够的&#xff0c;而且使用小狐狸提示gas费用是21000&#xff0c;这已经是最小的了&#xff0c;但网页转出到其他账户总是提示失败。而且这个错误非常不好捕获…

二手车的一些经验

买辆二手车是怎样一种体验&#xff1f; - 知乎 买辆二手车是怎样一种体验&#xff1f; - 知乎 作者&#xff1a;jingangdaddy 链接&#xff1a;https://www.zhihu.com/question/28827207/answer/2881156930 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授…

c++调python接口

1. 新建run.py文件&#xff0c;并定义相关接口&#xff1a; import numpy as np from scipy.fftpack import fftdef str_add(str1,str2):return int(str1) int(str2)def my_sort(data):data.sort()return datadef aw_fft(data, Fs):N len(data)result np.abs(fft(xdata, n…

HarmonyOS 开发-自定义视图实现Tab效果

介绍 本示例介绍使用Text、List等组件&#xff0c;添加点击事件onclick,动画&#xff0c;animationTo实现自定义Tab效果。 效果预览图 使用说明 点击页签进行切换&#xff0c;选中态页签字体放大加粗&#xff0c;颜色由灰变黑&#xff0c;起到强调作用&#xff0c;同时&…

【C++入门】内联函数、auto与基于范围的for循环

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…