Python GeoPandas multiplot中的共享图例

Python GeoPandas multiplot中的共享图例,python,matplotlib,geopandas,Python,Matplotlib,Geopandas,我正在使用GeoPandas GeoDataFrame.plot子地块为每个月创建一个多点图。如何为所有子批次创建通用图例以及x轴和y轴,并控制figsize 我知道有sharex=True和sharey=True,但我不知道放在哪里 plt.figuresharex=True,sharey=True返回TypeError:\uuuu init\uuuuu获取了意外的关键字参数“sharex” world.plotcolumn='pop_est',ax=ax,legend=True,sharex

我正在使用GeoPandas GeoDataFrame.plot子地块为每个月创建一个多点图。如何为所有子批次创建通用图例以及x轴和y轴,并控制figsize

我知道有sharex=True和sharey=True,但我不知道放在哪里

plt.figuresharex=True,sharey=True返回TypeError:\uuuu init\uuuuu获取了意外的关键字参数“sharex”

world.plotcolumn='pop_est',ax=ax,legend=True,sharex=True,sharey=True返回AttributeError:'PatchCollection'对象没有属性'sharex'

ax=plt.subplot 4,3,index+1,sharex=True,sharey=True返回类型错误:无法创建对“bool”对象的弱引用

shared_x和share_y关键字已经在上面的评论中用@ImportanceOfBeingErnest解释过了。这很好,如果你真的在展示整个世界,我个人会删除所有的记号/标签。但对于子集,它可能会有所帮助

创建共享图例(Matplotlib称之为颜色条,而不是图例)有点挑剔,因为Geopandas不返回轴,而像Matplotlib通常那样返回mapabble。一个简单的解决方法是从Axis集合中获取它,但这确实需要一些假设,如果存在多个可映射项,则需要对哪些可映射项进行假设

在这种情况下,每个轴只有一个面片集合,每个轴的面片集合是相同的。因此,使用axs[0]获取ith。集合[0]很简单,但不是最健壮的解决方案

另一种方法是预先创建cax,并使用cax=cax关键字将其提供给Geopandas绘图。但是使用fig.add_轴[]手动创建cax不太方便

使用下图所示的fig.colorbar似乎更容易,因为它允许基于轴的列表/数组创建cax

fig, axs = plt.subplots(4,3, figsize=(10,7), 
                        facecolor='w',
                        constrained_layout=True, 
                        sharex=True, sharey=True, 
                        subplot_kw=dict(aspect='equal'))

axs = axs.ravel()

fig.suptitle('This is the figure title', fontsize=12, y=1.05)

for index, i in months.iterrows():

    axs[index].set_title(index)
    world.plot(column='pop_est', ax=axs[index])


# assume it's the first (and only) mappable
patch_col = axs[0].collections[0]
cb = fig.colorbar(patch_col, ax=axs, shrink=0.5)
shared_x和share_y关键字已经在上面的评论中用@ImportanceOfBeingErnest解释过了。这很好,如果你真的在展示整个世界,我个人会删除所有的记号/标签。但对于子集,它可能会有所帮助

创建共享图例(Matplotlib称之为颜色条,而不是图例)有点挑剔,因为Geopandas不返回轴,而像Matplotlib通常那样返回mapabble。一个简单的解决方法是从Axis集合中获取它,但这确实需要一些假设,如果存在多个可映射项,则需要对哪些可映射项进行假设

在这种情况下,每个轴只有一个面片集合,每个轴的面片集合是相同的。因此,使用axs[0]获取ith。集合[0]很简单,但不是最健壮的解决方案

另一种方法是预先创建cax,并使用cax=cax关键字将其提供给Geopandas绘图。但是使用fig.add_轴[]手动创建cax不太方便

使用下图所示的fig.colorbar似乎更容易,因为它允许基于轴的列表/数组创建cax

fig, axs = plt.subplots(4,3, figsize=(10,7), 
                        facecolor='w',
                        constrained_layout=True, 
                        sharex=True, sharey=True, 
                        subplot_kw=dict(aspect='equal'))

axs = axs.ravel()

fig.suptitle('This is the figure title', fontsize=12, y=1.05)

for index, i in months.iterrows():

    axs[index].set_title(index)
    world.plot(column='pop_est', ax=axs[index])


# assume it's the first (and only) mappable
patch_col = axs[0].collections[0]
cb = fig.colorbar(patch_col, ax=axs, shrink=0.5)

sharex和sharey可以用作plt.subplot的参数,图,ax_array=plt.subplot 4,3,sharex=True,sharey=True。然而,这不会创建一个共享的传奇。它也不适用于我。ax=plt.subplot 4,3,index+1,sharex=True,sharey=True yiels类型错误:无法创建对“bool”对象的弱引用。是的,因为我说过plt.subplot感谢您的支持。但是,将ax=plt.subplot 4,3,index+1替换为fig,ax_数组=plt.subplot 4,3,sharex=True,sharey=True或fig,ax_数组=plt.subplot 4,3,index+1,sharex=True,sharey=True将导致一个空画布和TypeError:子地块分别为参数“sharex”获得多个值。这需要在循环之外,随后,需要在ax_阵列内的轴上循环。但如前所述,这只是为了显示错误的来源,它不会创建任何共享图例或类似的图例。sharex和sharey可以用作plt的参数。subplot,fig,ax_array=plt。subplot 4,3,sharex=True,sharey=True。然而,这不会创建一个共享的传奇。它也不适用于我。ax=plt.subplot 4,3,index+1,sharex=True,sharey=True yiels类型错误:无法创建对“bool”对象的弱引用。是的,因为我说过plt.subplot感谢您的支持。但是,将ax=plt.subplot 4,3,index+1替换为fig,ax_数组=plt.subplot 4,3,sharex=True,sharey=True或fig,ax_数组=plt.subplot 4,3,index+1,sharex=True,sharey=True将导致一个空画布和TypeError:子地块分别为参数“sharex”获得多个值。这需要在循环之外,随后,需要在ax_阵列内的轴上循环。但如前所述,这只是为了说明错误的来源,它不会创建任何共享图例或类似内容。谢谢,太棒了:我无法运行ImportanceOfBeingErnest的代码段。谢谢,太棒了:我无法运行ImportanceOfBeingErnest的代码段。