本文主要是介绍matplotlib多个子图共用一个colorbar,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- colorbar
- 共用colorbar
- 布局colorbar
colorbar
matplotlib默认提供的功能是,在多个子图中分别生成colorbar,例如
import numpy as np
import matplotlib.pyplot as pltfig = plt.figure()
for i in range(2):ax = fig.add_subplot(2,1,i+1)ax = plt.pcolormesh(np.random.rand(10,20))plt.colorbar()plt.show()
其中plt.colorbar就是生成色条的函数,默认放置在当前活动坐标系的右侧。
由于上下两张图采用了相同的伪彩映射,所以这两个色条有些重复了,为了让图像更加简洁,从而产生了一张图一个色条的需求。
共用colorbar
下面新建一个坐标轴,以单独设置色条位置
fig = plt.figure()
for i in range(2):ax = fig.add_subplot(2,1,i+1)im = plt.pcolormesh(np.random.rand(10,20))plt.axis('off')# 指定colorbar的位置和大小
cax = fig.add_axes([0.92, 0.1, 0.02, 0.8])
fig.colorbar(im, cax=cax)
plt.show()
其中cax是通过add_axes函数新创建的一个坐标轴,其参数是坐标范围[left, bottom, width, height],即左侧、底部的坐标,以及宽度和高度。效果如下
这种处理方法有一个问题,即colorbar所在坐标系将无法控制,如果使用tight_layout来进行紧凑布局,那么左侧的图像会忽视色条铺满整个区域。
布局colorbar
为了让色条可以在布局中维持不变,可通过GridSpec来进一步定制布局网格,有关GridSpec的详细解读,可参考:matplotlib复杂子图布局
gs = plt.GridSpec(2, 2, width_ratios=[15, 1], height_ratios=[1, 1])plt.subplot(gs[0, 0])
plt.title("A")
im = plt.pcolormesh(np.random.rand(10,20))
plt.axis('off')plt.subplot(gs[1, 0])
plt.title("B")
im = plt.pcolormesh(np.random.rand(10,20))
plt.axis('off')ax = plt.subplot(gs[:, 1])
fig.colorbar(im, cax=ax)
plt.show()
其中,width_ratios为横向的单元格宽度比例,height_ratios为纵向的单元格高度比例。绘图结果如下,这样一来,无论布局如何发生变化,左侧图形与右侧色条的宽度比值均为15:1,不会发生变化,从而在图像绘制时保证了风格的统一。如果觉得颜色调的尺寸有些过宽,可以继续缩小色条所占绘图区域的比例。
这篇关于matplotlib多个子图共用一个colorbar的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!