Python 科研绘图可视化(后处理)Matplotlib - RGBAxes

news2025/1/17 21:47:01

Introduction

科研可视化是将数据和信息转化为可视化形式的过程,旨在通过图形化展示数据和信息,使得科研工作者能够更好地理解和分析数据,并从中发现新的知识和洞见。科研可视化可以应用于各种领域,如生物学、物理学、计算机科学等,帮助科研工作者更好地理解和解释数据

科研可视化的目的是通过图形化展示数据和信息,使得科研工作者能够更好地理解和分析数据。科研可视化可以帮助科研工作者:

  • 更好地理解数据:科研可视化可以帮助科研工作者更好地理解数据的结构、特征和关系,以及数据中存在的模式和趋势。

  • 发现新的知识和洞见:科研可视化可以帮助科研工作者发现数据中存在的新的知识和洞见,以及数据中隐藏的关联性和规律。

  • 交流和展示研究成果:科研可视化可以帮助科研工作者更好地向同行和公众展示和交流研究成果,以及向决策者提供决策支持。

博主之前分享的案例

博主之前已经分享了很多可视化的案例,见下:
数据可视化之美 – 以Matlab、Python为工具
python matplotlib 画图(柱状图)总结
数据可视化之美-动态图绘制(以Python为工具)
数据可视化之美+点、线、面组合(以Python为工具)
等等

Axes Grid toolkit 介绍

这次主要分享的是基于Python的,Matplotlib下面的一个工具包,叫Axes Grid toolkit。
先简单介绍下:
Axes Grid toolkit 是 Matplotlib 的一个工具包,用于创建复杂的图形布局,包括具有不同形状和大小的轴、共享坐标轴、使用 colorbar 的图形和具有三个或更多维度的数据的可视化。
下图为可视化的一个结果,咱们具体展开说明怎么绘制这个图

Axes Grid toolkit的使用

创建网格

Grid 类是 Axes Grid toolkit 的基础类,它用于创建基本的网格。要创建一个 Grid 对象,我们需要传入一个包含子图位置和大小的矩形以及网格的行数和列数。下面的示例演示了如何创建一个 2x2 的网格:

from mpl_toolkits.axes_grid1 import Grid
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4, 4))

# 创建一个 2x2 的网格
grid = Grid(fig, rect=111, nrows_ncols=(2, 2), axes_pad=0.25)

# 在网格中创建一个子图
ax = grid[0]

# 在子图中绘制一些数据
ax.plot([1, 2, 3], [4, 5, 6])

# 显示图像
plt.show()

在上面的示例中,我们创建了一个 2x2 的网格,并在其中的第一个子图中绘制了一些数据。我们还可以使用 Grid 对象的子图列表来访问网格中的子图。

创建图像网格

ImageGrid 类用于创建图像网格,其中每个网格都包含一个图像。要创建 ImageGrid 对象,我们需要传入一个包含子图位置和大小的矩形、网格的行数和列数以及每个网格的位置。下面的示例演示了如何创建一个 3x3 的图像网格并在其中显示一些图像:

from mpl_toolkits.axes_grid1 import ImageGrid
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(4, 4))

# 创建一个 3x3 的图像网格
grid = ImageGrid(fig, 111, nrows_ncols=(3, 3), axes_pad=0.1)

# 在图像网格中显示一些图像
for i in range(9):
    grid[i].imshow(np.random.random((10, 10)))

# 显示图像
plt.show()

在上面的示例中,我们创建了一个 3x3 的图像网格,并在其中显示了一些随机图像。我们使用 ImageGrid 对象的子图列表来访问图像网格中的子图。

创建坐标轴网格

AxesGrid 类用于创建坐标轴网格,其中每个网格都包含一个坐标轴。要创建 AxesGrid 对象,我们需要传入一个包含子图位置和大小的矩形、网格的行数和列数以及每个网格的位置。我们还可以指定每个网格的标签模式,以便在每个坐标轴中显示标签。下面的示例演示了如何创建一个 2x2 的坐标轴网格并在其中绘制一些数据:

from mpl_toolkits.axes_grid1 import AxesGrid
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4, 4))

# 创建一个 2x2 的坐标轴网格
grid = AxesGrid(fig, 111, nrows_ncols=(2, 2), axes_pad=0.1, label_mode="all")

# 在坐标轴网格中绘制一些数据
for ax in grid:
    ax.plot([1, 2, 3], [4, 5, 6])

# 显示图像
plt.show()
在上面的示例中,我们创建了一个 2x2 的坐标轴网格,并在其中的每个坐标轴中绘制了一些数据。我们使用 AxesGrid 对象的子图列表来访问坐标轴网格中的子图。

绘制RGBAxes显示示例图像的三个通道和三个通道合并的颜色

import numpy as np
from matplotlib import cbook
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.axes_rgb import make_rgb_axes, RGBAxes

def get_rgb():
    # 获取一个包含三个通道的示例图像
    Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy", np_load=True)
    Z[Z < 0] = 0.
    Z = Z / Z.max()

    R = Z[:13, :13]
    G = Z[2:, 2:]
    B = Z[:13, 2:]

    return R, G, B


def make_cube(r, g, b):
    # 将三个通道的图像转换成一个立方体
    ny, nx = r.shape
    R = np.zeros((ny, nx, 3))
    R[:, :, 0] = r
    G = np.zeros_like(R)
    G[:, :, 1] = g
    B = np.zeros_like(R)
    B[:, :, 2] = b

    RGB = R + G + B

    return R, G, B, RGB


def demo_rgb1():
    # 创建一个RGBAxes对象,并在其中显示示例图像的三个通道
    fig = plt.figure()
    ax = RGBAxes(fig, [0.1, 0.1, 0.8, 0.8], pad=0.0)
    r, g, b = get_rgb()
    ax.imshow_rgb(r, g, b)


def demo_rgb2():
    # 创建一个包含三个子图的图像,并在其中显示示例图像的立方体
    fig, ax = plt.subplots()
    ax_r, ax_g, ax_b = make_rgb_axes(ax, pad=0.02)

    r, g, b = get_rgb()
    im_r, im_g, im_b, im_rgb = make_cube(r, g, b)
    ax.imshow(im_rgb)
    ax_r.imshow(im_r)
    ax_g.imshow(im_g)
    ax_b.imshow(im_b)

    for ax in fig.axes:
        ax.tick_params(direction='in', color='w')
        ax.spines[:].set_color("w")

# 调用两个函数,显示两种不同的RGBAxes用法
demo_rgb1()
demo_rgb2()

plt.show()

这个例子中,我们首先定义了两个函数get_rgb和make_cube,分别用于获取示例图像的三个通道,并将它们转换成一个立方体。然后,我们定义了两个示例函数demo_rgb1和demo_rgb2,分别演示了如何使用RGBAxes显示示例图像的三个通道和立方体。

在demo_rgb1中,我们创建了一个RGBAxes对象,并使用imshow_rgb函数在其中显示了示例图像的三个通道。

在demo_rgb2中,我们首先使用make_rgb_axes函数创建了一个包含三个子图的图像,然后使用make_cube函数将示例图像的三个通道转换成一个立方体。最后,我们使用imshow函数在主子图中显示了立方体的RGB合成图像,并在每个子图中显示了立方体的红色、绿色和蓝色通道。我们还使用循环遍历所有子图,并将它们的刻度线方向设置为内部,并将其边框颜色设置为白色。最后,我们使用plt.show()函数显示了图像。

demo2这个图要高级很多

Reference

Matplotlib 3.7.1 documentation

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

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

相关文章

一文带你入门C++类和对象【十万字详解,一篇足够了】

本文字数较多&#xff0c;建议电脑端访问。不多废话&#xff0c;正文开始 文章目录 ———————————————【类和对象 筑基篇】 ———————————————一、前言二、面向过程与面向对象三、结构体与类1、C中结构体的变化2、C中结构体的具体使用3、结构体 --&…

3.6 Linux shell脚本编程(概念、变量、语句)

目录 shell脚本概述 shell脚本编写步骤 第一个shell脚本文件 shell脚本变量 变量的介绍 变量的作用 变量的命名要求 变量的分类 用户自定义变量 取值 用户自定义变量-数组 只读变量 位置变量与预定义变量 环境变量 shell语句 shell程序 说明性语句&#xff08…

MATLAB连续时间信号的实现和时域基本运算(八)

1、实验目的&#xff1a; 1&#xff09;熟悉常用连续时间信号的实现方法&#xff1b; 2&#xff09;掌握连续时间信号的时域基本运算&#xff1b; 3&#xff09;掌握实现基本函数及其运算的函数的使用方法&#xff1b; 4&#xff09;加深对信号基本运算的理解。 2、实验内容&am…

【VM服务管家】VM4.0平台SDK_2.4 结果获取类

目录 2.4.1 数据结果&#xff1a;通过流程输出或模块输出获取数据结果的方法2.4.2 流程运行&#xff1a;所有流程运行结束的回调方法2.4.3 模块回调&#xff1a;所有模块运行结束的回调方法2.4.4 加密狗回调&#xff1a;获取加密狗状态的回调方法2.4.5 方案加载&#xff1a;方案…

STM32物联网实战开发(4)——基本定时器

我使用的是正点原子的阿波罗F429开发板&#xff0c;他有14个定时器&#xff0c;本次实验使用STM32F429的基本定时器6作定时&#xff0c;在中断中每隔1秒翻转LED电平状态。 1.CubeMX初始化定时器 先开启定时器6 再对定时器6的参数进行配置&#xff0c;将定时器6定时时间配置为…

记一次SSRF漏洞的学习和利用

导语&#xff1a;本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。 1.前言 本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。此漏洞并结合腾讯云的API接口&#xff0c;可以获取大量嘶吼服务器的敏感信息。利用这些敏感信息&#xff0c;又…

阿里测试8年,肝到P8只剩他了····

在阿里工作了8年&#xff0c;工作压力大&#xff0c;节奏快&#xff0c;但是从技术上确实得到了成长&#xff0c;尤其是当你维护与大促相关的系统的时候&#xff0c;熬到P7也费了不少心思&#xff0c;小编也是个爱学习的人&#xff0c;把这几年的工作经验整理成了一份完整的笔记…

玩转ChatGPT提示词 持续更新·······

导语&#xff1a; 众所周知&#xff0c;在AI的世界里&#xff0c;提示词就是和AI沟通语言的桥梁&#xff0c;提示关键词常用于AI对话及AI绘画等相关场景&#xff0c;通过准确的使用关键词&#xff0c;你就能更好的让AI辅助自己的工作&#xff0c;其中的成分重要性不言而喻&…

黑客教程,从零基础入门到精通

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解决. …

c++标准模板(STL)(std::array)(三)

定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起 std::array 是封装固定大小数组的容器。 此容器是一个聚合类型&#xff0c;其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组…

C#非常实用的技巧

1、解压和压缩 .NET Framework 4.5以上版本&#xff1a; string zipFilePath "C:\path\to\file.zip";string destFolder "C:\path\to\destination\folder";using (var archive ZipFile.OpenRead(zipFilePath)){foreach (var entry in archive.Entries…

【Python】【进阶篇】14、Django创建第一个项目

目录 Django创建第一个项目1. 第一个项目BookStore1) BookStore项目创建 2. Django项目配置文件1) manage.py文件2) __init__.py文件3) settings.py文件4) urls.py文件5) wsgi.py文件 Django创建第一个项目 在上一章中&#xff0c;我们完成了开发环境的搭建工作。 本章我们将学…

网络安全基础入门学习路线

在大多数的思维里总觉得学习网络安全得先收集资料、学习编程、学习计算机基础&#xff0c;这样不是不可以&#xff0c;但是这样学效率太低了&#xff01; 你要知道网络安全是一门技术&#xff0c;任何技术的学习一定是以实践为主的。也就是说很多的理论知识其实是可以在实践中…

【一起撸个DL框架】4 反向传播求梯度

CSDN个人主页&#xff1a;清风莫追 欢迎关注本专栏&#xff1a;《一起撸个DL框架》 文章目录 4 反向传播求梯度&#x1f965;4.1 简介4.2 导数与梯度4.3 链式法则4.4 示例&#xff1a;y2x1的梯度 4 反向传播求梯度&#x1f965; 4.1 简介 上一篇&#xff1a;【一起撸个DL框架】…

Python标准数据类型-String(字符串)

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础入门篇 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一座的高山…

MATLAB符号运算(七)

目录 1、实验目的&#xff1a; 2、实验内容&#xff1a; 1、实验目的&#xff1a; 1&#xff09;掌握定义符号对象和创建符号表达式的方法&#xff1b; 2&#xff09;掌握符号运算基本命令和规则&#xff1b; 3&#xff09;掌握符号表达式的运算法则以及符号矩阵运算&#xf…

大型Saas系统的权限体系设计(二)

X0 上期回顾 上文《大型Saas系统的权限体系设计(一)》提到2B的Saas系统的多层次权限体系设计的难题&#xff0c;即平台、平台的客户、客户的客户&#xff0c;乃至客户的客户的客户如何授权&#xff0c;这个可以通过“权限-角色-岗位”三级结构来实现。 但这个只是功能权限&am…

mac免费杀毒软件哪个好用?如何清理mac系统需要垃圾

CleanMyMac x是一款功能强大的Mac系统优化清理工具&#xff0c;使用旨在帮助用户更加方便的清理您系统中的所有垃圾&#xff0c;从而加快电脑运行速度&#xff0c;保持最佳性能&#xff0c;更加稳定、流畅、快速&#xff01;&#xff01;&#xff01; CleanMyMac X无疑是目前m…

C++内存管理基础

文章目录 前言1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. operator new与operator delete函数4.1 operator new与operator delete函数&#xff08;重点&#xff09; 5. new和delete的实现原理5.1…

hana odata batch

sap 博客有写 odata batch 处理前&#xff0c;先看一张图 In this blog post,we are going to see how to send a Odata Batch Request to the SAP Cloud for Customer system using POSTMAN Tool. Answers to expect from this post? How to use batch request in the POS…