【数据可视化包Matplotlib】Matplotlib基本绘图方法

目录

    • 一、Matplotlib绘图的基本流程
      • (一)最简单的绘图(仅指定y的值)
      • (二)更一般的绘图(同时指定x和y的值)
      • (三)增加更多的绘图元素
    • 二、布局相关的对象——Figure、Subplot
    • 三、常用图形绘制
      • (一)折线图
      • (二)柱状图
      • (三)直方图
      • (四)饼图
      • (五)散点图
      • (六)箱线图


一、Matplotlib绘图的基本流程

根据 Matplotlib 图像的4层图像结构,pyplot 模块绘制图形基本都遵循一个流程,使用这个流程可以完成大部分图形的绘制。pyplot 模块基本绘图流程主要分为3个部分,如下图所示。

在这里插入图片描述

  • 创建画布:plt.figure()
  • 创建和选定子图:plt.subplots()
  • 添加标题:plt.title()
  • 添加x/y轴名称:plt.xlabel()、plt.ylabel()
  • 设置x/y轴范围:plt.xlim()、plt.ylim()
  • 设置x/y轴范围:plt.xticks()、plt.yticks()
  • 绘制图形:折线图—plot()、柱状图—bar()、饼图—pie()、散点图—scatter()、箱型图—boxplot()
  • 添加图例:plt.legend()
  • 保存图形:plt.savefig()
  • 显示图形:plt.show()——一般放在最后

在 Jupyter Notebook 中运行时需要加上下面这条魔法命令。

%matplotlib inline  
import numpy as np
import matplotlib.pyplot as plt

(一)最简单的绘图(仅指定y的值)

marker参数观察可知,绘图时使用列表的索引(0、1、2)作为x值,用列表值作为对应的y值(需要取消下一句的注释!)。

plt.plot([1,2,3])
# plt.plot([1,2,3],marker="o")

在这里插入图片描述

(二)更一般的绘图(同时指定x和y的值)

x = np.linspace(-2, 2, 20)    # 产生20个坐标点的横坐标
y = x**2                      # 产生20个坐标点的纵坐标
# 最简单的绘图
plt.rcParams['axes.unicode_minus']= False    # 解决不显示负号的问题
plt.plot(x, y)    # 默认不突出显示坐标点,坐标点之间用蓝色实线连接
plt.show()        # 调用show()函数才真正显示图形

在这里插入图片描述

x = np.linspace(-2, 2, 20)     # 产生20个坐标点的横坐标
y = x**2                       # 产生20个坐标点的纵坐标
px = 0.8                       # 靓点(Beautiful point)之横坐标
py = px**2                     # 靓点之横坐标plt.title("Square function")   # 图表标题
plt.xlabel("x")                # x轴标签
plt.ylabel("y = x**2")         # y轴标签
plt.grid(True)                 # 显示网格线plt.plot(x, y, "b*-.", px, py, "ro")    # 同时指定连接线和坐标点的样式、颜色# 添加文本说明,前两个参数表示第一个字符的横纵坐标,第3个参数是文本字符串。
# 字符串中的 $y=x^2$ 是Latex的等式表示形式
plt.text(0, 2, "Square function\n$y = x^2$", fontsize=20, color='blue', horizontalalignment="center")
plt.text(px - 0.08, py, "Beautiful point", ha="right", weight="heavy")    # ha即horizontalalignment
plt.text(px, py, "x = %0.2f\ny = %0.2f"%(px, py), rotation=50, color='gray')plt.savefig("my_plot1.png")    # 在当前目录下保存所绘制的图形
plt.show()

在这里插入图片描述

(三)增加更多的绘图元素

x = np.linspace(0,2*np.pi,13)    # 数据点以pi/6(30度)作为分隔间距
y1 = np.sin(x)
y2 = np.cos(x)plt.plot(x,y1,marker='^',color='r',label="sin(x)")    # 默认线型是实线
plt.plot(x,y2,marker='o',color='g',linestyle='-.',label="cos(x)")   # label参数和plt.legend()配合实现图例显示
plt.xlim(0,2*np.pi)    # 设定x轴的取值范围
plt.ylim(-1,1)
plt.xlabel("x")    # 设定x轴的标签
plt.ylabel("y")
plt.title("y=sin(x)/cos(x)")
# 设定x轴的刻度,下一条语句可以注释对比一下效果,
# 其中x[::3]的3表示经过3个数据点加一个标签,可以改成1看的更明显
plt.xticks(x[::3],["0",r"$\pi/2$",r"$\pi$",r"$3\pi/2$",r"$2\pi$"],color='b')   # "$\pi/2$"属于Latex表示法
plt.grid(axis='x',ls='--')
plt.legend()
plt.show()

在这里插入图片描述

二、布局相关的对象——Figure、Subplot

# 创建自己的Figure对象,相当于自定义画布
#(通过注释下条语句,观察使用自己的Figure对象的效果)
fig = plt.figure(figsize=(12,8))    # 指定画板的宽和高分别为12英寸和8英寸
# 上面语句可省略,如果省略就是使用系统内部默认的figure()对象# 运行配置(run configuration)参数设置
plt.rcParams['font.sans-serif']=['SimHei']    # 在matplotlib中显示汉字
plt.rcParams['axes.unicode_minus']=False      # 用来正常显示负号,否则负号会显示为小方框# 绘制子图
x = np.linspace(-2, 2, 30)
plt.subplot(2, 2, 1)    # 2 rows, 2 columns, 1st subplot = top left
plt.plot(x, x)
plt.subplot(2, 2, 2)    # 2 rows, 2 columns, 2nd subplot = top right
plt.plot(x, x**2)
plt.subplot(2, 1, 2)    # 2 rows, *1* column, 2nd subplot = bottom
plt.plot(x, x**3)
plt.text(0,-5,"看成按照2行1列重新划分的第2个子图",ha="center",color="red") # ha:horizontal align(水平对齐)
plt.show()

在这里插入图片描述

三、常用图形绘制

(一)折线图

一般绘制较多的的都是折线图,反映一个特征随另一个特征的趋势变化。

rad = np.arange(0,np.pi*2,0.01)
plt.title("y=sin(x)",fontsize=12)
plt.xlabel("rad",fontsize=12)
plt.ylabel("value",fontsize=12)
plt.xlim((0,np.pi*2))
plt.ylim((-1,1))
plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2])
plt.yticks([-1,-0.5,0,0.5,1])
plt.grid(True)
plt.plot(rad,np.sin(rad))
plt.show()

在这里插入图片描述

# 带子图的折线图
x = np.array([1,2,3])
plt.subplot(221)
plt.plot(x,x,marker="o")
plt.text(1.5,2.6,"y=x",fontsize=12)
plt.subplot(222)
plt.plot(x,-x,"-*r")
plt.text(2.5,-1.3,"y=-x",fontsize=12)
plt.subplot(223)
plt.plot(x,x**2,"-.+g")
plt.text(1.5,6.0,"y=x**2",fontsize=12)
plt.subplot(224)
plt.plot(x,np.sin(x),"--^y")
plt.text(1.5,0.6,"y=sin(x)",fontsize=12)
plt.show()

在这里插入图片描述

(二)柱状图

绘制柱状图,比较值大小。

position = np.arange(5)    # 确定每个柱的垂直中线位置,相当于x轴坐标
data1 = [2,10,4,8,6]       # 确定每个柱的高度,相当于y轴坐标
data2 = np.random.randint(1,9,5)#[5,3,6,7,6]
plt.bar(position,data1)
plt.bar(position,-data2)for x, y in zip(position, data1):    # 显示数据标签plt.text(x, y, '{}'.format(y), ha='center', va='bottom',fontsize=11,color='r')# va='bottom'表示文本的底部在(x,y)处,还可以取top和center值
for x, y in zip(position, data2):    # 显示数据标签plt.text(x, -y, '{}'.format(y), ha='center', va='top',fontsize=11,color='r')
plt.show()

在这里插入图片描述

(三)直方图

绘制直方图,反映数据分布。

x = [22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]	# x轴数据
plt.hist(x, bins = [0,25,50,75,100])				# 绘制直方图,bins为区间
plt.show()										    # 显示图表

在这里插入图片描述

进一步拓展。

df = pd.read_excel('grade1.xls')		# 读取Excel文件
plt.rcParams['font.sans-serif']=['SimHei']			# 解决中文乱码
x = df['得分']										# x轴数据
plt.xlabel('分数')									# x轴标题
plt.ylabel('学生数量')								# y轴标题
plt.title("高一数学成绩分布直方图")					# 设置图表标题
# 绘制直方图,bins为区间,facecolor为前景色,edgecolor为边框颜色,alpha为透明度
plt.hist(x, bins = [0,25,50,75,100,125,150],facecolor="blue", edgecolor="black", alpha=0.7)
plt.show()										# 显示图表

在这里插入图片描述

(四)饼图

绘制饼图,展示整体的构成情况。

x = [2,4,6,8]labels = ['a','b','c','d']    # 各部分的标签
colors = ['r','y','b','g']    # 各部分的颜色explode = (0,0.1,0,0)    # explode用于突出显示特定的部分
# explode=(0.1,0.3,0.1,0.1) plt.pie(x,explode=explode,labels=labels,colors=colors,autopct='%.1f%%')  # pct表示percent,%%用于输出一个百分号
plt.axis("equal")    ##使饼图两个轴的单位长度相等,从而使得饼图接近圆形
plt.show()

在这里插入图片描述

(五)散点图

绘制散点图,展示数据聚集模式、观察两个一维数据序列间的关系。

# 基本的常用于线性回归分析中
np.random.seed(0)   # 作用相当于random.seed(),但它返回一个伪随机数生成器对象,可用该对象生成随机数
x = np.linspace(0,1,100)
y = x+np.random.randn(100)
plt.scatter(x,y)
plt.plot(x,x)
plt.show()

在这里插入图片描述

rd = np.random.RandomState(0)   # 作用相当于random.seed(),但它返回一个伪随机数生成器对象,可用该对象生成随机数
x = rd.randn(100)
y = rd.randn(100)colors = rd.rand(100)
sizes = 1000*rd.rand(100)
# 画散点图最重要的5个参数:x-横坐标,y-纵坐标,c-颜色(要求是0~1范围内的浮点值),s-点大小(像素),alpha-透明度
# 当颜色和尺寸使用数组时,常用来表示不同的类别;cmap用来指定颜色的风格,viridis表示翠绿色
plt.scatter(x,y,c=colors,s=sizes,alpha=0.3,cmap='viridis')
plt.colorbar()    # 显示颜色条
plt.show()

在这里插入图片描述

(六)箱线图

使用箱线图,常用于检测与处理异常值。

import pandas as pd
import matplotlib.pyplot as plt

数据集meal_order_detail.xlsx下载地址:下载meal_order_detail.xlsx

data = pd.read_excel('meal_order_detail.xlsx')
data.head()

在这里插入图片描述

完整数据框如下:

detail_idorder_iddishes_idlogicprn_nameparent_class_namedishes_nameitemis_addcountsamountscostplace_order_timediscount_amtdiscount_reasonkick_backadd_inpriceadd_infobar_codepicture_fileemp_id
02956417610062NaNNaN蒜蓉生蚝0149NaN2016-08-01 11:05:00NaNNaNNaN0NaNNaNcaipu/104001.jpg1442
12958417609957NaNNaN蒙古烤羊腿0148NaN2016-08-01 11:07:00NaNNaNNaN0NaNNaNcaipu/202003.jpg1442
22961417609950NaNNaN大蒜苋菜0130NaN2016-08-01 11:07:00NaNNaNNaN0NaNNaNcaipu/303001.jpg1442
32966417610038NaNNaN芝麻烤紫菜0125NaN2016-08-01 11:11:00NaNNaNNaN0NaNNaNcaipu/105002.jpg1442
42968417610003NaNNaN蒜香包0113NaN2016-08-01 11:11:00NaNNaNNaN0NaNNaNcaipu/503002.jpg1442
plt.boxplot(data['amounts'])
# plt.boxplot(data['amounts'],vert=False)     # vert=False设置水平显示箱形图
plt.show()

在这里插入图片描述

检测与处理异常值

箱型图提供了识别异常值的一个标准,即异常值通常被定义为小于 QL-1.5IQR 或大于 QU+1.5IQR 的值。

  • QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小。
  • QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大。
  • IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。

箱线图依据实际数据绘制,真实、直观地表现出了数据分布的本来面貌,且没有对数据做任何限制性要求,其判断异常值的标准以四分位数和四分位数间距为基础。

四分位数给出了数据分布的中心、散布和形状的某种指示,具有一定的鲁棒性,即25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值通常不能对这个标准施加影响。鉴于此,箱线图识别异常值的结果比较客观,因此在识别异常值方面具有一定的优越性。

3 σ 3\sigma 3σ 原则又称为拉依达法则。该法则就是先假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值。

这种判别处理方法仅适用于对正态或近似正态分布的样本数据进行处理,如下表所示,其中 σ \sigma σ 代表标准差, μ \mu μ 代表均值, x = μ x=\mu x=μ 为图形的对称轴。数据的数值分布几乎全部集中在区间 ( μ − 3 , μ + 3 ) (\mu-3,\mu+3) (μ3,μ+3) 内,超出这个范围的数据仅占不到 0.3 % 0.3\% 0.3%。故根据小概率原理,可以认为超出 3 σ 3\sigma 3σ 的部分数据为异常数据。

在这里插入图片描述

# 自定义函数用于将数据中的异常值替换为缺失值
def replace(x):import numpy as npQU = x.quantile(0.75)QL = x.quantile(0.25)IQR = QU -QLx[(x > (QU + 1.5*IQR)) | (x < (QL - 1.5*IQR))] = np.nanreturn x
data['amounts'].isnull().sum()
0
replace(data['amounts']).isnull().sum()
C:\Users\Administrator\Anaconda3\lib\site-packages\ipykernel_launcher.py:7: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrameSee the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copyimport sys173

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

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

相关文章

SAP 技巧篇:Script脚本模拟人工操作批量录入数据

“ 现在大环境都讲人工智能、自动化办公等场景的应用&#xff0c;这里我们介绍一下SAP本身自带的自动化工具” 文章最后附最终脚本 01 — 背景需求 SAP&#xff1a;批量录入工具&#xff1a;LSMW/BDC/Script 三大工具 LSMW&#xff1a;应用场景多&#xff0c;实现方法多&am…

测出Bug就完了?从4个方面教你Bug根因分析

01 现状及场景 &#x1f3af; 1.缺失bug根因分析环节 工作10年&#xff0c;虽然不是一线城市&#xff0c;也经历过几家公司&#xff0c;规模大的、规模小的都有&#xff0c;针对于测试行业很少有Bug根因环节&#xff0c;主流程基本上都是测试提交bug-开发修改-测试验证-发送报…

Docker部署MongoDB数据库

文章目录 官网地址docker 网络部署 MongoDB部署 mongo-expressdocker-compose.ymlMongoDB shell 官网地址 https://www.mongodb.com/zh-cn docker 网络 # 创建 mongo_network 网络 docker network create mongo_network # 查看网络 docker network list # 容器连接到 mongo_…

CANoe中LIN工程主节点的配置(如何切换调度表)

1&#xff1a;前置条件 1&#xff09;工程已经建立&#xff0c;simulation窗口已经配置好&#xff08;包括且不限于通道mappin好&#xff0c;数据库文件已经添加&#xff09; 2&#xff09;我已系统自带sampleCfg工程&#xff0c;作为例子。如下图 2 &#xff1a;主节点的配置…

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程

原文链接&#xff1a;ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601506&idx2&sn5dae3fdc3e188e81b8a6142c5ab8c994&chksmfa820c85cdf58593356482880998fc6eb98e6889b261bf62…

element日期时间选择器,禁止选择当前时间以后的时间

效果如下&#xff1a; 源码附上&#xff1a; pickerOptions 对象包含一个disabledDate函数&#xff0c;该函数会对超出当前日期一年后的日期进行禁用。Date.now() - 8.64e7计算当前日期减去一年的毫秒数&#xff0c;从而禁用当年之后的所有年份。 <xx-date-picker v-model…

课堂行为动作识别数据集

一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片&#xff0c;没有网络爬虫滥竽充数的图片&#xff0c;可直接用来训练。以上图片均一一手工标注&#xff0c;标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…

vue3中单框双时间选择模式

在单框双时间选择下&#xff0c;给当前时间框赋值&#xff0c;可以使用vue中的v-model双向绑定方式 如前端元素代码&#xff1a; <el-form-item label"创建时间" style"width: 308px;"><el-date-pickerv-model"dateRange"value-forma…

公钥基础设施 (PKI) 助力物联网安全

物联网&#xff08;InternetofThings&#xff0c;缩写IoT&#xff09;在制造业、农业、家居、交通和车联网、医疗健康等多个领域广泛应用&#xff0c;让我们进入万物互联时代&#xff0c;实现智能生产、智慧生活。然而&#xff0c;随着物联网的发展&#xff0c;网络威胁日益增加…

高风险IP的来源及其影响

随着互联网的发展&#xff0c;网络安全问题越来越引人关注。其中&#xff0c;高风险IP的来源成为了研究和讨论的焦点之一。高风险IP指的是那些经常涉及到网络攻击、恶意软件传播以及其他不良行为的IP地址。它们的存在不仅对个人和组织的网络安全构成威胁&#xff0c;还可能给整…

MYSQL5.7详细安装步骤

MYSQL5.7详细安装步骤&#xff1a; 0、更换yum源 1、打开 mirrors.aliyun.com&#xff0c;选择centos的系统&#xff0c;点击帮助 2、执行命令&#xff1a;yum install wget -y 3、改变某些文件的名称 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base…

第四百六十二回

文章目录 1. 概念介绍2. 实现方法3. 示例代码4. 内容总结 我们在上一章回中介绍了"关于MediaQuery的优化"相关的内容&#xff0c;本章回中将介绍readMore这个三方包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的readMore是一个…

一文读懂Javascript中var、let和const的区别,包括提升hoisting(文章非常简短易懂,适合小白)

一张表格整理var、let和const的区别 关键词 范围 提升 可以重新分配 可以重新声明 var 函数作用域 是 是 是 let 块作用域 否 是 否 const 块作用域 否 否 否 相信在上面的表格中&#xff0c;大家有疑问的应该是提升&#xff0c;那么下面就给大家来讲讲js…

Excel VBA技术:编织数据之梦的魔法语言

想要让你的Excel技能瞬间升级&#xff0c;成为数据处理与展示的顶尖高手吗&#xff1f;Excel VBA技术正是你不可错过的魔法武器&#xff01;它能让你轻松驾驭复杂的数据任务&#xff0c;自动化处理繁琐操作&#xff0c;释放你的双手和大脑。通过VBA&#xff0c;你可以创建精美的…

媒体邀约采访的分类?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约采访可以根据不同的标准进行分类。以下是一些常见的分类方式&#xff1a; 1. 按照邀约形式&#xff1a; - 电话邀约&#xff1a;通过电话与媒体联系&#xff0c;说明采访或报道…

吴恩达2022机器学习专项课程(一) 第二周课程实验:实践线性回归

目标 假设您是一家餐厅连锁店的首席执行官&#xff0c;并正在考虑在不同的城市开设新店。您希望将您的业务扩展到可能为您的餐厅带来更高利润的城市。该连锁店已经在各个城市设有餐厅&#xff0c;您已经获得了这些城市的利润和人口数据。您还拥有关于新餐厅候选城市的数据。对…

机器学习算法快速入门

文章目录 0.简介1.常用术语1) 模型2) 数据集3) 样本&特征4) 向量5) 矩阵6)假设函数&损失函数7&#xff09;拟合&过拟合&欠拟合 2.线性回归3.梯度下降求极值4.Logistic回归算法&#xff08;分类问题&#xff09;5.KNN最邻近分类算法6.朴素贝叶斯分类算法7.决策树…

前端开发攻略---在页面上渲染大量元素,使用defer减少白屏等待时间,优化页面响应速度

1、优化前 2、优化后 3、优化思路 1、在元素数量不变的情况下&#xff0c;进行一步一步的渲染&#xff0c;先渲染一些重要的元素或者需要用户第一时间看到的元素。 2、使用Hooks封装优化函数 4、优化代码 拥有大量元素的组件&#xff08;Item&#xff09;&#xff1a;文件位置&…

随着深度学习的兴起,浅层机器学习没有用武之地了吗?

深度学习的兴起确实在许多领域取得了显著的成功&#xff0c;尤其是那些涉及大量数据和复杂模式的识别任务&#xff0c;如图像识别、语音识别和自然语言处理等。然而&#xff0c;这并不意味着浅层机器学习&#xff08;如支持向量机、决策树、朴素贝叶斯等&#xff09;已经失去了…

thinkphp5关联预载入with指定字段属性查询

一、thinkphp5.0 如果要指定属性查询&#xff0c;可以使用&#xff1a; $list User::field(id,name)->with([profile>function($query){$query->field(email,phone);}])->select([1,2,3]); foreach($list as $user){// 获取用户关联的profile模型数据dump($user…