在 matplotlib 或 seaborn 中使轴不相等

Make axes unequal in matplotlib or seaborn

在 MATLAB 中,一位同事使用 surf 能够做出下面的 heatmap/surface。我一直在尝试在 matplotlibseaborn 中使用相同的数据生成图,但似乎找不到任何方法来制作 x 轴像 MATLAB 那样的不等空间。

有没有开箱即用的方法来确保我的 x 轴不会变得等距?

Seaborn 的热图(基于 matplotlib 的 imshow)总是创建分类轴。您可以使用 matplotlib 的 pcolorpcolormesh 为单元格边缘设置数字 x 和 y 值。

这是一个例子。请注意,与边的数量相比,数据值的数量在两个方向上都少了一个。

import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter
import numpy as np

np.random.seed(111)
xs = [-5, -3, -2, -1, -0.5, 0, 0.5, 1, 2, 3, 5]
ys = np.arange(1500, 5001, 500)
data = gaussian_filter(np.random.rand(len(ys) - 1, len(xs) - 1), 2)

fig, ax = plt.subplots()
ax.pcolor(xs, ys, data, cmap='inferno')
ax.set_xticks(xs)
ax.set_yticks(ys)
ax.grid(True, axis='both', color='skyblue')
plt.show()