如何在python中为一系列图创建标准颜色条

use*_*845 37 python matplotlib colorbar

我使用matplotlib在python中绘制一些数据,并且图表需要标准颜色条.数据由一系列包含频率信息的NxM矩阵组成,因此简单的imshow()图给出了描述频率的颜色的2D直方图.每个矩阵包含不同但重叠范围的数据.Imshow将每个矩阵中的数据归一化到0-1范围,这意味着,例如,矩阵A的图将看起来与矩阵2*A的图相同(尽管颜色条将显示两倍的值).我想要的是红色,例如,对应于所有图中的相同频率.换句话说,单个彩条就足以满足所有情节.任何建议将不胜感激.

Joe*_*ton 73

不要偷@ ianilis的答案,但我想补充一个例子......

有多种方法,但最简单的方法是指定vminvmaxkwargs imshow.或者,您可以创建一个matplotlib.cm.Colormap实例并指定它,但这比简单的情况更复杂.

以下是所有图像的单一颜色条的快速示例:

import numpy as np
import matplotlib.pyplot as plt

# Generate some data that where each slice has a different range
# (The overall range is from 0 to 2)
data = np.random.random((4,10,10))
data *= np.array([0.5, 1.0, 1.5, 2.0])[:,None,None]

# Plot each slice as an independent subplot
fig, axes = plt.subplots(nrows=2, ncols=2)
for dat, ax in zip(data, axes.flat):
    # The vmin and vmax arguments specify the color limits
    im = ax.imshow(dat, vmin=0, vmax=2)

# Make an axis for the colorbar on the right side
cax = fig.add_axes([0.9, 0.1, 0.03, 0.8])
fig.colorbar(im, cax=cax)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Chr*_*lis 9

最简单的解决方案是使用每个绘图的相同参数调用clim(lower_limit,upper_limit).

  • 或者只是将`vmin`和`vmax` kwargs传递给`imshow`. (5认同)