在 matplotlib 或 seaborn 中使轴不相等
Make axes unequal in matplotlib or seaborn
在 MATLAB 中,一位同事使用 surf
能够做出下面的 heatmap/surface。我一直在尝试在 matplotlib 和 seaborn 中使用相同的数据生成图,但似乎找不到任何方法来制作 x 轴像 MATLAB 那样的不等空间。
有没有开箱即用的方法来确保我的 x 轴不会变得等距?
Seaborn 的热图(基于 matplotlib 的 imshow
)总是创建分类轴。您可以使用 matplotlib 的 pcolor
或 pcolormesh
为单元格边缘设置数字 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()
在 MATLAB 中,一位同事使用 surf
能够做出下面的 heatmap/surface。我一直在尝试在 matplotlib 和 seaborn 中使用相同的数据生成图,但似乎找不到任何方法来制作 x 轴像 MATLAB 那样的不等空间。
有没有开箱即用的方法来确保我的 x 轴不会变得等距?
Seaborn 的热图(基于 matplotlib 的 imshow
)总是创建分类轴。您可以使用 matplotlib 的 pcolor
或 pcolormesh
为单元格边缘设置数字 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()