使用 xarray (pcolormesh) 绘制 2D 数据,同时保持纵横比

use*_*164 5 python matplotlib python-xarray

我正在尝试使用 xarray (使用matplotlib.pcolormesh)绘制二维数据集,同时保持数据的自然纵横比。

例子:

import xarray as xr
import matplotlib.pyplot as plt

plt.close('all')
data = xr.DataArray(np.random.randn(2, 3), dims=('x', 'y'),coords={'x': [10, 20],'y' : [0,50,100]})
data.plot() # Will produce a square plot
Run Code Online (Sandbox Code Playgroud)

结果是

添加plt.gca().set_aspect('equal')确实以我想要的方式缩放绘图,但是,颜色条的高度没有改变

使用参数sizeaspect、 或figsize也没有帮助。对于上面的例子:

data.plot(size=6, aspect=150 / 30. * 6)
Run Code Online (Sandbox Code Playgroud)

(或具有相同的结果data.plot(figsize=(150 / 30. * 6,6))

哪个更好,但仍然关闭(也许是由于颜色条?)。

ast*_*iko 5

/以及参数size都会影响图形的大小,而不是轴的大小。轴的纵横比在一定程度上受这些参数的影响,但很难精确控制。例如,正如您所指出的,颜色条也会占用一些空间,因此轴的宽度会更小。aspectfigsize

我会推荐以下内容:

ax = data.plot(figsize=(18, 2))
# Alternatively
# ax = data.plot(size=2, aspect=9)
ax.axes.set_aspect('equal')
Run Code Online (Sandbox Code Playgroud)

第二行确保轴具有正确的纵横比(就像您第一次尝试一样)。如果您没有另外指定图形尺寸,则将从默认参数确定图形尺寸。问题是默认的图形大小与您的实际数据纵横比不太适合。因此,轴必须非常小才能适合默认宽度。

您可以通过提供与数据纵横比大致匹配的图形大小(在您的情况下为 7.5)来解决此问题。对我来说,如果您选择的图形长宽比比数据长宽比稍大一点,以便为颜色条提供一些空间,看起来效果最好。