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

news2024/11/26 22:36:39

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

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

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

相关文章

制造策略 ETO、MTO、ATO、MTS

ETO 按交货周期跨度从长到短来讲,首先就是 ETO,Engineer To Order – 面向订单设计、定制生产或特殊生产。 就是客户给的订单,你要生产的话,你之前的原产品改动很大,或者基本上用不上,要完全按照客户的要求…

虚机制

一、虚机制的引入 利用动态编联实现——虚函数来解决上述问题 二、虚函数 必须是实例方法,不能是类方法。 若基类中析构函数为虚函数,则派生类中的析构函数不论写不写virtual关键字都是虚函数。派生类中新的虚函数应尽量避免与基类中的虚函数重名。 三、…

java基础知识——24.泛型

这篇文章我们来讲一下java的泛型 目录 1.什么是泛型 1.1 泛型的概念 1.2 泛型的好处 1.3 粗看泛型集合的源码 2.泛型类 2.1 泛型类的定义 2.2 从泛型类派生子类 3.泛型接口 4.泛型方法 5.类型通配符 5.1类型通配符上限 5.2 类型通配符的下限 6.类型擦除 6.1无限…

HTML(三) -- 表单设计

目录 1. 基本语法 2. 表单控件 2.1 input控件 input 常用属性: input type的表单项: 2.2 select 控件 2.3 textarea控件 2.4 label 控件 为什么需要表单? 在我们网页中, 无论是提交搜索的信息,还是网上注…

线程池核心线程是如何保持住的?

概述 本文尝试回答以下几个问题: 1、核心线程池是如何保持住的? 2、当没有任务时,超过核心线程数的线程是如何回收的? 3、线程队列为什么必须是BlockingQueue,普通队列行不行? 背景知识 以下是一些背景知…

第十三章 移动和旋转(上)

移动和旋转是游戏对象最频繁地操作。我们上个章节简单介绍了Cube的移动和旋转。移动是修改transform的position属性,旋转是修改transform的eulerAngles(欧拉角)属性,两者属性值均可以使用Vector3向量来实现。需要大家注意的是&…

C#窗体将DGV控件中数据导入导出Excel表

目录 界面图: 效果视频: 一:将DGV数据导出到Excel表中 二:将Excel表数据导入到DGV中 三:界面全部代码 界面图: 效果视频: DGV数据导入导出Excel 一:将DGV数据导出到Excel表中 p…

私人影院 - 本地搭建Emby媒体库服务器并在外远程访问 「无需公网IP」

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…

用ChatGPT问DotNet的相关问题,发现DotNet工程师的前景还不错

本人最近费了九牛二虎之力注册了一个ChatGPT账号,现在就给大家分享一下,问一下关于.NET的问题,看看ChatGPT的AI功能具体如何? 一、C#跟其它语言比较的优势 回答: C#是一门编程语言,它是为 Microsoft 的 …

【Linux】动态库与静态库

目录 一、前言 二、静态库与动态库 三、生成静态库 1、生成原理 2、完整过程 3、总结 四、生成动态库 1、环境变量 2、建立软链接 3、配置文件 五、动态库的加载 1、动态库加载的过程 2、动态库地址的理解 3、补充内容 一、前言 关于动态库与静态库的一小部分前置…

TCP的粘包和拆包

UDP有数据边界,TCP是没有数据边界,是流协议。如何拆包,就要靠应用层来处理。 四层网络模型,消息在进入每一层时都会多加一个报头。mac头部记录的是硬件的唯一地址,IP头记录的是从哪来和到哪去,传输层头记录…

GPT 护理机器人 - 让护士的工作变简单

引子    书接上文《GPT接入企微应用 - 让工作快乐起来》,我把GPT接入了企微应用,不少同事都开始尝试起来了。有的浅尝辄止,有的刨根问底,五花八门,无所不有。这里摘抄几份: “帮我写一份表白信&#xff…

Github 的使用

3. Github 在版本控制系统中,大约90%的操作都是在本地仓库中进行的:暂存,提交,查看状态或者历史记录等等。除此之外,如果仅仅只有你一个人在这个项目里工作,你永远没有机会需要设置一个远程仓库。只有当你…

嗯,这个树怎么和往常不一样?

文章目录 前言一、二叉树的链式存储二、二叉树链式结构的实现二叉树的结构设计手动构建二叉树二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历二叉树的层序遍历计算二叉树大小计算叶子节点个数计算二叉树高度计算第K层的节点个数查找某个值对应的节点二叉树的销毁 三、完整代…

全球首个存量手机直连卫星天地语音通话,打通了!

4月25日,美国卫星通信初创公司——AST SpaceMobile,宣布打通了全球首个天基蜂窝语音通话。 对于卫星通信乃至整个通信行业来说,这是一个重大新闻,非常值得关注。 去年,我们还只是实现了手机和卫星之间的双向短消息通信…

Page管理机制

Page页分类 Buffer Pool 的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可以减少磁盘IO操作,提升效率 Page根据状态可以分为三种类型: - free page : 空闲page,未被使用 - …

1.3 HBase 基本架构

架构角色: 1)Master 实现类为 HMaster,负责监控集群中所有的 RegionServer 实例。主要作用如下: (1)管理元数据表格 hbase:meta,接收用户对表格创建修改删除的命令并执行 (2&#x…

【C++ Primer(第5版) 课后习题题目及答案 第一章】

C Primer5th 课后习题答案 第一章 1.1:查阅你使用的编译器的文档,确定它所使用的文件命名约定。编译并运行main程序。1.2:改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系…

C#弹出消息对话框,增加输入框,接受输入信息

效果图: 代码: using Microsoft.VisualBasic;string intext Interaction.InputBox("请输入密码","输入密码","",Screen.PrimaryScreen.Bounds.Width/4,Screen.PrimaryScreen.Bounds.Height/4);MessageBox.Show("in…

多商户商城系统开发功能有哪些?

多商户商城系统开发功能有哪些? 1、商品管理。商品管理是多商户商城系统的必备功能。商家需要能够轻松地添加、修改和删除商品。这个功能还应该包括商品图片、价格、描述和库存等信息的管理。消费者也需要能够通过小程序浏览商品并下订单。 2、订单管…