【问题标题】:Plotting two figures from two xarrays side by side并排绘制来自两个 xarray 的两个图形
【发布时间】:2019-10-19 08:26:39
【问题描述】:

我正在尝试并排绘制两个子图。 每个子图都是来自 xarray 的变量,而图是投影。

我的绘图功能是:

from matplotlib import pyplot as plt
import cartopy.crs as ccrs
import cartopy

def plot_avg(data, **kwargs):


    ax = plt.axes(projection=ccrs.Orthographic(central_latitude=-90.0))

    ax.coastlines(resolution='10m',zorder=3)
    ax.gridlines(color='gray')
    ax.add_feature(cartopy.feature.LAND, zorder=1,facecolor=cartopy.feature.COLORS['land_alt1'])
    data.plot(ax = ax, transform=ccrs.PlateCarree(),
               vmin = 34.4 , vmax=35.81 , levels=17 ,
               cmap=Becki, cbar_kwargs={'shrink': 0.3})

主要代码是:

fig = plt.figure()

ax1 = fig.add_subplot(111)
plot_avg(var1)
ax2 = fig.add_subplot(122)
plot_avg(var2)

但由于某种原因我做不到,我总是得到一个带有两个颜色条的图:

我可以做些什么不同的事情?我很难处理 xarray 中的绘图对象。

用于绘图的示例数据文件在这里: netcdf files

【问题讨论】:

    标签: python matplotlib python-xarray cartopy


    【解决方案1】:

    您在这里创建了太多轴。确保只创建要使用的两个轴。

    def plot_avg(data, ax, **kwargs):
        ax.coastlines(resolution='10m',zorder=3)
        ax.gridlines(color='gray')
        ax.add_feature(cartopy.feature.LAND, zorder=1,facecolor=cartopy.feature.COLORS['land_alt1'])
        data.plot(ax = ax, transform=ccrs.PlateCarree(),
                   vmin = 34.4 , vmax=35.81 , levels=17 ,
                   cmap=Becki, cbar_kwargs={'shrink': 0.3})
    
    fig = plt.figure()
    
    ax1 = fig.add_subplot(121, projection=ccrs.Orthographic(central_latitude=-90.0))
    plot_avg(var1, ax1)
    ax2 = fig.add_subplot(122, projection=ccrs.Orthographic(central_latitude=-90.0))
    plot_avg(var2, ax2)
    

    【讨论】:

    • 谢谢!我试过了,但由于某种原因,这两个图现在以一种奇怪的方式相互重叠:ibb.co/LJnvsbc
    • 哦,是的,我盲目地复制了你的问题,现在它应该可以正常工作了。
    【解决方案2】:

    尝试将ax 定义为函数的参数:

    def plot_avg(data, ax, **kwargs):
    
    
        ax = plt.axes(projection=ccrs.Orthographic(central_latitude=-90.0))
    
        ax.coastlines(resolution='10m',zorder=3)
        ax.gridlines(color='gray')
        ax.add_feature(cartopy.feature.LAND, zorder=1,facecolor=cartopy.feature.COLORS['land_alt1'])
        data.plot(ax = ax, transform=ccrs.PlateCarree(),
                   vmin = 34.4 , vmax=35.81 , levels=17 ,
                   cmap=Becki, cbar_kwargs={'shrink': 0.3})
    

    然后将您创建的ax 传递给函数调用:

    fig = plt.figure()
    
    ax1 = fig.add_subplot(111)
    plot_avg(var1, ax1)
    ax2 = fig.add_subplot(122)
    plot_avg(var2, ax2)
    

    【讨论】:

    • 不幸的是 - 它的行为方式相同。一个情节,两个颜色条
    • var2 中的数据集是否有可能损坏?如果您尝试绘制 var1 两次会发生什么?
    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2019-09-03
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多