matplotilb画图

Matplotlib 是支持 Python 语言的开源绘图库,因为其支持丰富的绘图类型、简单的绘图方式以及完善的接口文档,深受 Python 工程师、科研学者、数据工程师等各类人士的喜欢。Matplotlib 拥有着十分活跃的社区以及稳定的版本迭代,当我们使用 Python 进行数据分析并执行可视化时,Matplotlib 无疑是得心应手的工具之一。

接下来很多内容都是在代码中,说明也在代码里面

import matplotlib.pyplot as plt
#pyplot 模块是 Matplotlib 最核心的模块,几乎所有样式的 2D 图形都是经过该模块绘制出来的,这里简称为 plt 是约定俗成的import matplotlib
matplotlib.use('TkAgg')
#新版本的matplotilb必须要写一个框架plt.rcParams["font.sans-serif"]=['SimHei']
#让中文可以显示的操作

pyplot的一些常用图像

  1. 折线图 (Line plot): 用于展示数据随时间或有序类别变化的趋势。
  2. 散点图 (Scatter plot): 展示两个变量之间的关系,适用于观察数据点的分布。
  3. 条形图 (Bar chart): 用于比较不同类别的数据。
  4. 直方图 (Histogram): 显示数据的频率分布。
  5. 饼图 (Pie chart): 展示数据的比例或占比。
  6. 箱形图 (Box plot): 用于显示数据的分布情况,包括中位数、四分位数等。
  7. 热图 (Heatmap): 通过颜色变化显示数据矩阵的大小。
  8. 极坐标图 (Polar chart): 在极坐标系中显示数据。
  9. 3D图形: 用于在三维空间中显示数据。
  10. 子图 (Subplots): 在同一画布上创建多个图表。

plt.plot() 折线图

pyplot 模块下面的**直线绘制(折线类)**方法类。代码中,它取出 x 数据集中的内容,将其按大小打印到图中,并以直线连接每个点。

通常,plot() 接受两个参数。一个代表横坐标的数值,另一个代表纵坐标的数值。但是,当你只传入一个参数 y 的时候,它会默认代表纵坐标的值,而横坐标的值会从 0n-1ny 数据长度。

y = [1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
plt.plot(y)
plt.show()import numpy as np# 在 -2PI 和 2PI 之间等间距生成 1000 个值,也就是 X 坐标
X = np.linspace(-2*np.pi, 2*np.pi, 1000)
# 计算 y 坐标
y = np.sin(X)plt.plot(X, y)

当你学会线型图绘制之后,可能想到改变图形的属性。例如,更改图形的尺寸、添加图例等。Matplotlib 提供的面向对象 API 使用起来非常简单,但是下面不再直接使用 plt.plot,而是定义一个绘图对象 fig, axes = plt.subplots()

# 生成示例数据
x = np.linspace(0, 10, 20)
y = x * x + 2fig, axes = plt.subplots() #这个subplots可以一次创建画板和画布两个对象很方便
axes.plot(x, y, 'r')

上面的绘图代码中,你可能会对 figaxes 产生疑问。Matplotlib 的 API 设计的非常符合常理,在这里,fig 相当于绘画用的画板,而 axes 则相当于铺在画板上的画布。我们将图像绘制在画布上,于是就有了 plotset_xlabel 等操作。

  1. Figure (画板): figure 是绘制所有图形的外部容器。可以想象成一个画板或画框,它为图像提供了一个物理空间。在一个程序中可以有多个 figure 对象。在 fig, axes = plt.subplots() 这行代码中,fig 是指创建的 Figure 对象。在 Matplotlib 中,Figure 对象代表整个图形窗口,它是一个容器,可以包含一个或多个 Axes 对象(即图表)。每个 Axes 对象代表图形窗口中的一个绘图区域,您可以在其中绘制各种图形。
  2. Axes (画布): axesfigure 内的具体图形空间,可以理解为画布。在 axes 上,我们可以绘制具体的图形、设置图表标题、坐标轴标签等。一个 figure 可以包含多个 axes

我们再来看看代码就比较直观

# 创建一个 figure(画板)
fig = plt.figure()# 向 figure 添加一个 axes(画布),这里的 [0.1, 0.1, 0.8, 0.8] 是 axes 在 figure 中的位置和大小 [left, bottom, width, height]
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
#这里的数字都是对于画板相差多少来的# 在 axes 上绘制图形
ax.plot([1, 2, 3], [3, 2, 1])# 显示图形
plt.show()

我们不是说了一个画板上可以有多个画布吗?

#fig, axes = plt.subplots(nrows=x, ncols=y) 子图为x 行,y 列
fig, axes = plt.subplots(nrows=1, ncols=2) #这就是一行两列
axes[0][0].plot(x, y, 'r')
axes[0][1].plot(x, y, 'b')

这就是效果图,很直观吧,一个画板上有2*2

下面是关于调整这个多个画板的操作

关于标题和xy轴
# 绘制包含图标题、坐标轴标题以及图例的图形
fig, axes = plt.subplots()axes.set_xlabel('x label')
axes.set_ylabel('y label')
axes.set_title('title')axes.plot(x, x**2)
axes.plot(x, x**3)
axes.legend(["y = x**2", "y = x**3"], loc=2)

别的图像

在使用 Matplotlib 绘制不同类型的图表时,基本的设置步骤通常是相似的。关键在于调用相应的绘图函数(如 scatter, step, bar, fill_between 等)来生成特定类型的图像。每种图表类型的函数都有自己的参数和设置,但通常情况下,布局和标题设置的方式是类似的。我们暂且先讲相似的

代码在这里

# 绘制散点图、梯步图、条形图、面积图
import matplotlib.pyplot as plt
import numpy as np# 示例数据
x = np.linspace(0, 5, 10)
y = x ** 2# 散点图
plt.figure(figsize=(5, 4))
plt.scatter(x, y, c='blue', marker='o', s=50, alpha=0.5, label='Scatter plot')
plt.title("Scatter Plot Example")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.legend()
plt.show()# 梯步图
plt.figure(figsize=(5, 4))
plt.step(x, y, where='mid', lw=2, label='Step plot')
# where='mid'
plt.title("Step Plot Example")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.legend()
plt.show()# 条形图
n = np.arange(len(x))
plt.figure(figsize=(5, 4))
plt.bar(n, y, align="center", width=0.5, alpha=0.5, label='Bar plot')
plt.xticks(n, x)  # 设置x轴刻度标签为x的值
plt.title("Bar Plot Example")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.legend()
plt.show()# 面积图
plt.figure(figsize=(5, 4))
plt.fill_between(x, y, y2=0, color="green", alpha=0.5, label='Area plot')
plt.title("Fill Between Plot Example")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.legend()
plt.show()

我们可以看到一个plt.legend() ,这个是 Matplotlib 图形库中的一个函数,用于给图表添加图例。图例用于解释图中的每个数据系列代表什么,它会显示数据系列的标签和对应的颜色或形状。

当你在图表中绘制多个数据系列时,通过在 plot()scatter()bar() 等函数中使用 label 参数为每个数据系列添加标签,然后调用 plt.legend(),Matplotlib 会自动创建图例。

例如:

plt.plot(x, y1, label='Series 1')
plt.plot(x, y2, label='Series 2')
plt.legend()

在这个例子中,将会在图表中显示两个数据系列的图例,分别标记为 “Series 1” 和 “Series 2”。如果不指定位置,Matplotlib 将尝试找到最不碍事的位置放置图例(通常是图表的角落)。你也可以通过传递参数给 plt.legend() 来指定图例的位置,例如 plt.legend(loc='upper right') 会将图例放在图表的右上角。

  1. 散点图 (scatter):
    • x, y: x和y轴上的数据点。
    • s: 数据点的大小(可选)。
    • c: 数据点的颜色(可选)。
    • alpha: 图表的透明度(可选)。
    • marker: 表示数据点样式的字符串(可选)。
    • marker 参数用于指定每个数据点的形状。这个参数可以是多种预定义形状的字符串代码,例如:
      • 'o': 圆圈
      • 's': 正方形
      • '^': 上三角形
      • '>': 右三角形
      • '+': 加号
      • 'x': 叉号
      • 'D': 菱形
  2. 梯步图 (step):
    • x, y: x和y轴上的数据点。
    • where: 指定步进发生的位置(‘pre’、‘post’、‘mid’),默认是’pre’。
      • where='pre': 每个阶梯的开始处对齐于 x 轴上的对应点。
      • where='post': 每个阶梯的结束处对齐于 x 轴上的对应点。
      • where='mid': 每个阶梯的中间对齐于 x 轴上的对应点。
    • linewidthlw: 线宽(可选)。
  3. 条形图 (bar):
    • x, y: x轴上的坐标和每个条形的高度。
    • width: 条形的宽度(可选)。
    • align: 条形的对齐方式(‘center’ 或 ‘edge’)。
    • alpha: 条形的透明度(可选)。
  4. 面积图 (fill_between):
    • x: x轴上的数据点。
    • y1, y2: 在x轴上填充区域的两个y轴数据序列,通常y2x的函数。
    • color: 填充的颜色(可选)。
    • alpha: 填充的透明度(可选)。
直方图
n = np.random.randn(100000)
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
#figsize=(12, 4)说明了画板的长和宽
axes[0].hist(n)
axes[0].set_title("Default histogram")
axes[0].set_xlim((min(n), max(n)))axes[1].hist(n, cumulative=True, bins=50)
axes[1].set_title("Cumulative detailed histogram")
axes[1].set_xlim((min(n), max(n)))

这段代码是用 Matplotlib 库绘制直方图的示例。这里首先生成了一个包含 100000 个服从标准正态分布的随机数的数组 n,然后创建了一个包含两个画布的画板,用于绘制两种不同类型的直方图。

  1. 第一个画布(axes[0])显示的是标准直方图,它展示了数据的分布情况。hist(n) 函数用于绘制 n 的直方图,set_title 设置标题,set_xlim 设置 x 轴的范围,使其从 n 的最小值到最大值。
  2. 第二个画布(axes[1])显示的是累积直方图,通过设置 cumulative=True 实现。累积直方图展示了小于或等于每个 x 值的观测值的累积频率。这里同样使用 hist 函数绘制直方图,设置了 50 个桶(bins),以便更详细地展示数据的累积分布。标题和 x 轴范围的设置与第一个画布相同。
雷达图
fig = plt.figure(figsize=(6, 6))ax = fig.add_axes([0.0, 0.0, .6, .6], polar=True)
t = np.linspace(0, 2 * np.pi, 100)ax.plot(t, t, color='blue', lw=3)
`等高线图
alpha = 0.7
phi_ext = 2 * np.pi * 0.5def flux_qubit_potential(phi_m, phi_p):return 2 + alpha - 2 * np.cos(phi_p) * np.cos(phi_m) - alpha * np.cos(phi_ext - 2*phi_p)phi_m = np.linspace(0, 2*np.pi, 100)
phi_p = np.linspace(0, 2*np.pi, 100)
X, Y = np.meshgrid(phi_p, phi_m)
Z = flux_qubit_potential(X, Y).Tfig, ax = plt.subplots()cnt = ax.contour(Z, cmap=plt.cm.RdBu, vmin=abs(Z).min(),vmax=abs(Z).max(), extent=[0, 1, 0, 1])

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

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

相关文章

【Windows】如何实现 Windows 上面的C盘默认文件夹的完美迁移

如何实现 Windows 上面的C盘默认文件夹的完美迁移 1. 遇到的问题 在我想迁移C盘的 下载 和 视频 文件夹的时候,遇到了这样的问题,在迁移之后,我显卡录像的视频还是保存到了C盘默认位置里,以及我迁移了 下载 之后下载的盘依然是在…

轻盈悦耳的运动型气传导耳机,还有条夜跑灯,哈氪聆光体验

我平时出门不管是散步、骑行,还是坐公交的时候,都喜欢戴上耳机听音乐,这可以让我放松心情。现在市面上的耳机还是以真无线为主,选择虽多,但不适合户外使用,听不见外界的声音,运动时还容易脱落&a…

【附代码】Python函数性能测试(perfplot)

文章目录 相关文献测试电脑配置展开元素是list的list在numpy数组上映射函数的最有效方法数组numpy中唯一值的最有效频率计数方法反转numpy数组的最有效方法如何向 numpy 数组添加额外的列将 numpy 矩阵初始化为零或一以外的值 作者:小猪快跑 基础数学&计算数学&…

SpringMVC常用注解和用法总结

目标: 1. 熟悉使用SpringMVC中的常用注解 目录 前言 1. Controller 2. RestController 3. RequestMapping 4. RequestParam 5. PathVariable 6. SessionAttributes 7. CookieValue 前言 SpringMVC是一款用于构建基于Java的Web应用程序的框架,它通…

Debian12配置ssh服务器

Debian12配置ssh服务器 安装ssh-server sudo apt install openssh-server启动ssh sudo systemctl start ssh启用ssh sudo systemctl enable ssh查看ssh状态 sudo systemctl status ssh可以看到有enabled和running字样 说明ssh启用成功 连接到服务器 # username是你的用…

Lag-Llama:基于 LlaMa 的单变量时序预测基础模型

文章构建了一个通用单变量概率时间预测模型 Lag-Llama,在来自Monash Time Series库中的大量时序数据上进行了训练,并表现出良好的零样本预测能力。在介绍Lag-Llama之前,这里简单说明什么是概率时间预测模型。概率预测问题是指基于历史窗口内的…

基于Java SSM框架实现师生交流答疑作业系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现师生交流答疑作业系统演示 摘要 在新发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,人们对师生交流平台越来越重视,更好的实…

CSP-坐标变换(其二)

问题描述 对于平面直角坐标系上的坐标 (x,y)&#xff0c;小 P 定义了如下两种操作&#xff1a; 拉伸 k 倍&#xff1a;横坐标 x 变为 kx&#xff0c;纵坐标 y 变为 ky&#xff1b; 旋转 θ&#xff1a;将坐标 (x,y) 绕坐标原点 (0,0) 逆时针旋转 θ 弧度&#xff08;0≤θ<…

【开源视频联动物联网平台】SIP协议的特点

SIP&#xff08;Session Initiation Protocol&#xff09;协议是一种用于建立、修改和终止多媒体通信会话的通信协议。在互联网电话、视频会议、即时消息传递和多媒体通信等领域&#xff0c;SIP协议得到了广泛的应用。可以说&#xff0c;SIP协议已成为目前通信系统协议的主流&a…

java高校实验室排课学生考勤系统springboot+vue

随着各高校办学规模的迅速扩大,学科专业的不断拓宽,传统的实验教学和实验室管理方法已经不能适应学校管理的要求,特别是化学实验室的管理,化学实验室仪器药品繁杂多样,管理任务繁重,目前主要使用人工记录方法管理,使用不便,效率低下,而且容易疏漏.时间一长将产生大量的文件和数…

使用postman请求x5接口

x5接口简介 1.接口样例 {"header"{"appid":"bpmnew_fanwei","sign":"C033162E86E4CADE80C7EB44D68A5AD2","sign_type":"md5","url":"https://oa.mioffice.cn/api/bpm/xm/app/show/tod…

学习80min快速了解大型语言模型(ChatGPT使用)笔记

学习李宏毅&#xff1a;80min快速了解大型语言模型&#xff08;ChatGPT使用&#xff09;笔记 链接&#xff1a;https://www.youtube.com/watch?vwG8-IUtqu-s 1、创建一个属于自己的GPT 目前&#xff0c;GPT4具备一个功能&#xff0c;Create a GPT。利用这个功能可以创建一个…

Linux:服务器管理工具宝塔(bt)安装教程

一、简介 bt宝塔Linux面板是提升运维效率的服务器管理软件&#xff0c;支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务的管理功能 二、安装 使用 SSH 连接工具&#xff0c;如堡塔SSH终端连接到您的 Linux 服务器后&#xff0c;挂载磁盘&#xff0c;根据系统执…

冗余链路和生成树协议

文章目录 冗余链路生成树协议 冗余链路 背景&#xff1a;在许多交换机或者交换机设备组成的网络环境中&#xff0c;通常都使用一些备份连接&#xff0c;来提高网络的健全。在金融网中A和B之间不止一条线路&#xff0c;保证网络的安全性能。备份连接也叫做冗余链路 冗余链路带…

Redis ziplist源码解析

area |<---- ziplist header ---->|<----------- entries ------------->|<-end->|size 4 bytes 4 bytes 2 bytes ? ? ? ? 1 byte--------------------------------------------------------------- comp…

机器学习笔记 - 什么是3D语义场景完成/补全?

一、什么是3D语义场景补全? 3D 语义场景完成(Semantic Scene Completion)是一种机器学习任务,涉及以体素化形式预测给定环境的完整3D场景(完成3D形状的同时推断场景的 3D 语义分割的任务)。这是通过使用深度图和为场景提供上下文的可选 RGB 图像来完成的。目标是以一种可轻…

SQL -高阶3

zstarling 字符串拼接与类型转换最大&#xff0c;最小值&#xff0c;提取日期部分的数值日期截断 字符串拼接与类型转换 新语法SQL delete from public.basiclaw_qr_staff_ac ct where batch_date || data_dt || :: date and biz_line || biz_line || ;详解 该 SQL 语句…

LeedCode刷题---子数组问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、最大子数组和 题目链接&#xff1a;最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连…

计算机视觉(CV)技术的优势和挑战-AI生成版

一、引言 计算机视觉是人工智能领域中的一个分支&#xff0c;旨在使计算机能够通过处理数字图像或视频数据&#xff0c;实现与人类视觉类似的感知和理解能力。计算机视觉技术的发展在很大程度上受到深度学习的推动&#xff0c;如今已经在很多应用领域得到了广泛的应用&#xf…

【力扣】——可获得的最大点数(滑动窗口)

几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…