Python 科研绘图可视化(后处理)Matplotlib - 2D彩图

Introduction

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

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

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

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

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

博主之前分享的案例

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

Color mapped data

通常我们希望在一个图中用颜色映射来表示第三个维度(第一个、第二个维度是xy轴)。Matplotlib 有许多绘图类型可以做到这一点:pcolormesh(); contourf(); imshow()

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

data1, data2, data3, data4 = np.random.randn(4, 100)  # make 4 random data sets

X, Y = np.meshgrid(np.linspace(-3, 3, 128), np.linspace(-3, 3, 128))
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)

fig, axs = plt.subplots(2, 2, layout='constrained')
pc = axs[0, 0].pcolormesh(X, Y, Z, vmin=-1, vmax=1, cmap='RdBu_r')
fig.colorbar(pc, ax=axs[0, 0])
axs[0, 0].set_title('pcolormesh()')

co = axs[0, 1].contourf(X, Y, Z, levels=np.linspace(-1.25, 1.25, 11))
fig.colorbar(co, ax=axs[0, 1])
axs[0, 1].set_title('contourf()')

pc = axs[1, 0].imshow(Z**2 * 100, cmap='plasma',
                          norm=mpl.colors.LogNorm(vmin=0.01, vmax=100))
fig.colorbar(pc, ax=axs[1, 0], extend='both')
axs[1, 0].set_title('imshow() with LogNorm()')

pc = axs[1, 1].scatter(data1, data2, c=data3, cmap='RdBu_r')
fig.colorbar(pc, ax=axs[1, 1], extend='both')
axs[1, 1].set_title('scatter()')

这段代码演示了如何使用 Matplotlib 绘制不同类型的二维图形,并添加 colorbar。

首先,导入了必要的模块和库,包括 matplotlib.pyplotnumpymatplotlib

然后,使用 numpy.random.randn 函数生成了 4 个包含 100 个随机数的数据集。接下来,使用 numpy.meshgrid 函数生成了 X 和 Y 坐标网格,并使用这些坐标生成了一个 Z 值的函数。这些数据将用于绘制不同类型的二维图形。

接下来,使用 plt.subplots 函数创建了一个大小为 2x2 的图像网格,并在每个子图中使用不同的函数绘制二维图形,并添加了 colorbar。

在第一个子图中,使用 ax.pcolormesh 函数绘制了一个二维网格,并使用 fig.colorbar 函数添加了一个 colorbar。在第二个子图中,使用 ax.contourf 函数绘制了一个等高线图,并添加了一个 colorbar。在第三个子图中,使用 ax.imshow 函数绘制了一个图像,并使用 mpl.colors.LogNorm 函数设置了颜色的标准化,然后添加了一个 colorbar。在第四个子图中,使用 ax.scatter 函数绘制了一个散点图,并使用 fig.colorbar 函数添加了一个 colorbar。

最后,使用 ax.set_title 函数为每个子图添加了标题。

Demo Axes Grid

每个简单的图像添加colorbar,可以根据这个算例复杂化。
主要基于matplotlib的mpl_toolkits.axes_grid1这个工具包做的,前面有篇博文也是专门用这个工具包。Python 科研绘图可视化(后处理)Matplotlib - RGBAxes

from matplotlib import cbook
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid

Z = cbook.get_sample_data(  # (15, 15) array
    "axes_grid/bivariate_normal.npy", np_load=True)
extent = (-3, 4, -4, 3)

fig = plt.figure(figsize=(10.5, 2.5))
fig.subplots_adjust(left=0.05, right=0.95)

# A grid of 2x2 images with 0.05 inch pad between images and only the
# lower-left axes is labeled.
grid = ImageGrid(
    fig, 141,  # similar to fig.add_subplot(141).
     nrows_ncols=(2, 2), axes_pad=0.05, label_mode="1")
for ax in grid:
    ax.imshow(Z, extent=extent)
# This only affects axes in first column and second row as share_all=False.
grid.axes_llc.set_xticks([-2, 0, 2])
grid.axes_llc.set_yticks([-2, 0, 2])

# A grid of 2x2 images with a single colorbar
grid = ImageGrid(
    fig, 142,  # similar to fig.add_subplot(142).
    nrows_ncols=(2, 2), axes_pad=0.0, label_mode="L", share_all=True,
    cbar_location="top", cbar_mode="single")
for ax in grid:
    im = ax.imshow(Z, extent=extent)
grid.cbar_axes[0].colorbar(im)
for cax in grid.cbar_axes:
    cax.toggle_label(False)
# This affects all axes as share_all = True.
grid.axes_llc.set_xticks([-2, 0, 2])
grid.axes_llc.set_yticks([-2, 0, 2])

# A grid of 2x2 images. Each image has its own colorbar.
grid = ImageGrid(
    fig, 143,  # similar to fig.add_subplot(143).
    nrows_ncols=(2, 2), axes_pad=0.1, label_mode="1", share_all=True,
    cbar_location="top", cbar_mode="each", cbar_size="7%", cbar_pad="2%")
for ax, cax in zip(grid, grid.cbar_axes):
    im = ax.imshow(Z, extent=extent)
    cax.colorbar(im)
    cax.toggle_label(False)
# This affects all axes because we set share_all = True.
grid.axes_llc.set_xticks([-2, 0, 2])
grid.axes_llc.set_yticks([-2, 0, 2])

# A grid of 2x2 images. Each image has its own colorbar.
grid = ImageGrid(
    fig, 144,  # similar to fig.add_subplot(144).
    nrows_ncols=(2, 2), axes_pad=(0.45, 0.15), label_mode="1", share_all=True,
    cbar_location="right", cbar_mode="each", cbar_size="7%", cbar_pad="2%")
# Use a different colorbar range every time
limits = ((0, 1), (-2, 2), (-1.7, 1.4), (-1.5, 1))
for ax, cax, vlim in zip(grid, grid.cbar_axes, limits):
    im = ax.imshow(Z, extent=extent, vmin=vlim[0], vmax=vlim[1])
    cb = cax.colorbar(im)
    cb.set_ticks((vlim[0], vlim[1]))
# This affects all axes because we set share_all = True.
grid.axes_llc.set_xticks([-2, 0, 2])
grid.axes_llc.set_yticks([-2, 0, 2])

plt.show()

这段代码展示了如何使用 Matplotlib 的 ImageGrid 类来创建一个带有子图和颜色条的图像。首先,代码从 matplotlib 包中导入了 cbook 模块,从 matplotlib.pyplot 导入了 plt 模块,以及从 mpl_toolkits.axes_grid1 导入了 ImageGrid 类。

接下来,代码使用 cbook.get_sample_data 函数读取一个二维数组 Z,并定义了 extent 变量。然后,代码创建了一个 2x2 的子图布局,并在四个子图中分别绘制了 Z 的热图。第一个子图中使用 label_mode="1" 参数来只显示左下角的坐标轴。第二个子图中使用 cbar_mode="single" 参数来添加一个共享的颜色条,且颜色条位置在顶部。第三个子图中使用 cbar_mode="each" 参数来为每个子图都添加一个颜色条,颜色条位置仍在顶部。第四个子图中使用 cbar_location="right" 参数将颜色条位置放在右侧,同时使用 vminvmax 参数来设置不同的颜色条范围。

每行 or 每列 colorbars

这个例子显示了如何为图像网格的每一行或每一列使用一个colorbar。

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


def get_demo_image():
    z = cbook.get_sample_data("axes_grid/bivariate_normal.npy", np_load=True)
    # z is a numpy array of 15x15
    return z, (-3, 4, -4, 3)


def demo_bottom_cbar(fig):
    """
    A grid of 2x2 images with a colorbar for each column.
    """
    grid = AxesGrid(fig, 121,  # similar to subplot(121)
                    nrows_ncols=(2, 2),
                    axes_pad=0.10,
                    share_all=True,
                    label_mode="1",
                    cbar_location="bottom",
                    cbar_mode="edge",
                    cbar_pad=0.25,
                    cbar_size="15%",
                    direction="column"
                    )

    Z, extent = get_demo_image()
    cmaps = ["autumn", "summer"]
    for i in range(4):
        im = grid[i].imshow(Z, extent=extent, cmap=cmaps[i//2])
        if i % 2:
            grid.cbar_axes[i//2].colorbar(im)

    for cax in grid.cbar_axes:
        cax.toggle_label(True)
        cax.axis[cax.orientation].set_label("Bar")

    # This affects all axes as share_all = True.
    grid.axes_llc.set_xticks([-2, 0, 2])
    grid.axes_llc.set_yticks([-2, 0, 2])


def demo_right_cbar(fig):
    """
    A grid of 2x2 images. Each row has its own colorbar.
    """
    grid = AxesGrid(fig, 122,  # similar to subplot(122)
                    nrows_ncols=(2, 2),
                    axes_pad=0.10,
                    label_mode="1",
                    share_all=True,
                    cbar_location="right",
                    cbar_mode="edge",
                    cbar_size="7%",
                    cbar_pad="2%",
                    )
    Z, extent = get_demo_image()
    cmaps = ["spring", "winter"]
    for i in range(4):
        im = grid[i].imshow(Z, extent=extent, cmap=cmaps[i//2])
        if i % 2:
            grid.cbar_axes[i//2].colorbar(im)

    for cax in grid.cbar_axes:
        cax.toggle_label(True)
        cax.axis[cax.orientation].set_label('Foo')

    # This affects all axes because we set share_all = True.
    grid.axes_llc.set_xticks([-2, 0, 2])
    grid.axes_llc.set_yticks([-2, 0, 2])


fig = plt.figure(figsize=(5.5, 2.5))
fig.subplots_adjust(left=0.05, right=0.93)

demo_bottom_cbar(fig)
demo_right_cbar(fig)

plt.show()

这段代码展示了如何使用 Matplotlib 的 AxesGrid 类来创建一个带有子图和颜色条的图像。首先,代码从 matplotlib 包中导入了 cbook 模块,从 matplotlib.pyplot 导入了 plt 模块,以及从 mpl_toolkits.axes_grid1 导入了 AxesGrid 类。

接下来,代码定义了一个函数 get_demo_image,用于获取示例图像数据和坐标范围。然后,代码定义了两个函数 demo_bottom_cbardemo_right_cbar,分别演示了如何在网格布局中添加底部和右侧的颜色条。

demo_bottom_cbar 函数中,代码创建了一个 2x2 的子图布局,并在每一列中绘制了一个热图。使用 cbar_mode="edge" 参数来添加颜色条,使用 cbar_location="bottom" 参数将颜色条放在底部,且颜色条方向为纵向。使用 share_all=True 参数来共享所有子图的坐标轴。最后,代码添加了标签和刻度,并在底部的颜色条上添加了标签。

demo_right_cbar 函数中,代码创建了一个 2x2 的子图布局,并在每一行中绘制了一个热图。使用 cbar_mode="edge" 参数来添加颜色条,使用 cbar_location="right" 参数将颜色条放在右侧,且颜色条方向为横向。使用 share_all=True 参数来共享所有子图的坐标轴。最后,代码添加了标签和刻度,并在右侧的颜色条上添加了标签。

最后,代码创建了一个新的 Figure 对象,并调用 demo_bottom_cbardemo_right_cbar 函数来绘制子图和颜色条。最后,代码调用 plt.show() 来显示图像。

Reference

Matplotlib 3.7.1 documentation

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++类和对象再探

文章目录 const成员再谈构造函数成员变量的定义函数体内赋值初始化列表 隐式类型转换explicitstatic成员 const成员 我们知道在调用类的成员函数时,会有一个默认的this指针且这个this指针时不可以被修改的,例如在日期类中,会有隐式的Date * const this;注意这里默认会在this前…

一五一、web+小程序骨架屏整理

骨架屏介绍 请点击查看智能小程序骨架屏 车载小程序骨架屏 车载小程序为方便开发者设置骨架屏,在智能小程序的基础上抽取出骨架屏模板,开发者只需要在 skeleton 文件夹下配置config.json(page 和骨架屏的映射关系文件)即可生效骨…

第十四届蓝桥杯青少组模拟赛Python真题 (2022年11月8日)

第十四届蓝桥杯青少组模拟赛Python真题 (2022年11月8日) 编程题 第 1 题 问答题 二进制位数 十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。 十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。 请问十进制整数2022在二进制中是几位数? 第2题问…

Pr 拍立得风格图片展示

哈喽,各位小伙伴!今天我们来学习一下如何制作拍立得风格的照片展示效果? 新建三个序列 在开始之前,我们需要新建三个序列 序列1:总合成-尺寸1902*1080序列2:照片合成-尺寸1920*1080序列3:照片…

自动驾驶TPM技术杂谈 ———— I-vista验收标准(试验规程)

文章目录 术语介绍试验准备场地要求环境要求精度要求边界车辆&路沿石 试验方法能力试验双边界车辆平行车位白色标线平行车位双边界车辆垂直车位白色标线垂直车位方柱垂直车位双边界车辆斜向车位白色标线斜向车位 新功能评价平行车位远程操控泊入泊出试验垂直车位远程操控泊…

能伸展脖子的机器人?东京大学最新研究成果:基于鸵鸟肌肉骨骼结构和行为,具有高度灵活性的新型机械臂—RobOstrich(附论文)

原创 | 文 BFT机器人 得益于高度灵活的颈部,鸟类可以做很多事情,无论是转过头梳理自己的后背,在飞行过程中“眼观六路”,还是在地面或树上难以触及的角落和缝隙寻找食物。而在所有鸟类中,鸵鸟以其结实灵巧的颈部脱颖而…

​ NISP一级备考知识总结之信息安全概述、信息安全基础

参加每年的大学生网络安全精英赛通过初赛就可以嫖一张 nisp(国家信息安全水平考试) 一级证书,nisp 一级本身没啥考的价值,能白嫖自然很香 1.信息安全概述 信息与信息技术 信息概述 信息奠基人香农认为:信息是用来消…

【Linux】如何实现单机版QQ,来看进程间通信之管道

学会了管道,就可以实现简单的qq哦~ 文章目录 前言一、匿名管道总结 前言 为什么要进行进程间通信呢?因为需要以下这些事: 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 …

ChatGPT实现旅行安排

工作之余,出门旅行一趟放松放松身心,是对自己辛勤工作最好的犒劳方式之一。旅行可以近郊游、可以远游,可以穷游,可以自驾游,可以一言不合打飞的喂鸽子,方式多种多样。但是多数情况,我们是到一个…

论文解析-基于 Unity3D 游戏人工智能的研究与应用

1.重写 AgentAction 方法 1.1 重写 AgentAction 方法 这段代码是一个重写了 AgentAction 方法的方法。以下是对每行代码解释: ①public override void AgentAction(float[] vectorAction) 这行代码声明了一个公共的、重写了父类的 AgentAction 方法的方法。它接受…

Java版本工程管理系统源码企业工程项目管理系统简介

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…

Vue收集表单数据和过滤器

目录 收集表单数据 收集表单数据总结 过滤器 过滤器小结 收集表单数据 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!--vue--><script src"https://cdn.sta…

C++ ---- 类和对象(下)

目录 初始化列表 初始化列表的语法 初始化列表的特性 explicit关键字 构造函数的隐式转换 explicit的作用 static修饰成员变量和成员函数 static修饰成员变量 static修饰成员函数 友元 友元函数 友元类 内部类 匿名对象 拷贝对象时的一些编译器优化 初始化列表 …

Kibana 的安装

1. 简介 Kibana 是一个开源的分析与可视化平台&#xff0c;可以用 Kibana 搜索、查看存放在 Elasticsearch 中的数据&#xff0c;就跟谷歌的 elasticsearch head 插件类似&#xff0c;但 Kibana 与 Elasticsearch 的交互方式是各种不同的图表、表格、地图等&#xff0c;直观的…

超稳定ChatGPT镜像网站,小白适用,赶紧收藏【持续更新中】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

Redis修炼 (15. redis的持久化-RDB)

RDB 就是 redis database backup file 数据备份文件 就是把内存中的所有数据都保存在磁盘中。 save 注意这个保存过程是主进程在做 因为redis 是单线程 所有其他所有请求都会被卡死。 bgsave 这个稍微友好一点 是子进程 执行&#xff0c;避免主进程收到影响。 redis在服务停机…

母亲节快到了,祝所有母亲节日快乐!Happy Mother‘s Day

《游子吟》唐孟郊 慈母手中线&#xff0c;游子身上衣。 临行密密缝&#xff0c;意恐迟迟归。 谁言寸草心&#xff0c;报得三春晖。 My kind mother has a needle and thread in her hand,Making new clothes for her son who is to travel far away. She is busy sewing c…

【Pandas与SQL系列】Pandas实现分布函数percent_rank、cume_dist

目录 1&#xff0c;分布函数,1.1&#xff0c;percent_rank()1.2&#xff0c;cume_dist()1.3 SQL例子 2&#xff0c;Pandas 实现3&#xff0c;补充Pandas实现排序 1&#xff0c;分布函数, 应用场景&#xff1a;快速查看某个记录所归属的组内的比例 分布函数分类及基础语法&…

Kali-linux系统指纹识别

现在一些便携式计算机操作系统使用指纹识别来验证密码进行登录。指纹识别是识别系统的一个典型模式&#xff0c;包括指纹图像获取、处理、特征提取和对等模块。如果要做渗透测试&#xff0c;需要了解要渗透测试的操作系统的类型才可以。本节将介绍使用Nmap工具测试正在运行的主…

图像处理:高斯滤波算法

目录 前言 概念介绍 基本原理 卷积核的大小 卷积核的形状和权重比 卷积核的归一化 结论 Opencv实现高斯滤波 Python手写实现高斯滤波 参考文章 前言 在此之前&#xff0c;我曾在此篇中推导过图像处理&#xff1a;推导五种滤波算法&#xff08;均值、中值、高斯、双边…