【数据可视化包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.mzph.cn/news/820494.shtml

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

相关文章

Python 物联网入门指南(四)

原文&#xff1a;zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;构建光学字符识别的神经网络模块 本章介绍以下主题&#xff1a; 使用光学字符识别&#xff08;OCR&#xff09;系统 使…

多种方式打开SOLIDWORKS文件

在 SOLIDWORKS 中有多种打开文件的方法。一些最常用的方法包括双击文件资源管理器中的文件或拖放到 SOLIDWORKS 窗口中。当然&#xff0c;还有一种传统的方法&#xff0c;就是在SOLIDWORKS软件上方单击打开。 使用SOLIDWORKS“打开“命令 SOLIDWORKS 中的“打开“命令与任何其…

基于springboot实现在线考试系统设计【项目源码+论文说明】

基于springboot实现在线考试管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于JavaWeb技术的在线考试系统设计与实现的开发全过程。通过分析基于Java Web技术的在线考试系统设计与实现管理的不…

Python不可变序列类型--字符串

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 零基础学Python 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python视频教程以及Python相关电子书合集 私信未回可以加V:hacker0327 备注零基础学Python 订阅专…

ObjectMapper的具体介绍与使用

文章目录 声明一、前言二、ObjectMapper与JSONObject比较1、核心主要有三个部分&#xff1a;依赖包不同 2、ObjectMapper使用概述2.1、工程的pom.xml导包信息2.2、创建案例中的测试对象2.3、对象和JSON相互转化2.3.1、测试代码2.3.2、测试结果展示 2.4、集合和JSON像话转化2.4.…

Matlab|电价型负荷需求响应(考虑电价变化)

程序复现来源于《计及需求响应消纳风电的电-热综合能源系统经济调度 》第四章内容。 一、原理 需求响应的基本原理是需求侧根据电力市场价格和电网要求改变其负荷需求以 获取一定的利益回报。其中 PDR 可通过直观的电价变化信号引导用户调节用电方式&#xff0c; 从而达到优…

Qt for Android 开发环境

在搭建环境时开始感觉还挺顺利的&#xff0c;从 Qt 配置的环境里面看并没有什么问题&#xff0c;可真正编译程序的时候发现全是错误。 最开始的时候安装了 JDK21 最新版本&#xff0c;然后根据 JDK21 安装 ndk, build-tools, Platform-Tools 和 Gradle&#xff0c;但是不管这么…

零基础自学Python,啃透这五本书就够了!

选择合适的学习资源 在自学Python的前期&#xff0c;选择一本适合初学者的Python入门书籍或在线教程&#xff0c;从基础开始学习&#xff0c;好的入门书籍或在线教程会按照逻辑顺序组织知识&#xff0c;从基础概念开始&#xff0c;逐步引导你深入学习Python编程语言。这种系统…

如何在深度学习中调用CAME

1、介绍 CAME&#xff1a;一种以置信度为导向的策略&#xff0c;以减少现有内存高效优化器的不稳定性。基于此策略&#xff0c;我们提出CAME同时实现两个目标:传统自适应方法的快速收敛和内存高效方法的低内存使用。大量的实验证明了CAME在各种NLP任务(如BERT和GPT-2训练)中的…

必应bing竞价广告推广开户联系方式?

随着互联网广告市场的日益繁荣与细分&#xff0c;必应Bing作为全球重要的搜索引擎之一&#xff0c;在国内市场也逐渐展现出强大的潜力与吸引力。越来越多的企业开始关注并探索必应Bing搜索广告所带来的巨大商机。其中&#xff0c;云衔科技以其卓越的专业素养和全面的服务体系&a…

stable diffusion--小白学习步骤

1.看一下Unet网络的讲解_哔哩哔哩_bilibili&#xff0c;了解Unet网络 2.看一下【生成式AI】Diffusion Model 原理剖析 (1/4)_哔哩哔哩_bilibili&#xff0c;起码要看前3/6个视频 3.看一下超详细的扩散模型&#xff08;Diffusion Models&#xff09;原理代码 - 知乎 (zhihu.co…

鑫鹿助贷CRM系统:助力助贷行业实现智能商业转型

数字化时代&#xff0c;商业竞争愈发激烈&#xff0c;助贷行业如何把握商机、实现高效管理、打造高回报率的商业模式&#xff0c;成为了助贷行业老板们比较关注的问题&#xff0c;而鑫鹿助贷CRM管理系统&#xff0c;正是这场商业变革中的得力助手&#xff0c;系统功能完善&…

每帧纵享丝滑——ToDesk云电脑、网易云游戏、无影云评测分析及ComfyUI部署

目录 一、前言二、云电脑性能测评分析2.1、基本配置分析2.1.1、处理器方面2.1.2、显卡方面2.1.3、内存与存储方面2.1.4、软件功能方面 2.2、综合跑分评测 三、软件应用实测分析3.1、云电竞测评3.2、AIGC科研测评——ComfyUI部署3.2.1、下载与激活工作台3.2.2、加载模型与体验3.…

AGI的智力有可能在两年内超过人类水平

特斯拉CEO埃隆马斯克近日与挪威银行投资管理基金CEO坦根的访谈中表示&#xff0c;AGI的智力将在两年内可能超过人类智力&#xff0c;在未来五年内&#xff0c;AI的能力很可能超过所有人类。 马斯克透漏&#xff0c;去年人工智能发展过程中的主要制约因素是缺少高性能芯片&#…

基于springboot实现人事管理系统项目【项目源码+论文说明】

基于springboot实现人事管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为学校以及一些培训机构&#xff0c;都在用信息化战术来部署线上学习以及线上考试&#xff0c;可以与线下的考试有机的结合在一起&#xff0c;实现基于vue的人事系统在技术…

IP定位技术原理详细阐述

IP定位技术原理主要基于IP地址与地理位置之间的关联&#xff0c;通过一系列的技术手段&#xff0c;实现对网络设备的物理位置进行精确或大致的定位。以下是对IP定位技术原理的详细阐述。 首先&#xff0c;我们需要了解IP地址的基本概念。IP地址是互联网协议地址的简称&#xff…

大模型日报|今日必读的10篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.谷歌推出新型 Transformer 架构&#xff1a;反馈注意力就是工作记忆 虽然 Transformer 给深度学习带来了革命性的变化&#xff0c;但二次注意复杂性阻碍了其处理无限长输入的能力。 谷歌研究团队提出了一种新型 T…

前端开发攻略---从源码角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章让你彻底弄懂响应式原理。

1、思考 Vue的响应式到底要干什么&#xff1f; 无非就是要知道当你读取对象的时候&#xff0c;要知道它读了。要做一些别的事情无非就是要知道当你修改对象的时候&#xff0c;要知道它改了。要做一些别的事情所以要想一个办法&#xff0c;把读取和修改的动作变成一个函数&#…

xcode c++项目设置运行时参数

在 Xcode 项目中&#xff0c;你可以通过配置 scheme 来指定在运行时传递的参数。以下是在 Xcode 中设置运行时参数的步骤&#xff1a; 打开 Xcode&#xff0c;并打开你的项目。在 Xcode 菜单栏中&#xff0c;选择 "Product" -> "Scheme" -> "E…

每日一练

这题我主要用的思想是:动态规划 1.状态表示&#xff1a;以i位置为结尾的字符串是否可以用字典表示&#xff0c;然后就可以拆分成 j ~ i 为字典中的最后一个单词&#xff0c;此时 0 < j < i (1.有可能全部为字典的一个单词&#xff0c;2.有可能只有一个字母的单词)&#x…