Python 多个热图子批次:同一个加热条

Python 多个热图子批次:同一个加热条,python,matplotlib,heatmap,Python,Matplotlib,Heatmap,以下是我绘制热图的方式: import matplotlib.pyplt as plt ax = plt.gca() im = ax.imshow(values) divider = make_axes_locatable(ax) cax = divider.append_axes("right", size='5%', pad=0.05) plt.colorbar(im, cax=cax) 现在我想创建一个2x2的子地块,有4个不同的热图,并且都有相同的热条。我完全不知道如何做到这一点,

以下是我绘制热图的方式:

import matplotlib.pyplt as plt 

ax = plt.gca()
im = ax.imshow(values)
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size='5%', pad=0.05)
plt.colorbar(im, cax=cax)
现在我想创建一个2x2的子地块,有4个不同的热图,并且都有相同的热条。我完全不知道如何做到这一点,我希望能朝着正确的方向前进

您可以使用。请参见示例(具体地说,请参见该示例中的函数
demo\u grid\u和\u single\u cbar

我已经稍微修改了这个例子,对于右边有颜色条的2x2网格

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid

# Some random data
values1 = np.random.rand(10,10)
values2 = np.random.rand(10,10)
values3 = np.random.rand(10,10)
values4 = np.random.rand(10,10)
vals = [values1,values2,values3,values4]

fig = plt.figure()

grid = AxesGrid(fig, 111,
                nrows_ncols=(2, 2),
                axes_pad=0.05,
                share_all=True,
                label_mode="L",
                cbar_location="right",
                cbar_mode="single",
                )

for val, ax in zip(vals,grid):
    im = ax.imshow(val, vmin=0, vmax=1)

grid.cbar_axes[0].colorbar(im)

for cax in grid.cbar_axes:
    cax.toggle_label(False)

plt.show()

不清楚您到底想要什么。具有4x4子地块的地物将有16个子地块,而不是4个子地块。你是说2x2的安排吗?为什么要使用相同的分隔符?它们应该有相同的颜色条,还是4个(或16个)单独的颜色条?@tom Yes,2x2。它们都应该具有相同的颜色栏,因为它们具有来自相同域的数字。因此也只有一个分隔符(否则会重复)。@tom也许我现在注意到了混乱。所谓“一个分隔符”,我指的是那些用数字标记颜色的条之一。也许这就是颜色条-我以为它只是双射数->颜色,而不是可视化。。我在查什么是什么。是的,我想你是说一个色条。分割器只是
matplotlib
中的一种方法,用于帮助分割轴(例如,添加颜色条)。请看我的答案,我认为它符合您的要求。我认为这个答案是错误的,至少在更新版本的matplotlib中是这样。如果我在代码中插入值1=[[0.0,0.1],[0.2,0.3]]values2=[[0.35,0.36],[0.37,0.38]]values3=[[0.4,0.5],[0.6,0.7]]values4=[1.0,0.9],[0.8,0.75]]值(请注意,值4中的最小值高于值1中的最大值),很明显,加热条只属于最后一个图形:[![热图][1][1][1]:既然你的答案被接受了…我应该再问一次这个问题吗?你只需要在调用
imshow
时添加
vmin
vmax
,以确保所有绘图使用相同的缩放比例。这里的示例没有错,只是所有四个子绘图都具有相同的最小/最大值,因此与使用cas不同e、 感谢您的解释!但是,从技术上讲,四个
np.random.rand(10,10)
数组也不在同一范围内:)