Python GeoPandas multiplot中的共享图例
我正在使用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似乎更容易,因为它允许基于轴的列表/数组创建caxPython 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
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的代码段。