20. Matplotlib 数据可视化

news2025/2/25 19:04:07

目录

    • 1. 简介
    • 2. Matplotlib 开发环境
      • 2.1 画图
      • 2.2 画图接口
      • 2.4 线形图
      • 2.5 散点图
      • 2.6 等高线图
      • 2.7 直方图

1. 简介

Matplotlib网址:https://matplotlib.org/

数据可视化是数据分析中最重要的工作之一。Matploblib是建立在Numpy数组基础上的多平台数据可视化程序库,专门用于开发2D图表(包括3D图表)。matploblib继承了Matlab的交互性,用户可以逐条输入命令,为数据生成渐趋完整的图形表示。

Matplotlib注意有如下优点:

  • 使用简单。
  • 以渐进、交互式方式实现数据可视化。
  • 表达式和文本使用LaTeX排版。
  • 对图像元素控制力强。
  • 可输出PNG、PDF、SVG和EPS。

安装和导入Matplotab

# 安装Pandas
'''Windows 按住win+R 输入 cmd,Mac 打开Terminal
conda install matplotlib
pip install matplotlib
'''
import matplotlib as mpl # 导入模块
import matplotlib.pyplot as plt # 导入模块方法

2. Matplotlib 开发环境

Matplotlib 有3种开发环境,分别是脚本、IPython shell 和 IPython Notebook。

2.1 画图

在脚本中画图

如果在一个脚本文件中使用Matplotlib,那么现实图形的时候必须使用plt.show()启动一个事件循环(event loop),并找到所有当前可用的图形对象,然后打开一个或多个交互式窗口显示图形。

# 方法一
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100) # 生成1~10中100个等差数
plt.plot(x,np.sin(x)) # 正弦曲线
plt.plot(x,np.cos(x)) # 余弦曲线
plt.show() # 画图

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
fig = plt.figure()
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))

在IPython shell中画图

在IPython中使用%matplotlib魔法命令,启动Matplotlib模式,就不需要使用plt.show()。

%matplotlib
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))

在IPython Notebook中画图

IPython Notebook 是一款基于浏览器的交互式数据分析工具,可以将描述文字、代码、图形、HTML元素以及更多的媒体形式组合起来,集成到单个可执行的Notebook文档中。

  • %matplotlib notebook:在Notebook中启动交互式图形。
  • %matplotlib inline:在Notebook中启动静态图形。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
fig = plt.figure()
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))

2.2 画图接口

Matplotlib 提供了两种画图接口:一种是便捷的Matlab风格接口,另一个是功能更强大的面向对象接口。

Matlab 风格接口:最重要的特性是有状态的(stateful),它持续跟踪当前的图形和坐标轴,所有plt命令都可以应用。可以使用plt.gcf()获取当前图形的具体信息,使用plt.gca()获取当前坐标轴的具体信息。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
plt.figure() # 创建图形
plt.subplot(2,1,1) # 创建两个子图中的第一个,设置坐标轴,行、列、子图编号
plt.plot(x,np.sin(x))
plt.subplot(2,1,2) # 创建两个子图中的第二个,设置坐标轴
plt.plot(x,np.cos(x))

面向对象接口:可适应更复杂的场景,可以更好地控制图形。画图函数不再受到当前活动的图形或坐标轴的限制,而变成了显式的Figure和Axes的方法。复杂图形时,面向对象接口方法更方便。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
fig,ax = plt.subplots(2) # 创建图形网格,ax是一个包含两个Axes对象的数组
ax[0].plot(x,np.sin(x))
ax[1].plot(x,np.cos(x))

在这里插入图片描述

2.4 线形图

线性图形就是方程y=f(x)使用plt.style可以选择图形的绘图风格。figure 可以被看成是一个能够容纳各种坐标轴、图形、文字和标签的容器。axes 是一个带有刻度和标签的矩形,最终包含所有可视化的图形元素。

plt.style.use('seaborn-whitegrid') # 
fig = plt.figure() # 创建一个图形 fig
ax = plt.axes() # 创建一个坐标 ax
x = np.linspace(0,10,1000)
ax.plot(x,np.sin(x)) # 使用 ax.plot画图
plt.plot(x,np.cos(x)) # 使用 pylab 接口画图

调整线条的颜色与风格

put.plot()函数可以通过相应的参数设置颜色与风格。要修改颜色,可以使用color参数,它支持各种颜色值的字符串。

plt.plot(x,np.sin(x-0),color='blue') # 标准颜色名称
plt.plot(x,np.sin(x-1),color='g') # 缩写颜色代码
plt.plot(x,np.sin(x-2),color='0.75') # 范围在0~1的灰度值
plt.plot(x,np.sin(x-3),color='#FFDD44') # 十六进制(RRGGBB,00~FF)
plt.plot(x,np.sin(x-4),color=(1.0,0.2,0.3)) # RGB 元组,范围0~1
plt.plot(x,np.sin(x-5),color='chartreuse') # HTML 颜色名称

在这里插入图片描述

使用linestyle可以调整线条的风格

plt.plot(x,x+0,linestyle='solid')
plt.plot(x,x+1,linestyle='dashed')
plt.plot(x,x+2,linestyle='dashdot')
plt.plot(x,x+3,linestyle='dotted')
plt.plot(x,x+4,linestyle='-') # 实线
plt.plot(x,x+5,linestyle='--') # 虚线
plt.plot(x,x+6,linestyle='-.') # 点画线
plt.plot(x,x+7,linestyle=':') # 实点线

在这里插入图片描述

也可以将linestyle和color组合起来,作为plt.plot()函数的一个非关键字使用。

plt.plot(x,x+0,'-g') # 绿色实线
plt.plot(x,x+1,'--c') # 青色虚线
plt.plot(x,x+2,'-.k') # 黑色点画线
plt.plot(x,x+3,':r') # 红色实点线

在这里插入图片描述

调整坐标轴上下限和设置图形标签

Matplotlib 自动为图形选择最合适的坐标轴上下限,但是有时自定义坐标轴上下限可能会更好。调整坐标轴上下限最基础的方法是plt.xlim()和plt.ylim()。

也可以使用plt.axis(),通过传入[xmin,xmax,ymin,ymax]对应的值,它还可以按照图形的内容自动收紧坐标轴,不留空白区域。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
fig = plt.figure()
plt.plot(x,np.sin(x))
# plt.xlim(-1,11)
# plt.ylim(-1.5,1.5)
plt.axis([-1,11,-1.5,1.5])
plt.axis('tight') # 根据内容自动收紧坐标轴,不留空白
plt.axis('equal') # 设置分辨率为1:1,x轴单位长度和y轴单位长度相等
plt.title('y=sin(x)') # 标题
plt.xlabel('x') # x轴标题
plt.ylabel('sin(x)') # y轴标题

在这里插入图片描述

也可以使用plt.legend()方法创建图例。将每条的标签与其风格、颜色自动匹配。

plt.plot(x,np.sin(x),'-g',label='sin(x)')
plt.plot(x,np.cos(x),':b',label='cos(x)')
plt.axis('equal')
plt.legend() # 自动匹配

在这里插入图片描述

2.5 散点图

散点图是由独立的恶点、圆圈或其它形状构成的。

使用plt.plot/ax.plot画散点图。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn-whitegrid')
x = np.linspace(0,10,30)
y = np.sin(x)
plt.plot(x,y,'o',color='black')
rng = np.random.RandomState(0)
for marker in ['o','.',',','x','+','v','^','<','>','s','d']:
    plt.plot(rng.rand(5),rng.rand(5),marker,label="marker='{0}'".format(marker))
    plt.legend(numpoints=1)
    plt.xlim(0,1.8)

在这里插入图片描述

plt.plot(x,y,'-ok') # 直线(-)、圆圈(o)、黑色(k)

plt.plot(x,y,'-p',color='gray',markersize=15,linewidth=4,
         markerfacecolor='white',
         markeredgecolor='gray',
         markeredgewidth=2)
plt.ylim(-1.2,1.2)

plt.scatter函数画散点图。

plt.scatter与plt.plot的主要区别:前者在创建散点图时具有更高的灵活性,可以单独控制每个散点图与数据匹配,也可以让每个散点图具有不同的属性(大小、表面颜色、边框颜色等)

rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000*rng.rand(100)
plt.scatter(x,y,c=colors,s=sizes,alpha=0.3,cmap='viridis')
plt.colorbar()

在这里插入图片描述

from sklearn.datasets import load_iris
iris = load_iris()
features = iris.data.T
plt.scatter(features[0],features[1],alpha=0.2,
            s=100*features[3],c=iris.target,cmap='viridis')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])

在这里插入图片描述

数据量较小的时候,plt.plot与plt.scatter在效率上差异不大,但是当数据大的时候,plt.plot的效率将大大高于plt.scatter。

2.6 等高线图

使用plt.contour可以画等高线图,可以画带有填充色的等高线图的色彩,使用plt.imshow可以显示图形。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn-white')
def f(x,y):
    return np.sin(x)**10+np.cos(10+y*x)*np.cos(x)
x = np.linspace(0,5,50) # 0~5中50个等差数字
y = np.linspace(0,5,40)
X,Y = np.meshgrid(x,y) # 从一维数组构建二维网格数据
Z = f(X,Y)
# plt.contour(X,Y,Z,colors='black') # 画标准的线形等高线图
plt.contour(X,Y,Z,20,cmap='RdGy') # 设置一个线条配色方案自定义颜色,将数据范围等分为20份;红-灰
plt.colorbar() # 自动创建一个表示图形各种颜色对应的标签颜色条

在这里插入图片描述

contours = plt.contour(X,Y,Z,3,colors='black')
plt.clabel(contours,inline=True,fontsize=8)
plt.imshow(Z,extent=[0,5,0,5],origin='lower',cmap='RdGy',alpha=0.5)# alpha 设置透明度
plt.colorbar()

在这里插入图片描述

2.7 直方图

一维直方图:创建一个简易的频次直方图

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn-white')

# data = np.random.randn(1000)
# plt.hist(data,bins=30,density=True,alpha=0.5,
#          histtype='stepfilled',color='steelblue',
#          edgecolor='none')

x1 = np.random.normal(0,0.8,1000)
x2 = np.random.normal(-2,1,1000)
x3 = np.random.normal(3,2,1000)
kwargs = dict(histtype='stepfilled',alpha=0.3,density=True,bins=40)
plt.hist(x1,**kwargs)
plt.hist(x2,**kwargs)
plt.hist(x3,**kwargs)
print(counts) # 查看每段区间样本数 [ 16 249 565 165   5]

在这里插入图片描述

二维直方图:将二维数组按照二维区间进行切分创建二维频次直方图。

使用plt.hist2d

mean = [0,0]
cov = [[1,1],[1,2]]
x,y = np.random.multivariate_normal(mean,cov,10000).T
plt.hist2d(x,y,bins=30,cmap='Blues')
cb = plt.colorbar()
cb.set_label('counts in bin')
counts,xedges,yedges = np.histogram2d(x,y,bins=30)

在这里插入图片描述

使用plt.hexbin,正六边形分割,将二维数据集成分割成蜂窝状

plt.hexbin(x,y,gridsize=30,cmap='Blues')
cb = plt.colorbar(label='count in bin')

核密度估计:使用KDE方法抹除空间中离散的数据点,从而拟合一个平滑的函数。

from scipy.stats import gaussian_kde
data = np.vstack([x,y])
kde = gaussian_kde(data)
xgrid = np.linspace(-3.5,3.5,40)
ygrid = np.linspace(-6,6,40)
Xgrid,Ygrid = np.meshgrid(xgrid,ygrid)
Z = kde.evaluate(np.vstack([Xgrid.ravel(),Ygrid.ravel()]))
plt.imshow(Z.reshape(Xgrid.shape),origin='lower',
           aspect='auto',extent=[-3.5,3.5,-6,6],cmap='Blues')
cb = plt.colorbar(label='density')

在这里插入图片描述

KDE 方法通过不同的平滑带宽长度在拟合函数的准确性和平滑性之间做出权衡。gaussian_kde通过一种经验方法试图找到输入数据平滑长度的近似最优解。

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

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

相关文章

UI自动化测试工具工作原理是怎样的?

随着软件开发的不断演进&#xff0c;保障软件质量成为了至关重要的一环。在这个过程中&#xff0c;UI自动化测试工具崭露头角&#xff0c;为开发团队提供了一种强有力的方式来确保应用程序的稳定性、功能性和兼容性。本文将深入探讨UI自动化测试工具的定义、工作原理以及其在提…

FOC系列(三)----AS5600磁编码器

一、 关于AS5600 1.1 芯片内部框图和引脚功能介绍 具体的内容大家可以查看数据手册&#xff1a;AS5600数据手册&#xff0c;在这里只是对一下重要的地方进行说明。    系统框图如下&#xff1a;    电源设计选项&#xff0c;我在设计时选择的是第二种电源方案&#xff0c…

基于Django+Tensorflow卷积神经网络鸟类识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统概述系统功能核心技术系统架构系统优势 二、功能三、系统四. 总结  总结 一项目简介 介绍一个基于DjangoTensorflow卷积神经网络鸟类识别系统是一个非…

NoSQL大数据存储技术思考题及参考答案

思考题及参考答案 第1章 绪论 1. NoSQL和关系型数据库在设计目标上有何主要区别&#xff1f; (1)关系数据库 优势&#xff1a;以完善的关系代数理论作为基础&#xff0c;具有数据模型、完整性约束和事务的强一致性等特点&#xff0c;借助索引机制可以实现高效的查询&#xf…

前五年—中国十大科技进展新闻(2012年—2017年)

前五年—中国十大科技进展新闻&#xff08;2012-2017&#xff09; 2017年中国十大科技进展新闻1. 我国科学家利用化学物质合成完整活性染色体2. 国产水下滑翔机下潜6329米刷新世界纪录3. 世界首台超越早期经典计算机的光量子计算机诞生4. 国产大型客机C919首飞5. 我国首次海域天…

SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选

SQL HAVING子句 HAVING子句被添加到SQL中&#xff0c;因为WHERE关键字不能与聚合函数一起使用。 HAVING语法 SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) HAVING condition ORDER BY column_name(s);演示数据库 以下是Northwind示例数…

【BUG合集】(一)①数据库存1/0,请求结果返回true和false;②sql查数据库能查,但mybatis查为空;③data64图片存储为异常;

前言 最近&#xff0c;在工作上接手的任务中&#xff0c;各种 bug 问题出现&#xff0c;在解决的同时也可以记录一下。因此&#xff0c;觉得可以出个记录 bug 合集。方便后来者碰到类似情况&#xff0c;可以作为一个参考进行解决。 文章题目就包含当前文章内容中所遇到的三个 b…

立刻解决缺少msvcp140_1.dll解决方法,msvcp140_1.dll修复指南

在日常使用电脑的过程中&#xff0c;我们有时会遇到由于某些重要的DLL文件缺失而导致的程序无法正常启动的问题。很多用户可能都经历过由于缺少msvcp140_1.dll导致应用程序无法运行的情况。本文将为你提供解决msvcp140_1.dll缺失问题的详尽方法&#xff0c;附带对每种方法优点和…

配置自动化部署Jenkins和Gitea

配置自动化部署 这里使用的是JenkinsGitea 如果不知道怎么安装Jenkins和Gitea可以参考下面文章 https://blog.csdn.net/weixin_46533577/article/details/134644144 我的另一篇文章 介绍 前端 先说下自己的情况&#xff0c;因为自己服务器原因&#xff0c;使用的服务器内…

滴滴打车崩了!全过程

滴滴发布致歉10元补偿券&#xff0c;文末可领取 。 事情发生于 2023年11月27日晚~28日中午&#xff0c;滴滴打车服务出现大面积故障&#xff0c;登上微博热搜。 许多用户在使用滴滴出行时遇到了无法叫车、订单异常等问题&#xff0c;导致大量用户滞留在外&#xff0c;出行受阻…

极速整理文件!Python自动化办公新利器

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 当涉及到自动化办公和文件整理&#xff0c;Python确实是一个强大的工具。在这篇博客文章中&#xff0c;我将深入探讨《极速整理文件&#xff01;Python自动化办公新利器》这个话题&#xff0c;并提供更加丰富和全…

基于单片机智能电子密码锁设计

**单片机设计介绍&#xff0c;基于单片机智能电子密码锁设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能电子密码锁设计是一种利用单片机&#xff08;如Arduino、Raspberry Pi等&#xff09;和相关电子元件来…

【鲁班猫创意大赛2期】基于鲁班猫的幼儿Al监督系统

【鲁班猫创意大赛2期】基于鲁班猫的幼儿Al监督系统 作品介绍 本作品名称为“基于鲁班猫的幼儿 Al 学习助手”&#xff08;系统总体框图如下图&#xff09;&#xff0c;作品应用群体为幼儿群体&#xff0c;主要功能&#xff1a;通过实时坐姿检测&#xff0c;防止坐姿不端正导致…

基于BP神经网络的手写体数字识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 filename dir(images\*.bmp); %图像文件格式 load BP.matfilename dir(test\*.bmp); …

深入理解堆排序:建堆、排序与优化

引言 在计算机科学中&#xff0c;堆排序是一种高效的排序算法&#xff0c;利用堆的数据结构特性进行排序。本文将深入探讨堆排序的原理、实现过程&#xff0c;并介绍一种优化方法&#xff0c;以帮助读者更好地理解和运用这一经典算法 目录 堆排序简介 1.1 什么是堆排序&#x…

【精选】VulnHub red 超详细过程思路

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

k8s-daemonset、job、cronjob控制器 6

Daemonset控制器&#xff08;一个节点部署一个&#xff09; 、 创建Daemonset控制器 控制节点上不能进行部署&#xff0c;有污点 解决方式&#xff1a; 扩容节点&#xff0c;token值过期的解决方法&#xff1a; 回收pod job控制器 需要使用perl镜像&#xff0c;仓库没有&…

PyQt基础_009_ 按钮类控件QSlider

基本功能 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class SliderDemo(QWidget):def __init__(self, parentNone):super(SliderDemo, self).__init__(parent)self.setWindowTitle("QSlider 例子") self.resize…

优雅测试代码:使用Go实现高效单元测试!

简介 日常开发中, 测试是不能缺少的. Go 标准库中有一个叫做 testing 的测试框架, 可以用于单元测试和性能测试. 它是和命令 go test 集成使用的. 测试文件是以后缀 _test.go 命名的, 通常和被测试的文件放在同一个包中. 单元测试 单元测试的格式形如: func TestAbs(t *t…

Stable Diffusion绘画系列【6】:东方美学作品

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…