使用 xarray (pcolormesh) 绘制 2D 数据,同时保持纵横比
Plot 2D data with xarray (pcolormesh) while keeping aspect ratio
我正在尝试使用 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
结果是
添加 plt.gca().set_aspect('equal')
确实可以按我想要的方式缩放绘图,但是,颜色条的高度不变,从而产生
使用参数 size
、aspect
或 figsize
也无济于事。
对于上面的例子:
data.plot(size=6, aspect=150 / 30. * 6)
(或结果相同data.plot(figsize=(150 / 30. * 6,6))
)
哪个更好但仍然关闭(可能是因为颜色条?)。
size
/aspect
和 figsize
参数都会影响图形的大小,而不是轴的大小。
轴的纵横比在某种程度上受到这些参数的影响,但很难准确控制。例如,正如您所指出的,颜色条也会占用一些 space 以便轴的宽度更小。
我会推荐以下内容:
ax = data.plot(figsize=(18, 2))
# Alternatively
# ax = data.plot(size=2, aspect=9)
ax.axes.set_aspect('equal')
第二行确保轴具有正确的纵横比(就像您第一次尝试时一样)。
如果您不另外指定图形大小,它将由默认参数确定。问题是默认的图形大小与您的实际数据纵横比不太吻合。因此,轴必须非常小才能适应默认宽度。
您可以通过提供大致匹配数据纵横比(在您的情况下为 7.5)的图形大小来解决此问题。
对我来说,如果你选择比数据纵横比大一点的图形纵横比来给颜色条一些 space.
看起来最好
我正在尝试使用 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
结果是
添加 plt.gca().set_aspect('equal')
确实可以按我想要的方式缩放绘图,但是,颜色条的高度不变,从而产生
使用参数 size
、aspect
或 figsize
也无济于事。
对于上面的例子:
data.plot(size=6, aspect=150 / 30. * 6)
(或结果相同data.plot(figsize=(150 / 30. * 6,6))
)
哪个更好但仍然关闭(可能是因为颜色条?)。
size
/aspect
和 figsize
参数都会影响图形的大小,而不是轴的大小。
轴的纵横比在某种程度上受到这些参数的影响,但很难准确控制。例如,正如您所指出的,颜色条也会占用一些 space 以便轴的宽度更小。
我会推荐以下内容:
ax = data.plot(figsize=(18, 2))
# Alternatively
# ax = data.plot(size=2, aspect=9)
ax.axes.set_aspect('equal')
第二行确保轴具有正确的纵横比(就像您第一次尝试时一样)。 如果您不另外指定图形大小,它将由默认参数确定。问题是默认的图形大小与您的实际数据纵横比不太吻合。因此,轴必须非常小才能适应默认宽度。
您可以通过提供大致匹配数据纵横比(在您的情况下为 7.5)的图形大小来解决此问题。 对我来说,如果你选择比数据纵横比大一点的图形纵横比来给颜色条一些 space.
看起来最好