如何使用 Matplotlib 的 "imshow" 沿行方向缩放热图中的值?

How to scale values in the heamap in row direction using Matplotlib's "imshow"?

是否有类似 R 的功能(heatmap(x, scale="row",..)来缩放 Matplotlib 中行方向的值?

-- 当前代码 ---

im = ax_heatmap.imshow(z, aspect='auto', cmap=cmap, interpolation='nearest')

有一个 post 提到使用 vmin 和 vmax 参数缩放,但它没有讨论如何在特定方向(行或列)缩放。

您必须自己进行标准化。如果绘图库为您完成,那么在所有情况下都获得正确的颜色条将很困难。

import numpy as np
import matplotlib.pyplot as plt


shifts = np.linspace(1, 50, 25)[:, np.newaxis]
x = np.arange(50)[np.newaxis, :]
data = np.exp(-(x - shifts)**2 / 50) * shifts

fig, (ax1, ax2) = plt.subplots(2, 1)

im1 = ax1.imshow(data, interpolation='none', cmap='viridis')
fig.colorbar(im1, ax=ax1, label='raw values')

norm_data = (data - np.min(data, axis=1)[:, np.newaxis]) / np.ptp(data, axis=1)[:, np.newaxis]
im2 = ax2.imshow(norm_data, interpolation='none', cmap='viridis')
fig.colorbar(im2, ax=ax2, label='normalized by row')