多张热图的排版技巧
时间:2022-07-26
本文章向大家介绍多张热图的排版技巧,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
欢迎关注”生信修炼手册”!
当我们想要在一幅图中展示多个热图时,采用传统的一页多图的方式,会导致排版的混乱,第一个例子,同时展示两幅热图以及对应的图例,代码如下
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> np.random.seed(123456789)
>>> data = np.random.rand(25).reshape(5, 5)
>>> fig, (ax1, ax2) = plt.subplots(1, 2)
>>> im1 = ax1.imshow(data)
>>> im2 = ax2.imshow(data)
>>> plt.colorbar(im1, ax=ax1)
<matplotlib.colorbar.Colorbar object at 0x08C62490>
>>> plt.colorbar(im2, ax=ax2)
<matplotlib.colorbar.Colorbar object at 0x08C8B3A0>
>>> plt.show()
输出结果如下
可以看到,默认的宽高比情况下,图例的高度大大超过了热图的高度,这种情况相下,可以通过调节figure的宽高比来使得图形显示比例正常。第二个例子,还是显示两幅热图,但是这显示一个图例,代码如下
>>> fig, (ax1, ax2) = plt.subplots(1, 2)
>>> im1 = ax1.imshow(data)
>>> im2 = ax2.imshow(data)
>>> plt.colorbar(im2, ax=ax2)
<matplotlib.colorbar.Colorbar object at 0x0A0AB670>
>>> plt.show()
输出结果如下
此时排版同样很混乱,而且无法通过简单的调整输出图像的宽高比来解决问题。
对于多副热图的排版问题,在matplotlib中,可以通过ImageGrid方法来调节。在该方法中,支持以下两种图例显示模式
1. single
只显示一个图例,代码如下
>>> fig = plt.figure()
>>> grid = ImageGrid(fig, rect=(0.05,0.05,0.8,0.8),nrows_ncols=(1, 2), axes_pad=0.25, label_mode="1", cbar_location="right", cbar_mode="single")
>>> for ax in grid:
... im = ax.imshow(data)
...
>>> grid.cbar_axes[0].colorbar(im)
<matplotlib.colorbar.Colorbar object at 0x00F7A268>
>>> plt.show()
输出结果如下
2. each
每副热图对应一个图例,代码如下
>>> fig = plt.figure()
>>> grid = ImageGrid(fig, rect=(0.05,0.05,0.8,0.8),nrows_ncols=(1, 2), axes_pad=0.5, label_mode="1", cbar_location="right", cbar_mode="each", cbar_pad="3%")
>>> for ax, cax in zip(grid, grid.cbar_axes):
... im = ax.imshow(data)
... cax.colorbar(im)
...
<matplotlib.colorbar.Colorbar object at 0x08C405C8>
<matplotlib.colorbar.Colorbar object at 0x08C40C70>
>>> plt.show()
输出结果如下
通过ImageGrid,不仅可以解决图例的排版问题,还可以排版多副大小不一的热图,代码如下
>>> data1 = np.random.rand(50).reshape(5, 10)
>>> data2 = np.random.rand(30).reshape(5, 6)
>>> data3 = np.random.rand(20).reshape(5, 4)
>>> fig = plt.figure()
>>> grid = ImageGrid(fig, rect=(0.05,0.05,0.8,0.8),nrows_ncols=(1, 3), axes_pad=0.25, label_mode="1", cbar_location="right", cbar_mode="single", cbar_pad="3%")
>>> for ax, data in zip(grid, [data1, data2, data3]):
... im = ax.imshow(data)
...
>>> grid.cbar_axes[0].colorbar(im)
<matplotlib.colorbar.Colorbar object at 0x08BAB1D8>
>>> plt.show()
输出结果如下
对于多副热图的排版而言,通过ImageGrid可以大大提高处理的简便性。
·end·
—如果喜欢,快分享给你的朋友们吧—
原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!
- Android网络编程(十一)源码解析Retrofit
- android Material Design详解
- android EventBus详解(三)
- Android绘制优化(一)绘制性能分析
- android EventBus详解(二)
- [置顶] android EventBus详解(一)
- 开源组件photoView学习
- ViewPagerIndicator+viewpager指示器详解
- 实现去哪儿来回机票选择的view
- 解决水平ListView在ScrollView中出现的滑动冲突
- Android逆向分析(2) APK的打包与安装背后的故事
- Activity之间传递大数据问题
- React Native入门(二)Atom+Nuclide安装、配置与调试
- React Native入门(一)环境搭建与Hello World
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 项目要实现多数据源动态切换,咋搞?
- 这一次,带你全面了解锁机制!
- GitHub标星1w+超牛的微服务项目,开发脚手架
- Redis中hash、set、zset的底层数据结构原理
- Redis中string、list的底层数据结构原理
- Redis中字符串的表示
- Redis分布式锁背后的原理
- 解析Transformer模型
- 这5个常问的Redis面试题你答得出来吗?(详细剖析)
- 性能最佳实践:MongoDB索引
- Python基本数据类型-list-tuple-dict-set
- 深度学习应用的服务端部署
- MongoDB中的CURD操作
- 高可用的Redis主从复制集群,从理论到实践
- SpringBoot实战(一):使用Lombok简化你的代码