【发布时间】:2022-04-01 21:33:51
【问题描述】:
我在 python 中使用 xarray 来绘制一个 DataArray,其中包含几个面板,每个面板都绘制多条线(色调)。默认情况下,图例的位置设置在面板的右侧。我正在尝试找到一种方法将其移动到面板的顶部或底部。
我对 plot.pcolormesh 没有问题,因为参数 cbar_kwargs={'orientation': 'horizontal'} 效果很好,但它是否存在与 plot.line() 类似的东西? 我查看了文档,但找不到任何相关内容。
作为一个例子,这是我使用的代码(非常简单):
p = dataArray.plot.line(
y="z",
hue="source",
col="t",
col_wrap=4,
)
plt.gca().invert_yaxis()
plt.draw()
plt.show()
产生这个figure。
感谢您的帮助。
编辑。 根据其他地方的建议,我探索了一些问题。
Xarray 创建一个 FacetGrid 对象(来自 seaborn 库)。该对象包含一个自动添加图例(由 xarray 使用)的功能,以使用绘制图例对象的右侧面板扩展图形。我想出了如何访问这个对象(p.figlegend),它本身具有属性set_bbox_to_anchor,它确实允许移动图例......但仅相对于这个附加面板.
现在我有了图例对象,我可以将它完全移动到我想要的任何位置,但这并不是我真正想要的选项。首先,如果我这样做,我将不得不从头开始创建图例对象,这是我想通过使用 xarray 自动线图来避免的,其次我将在我的图形右侧有一个小的空面板。此时从子图创建图形并一张一张地制作面板会更容易。
我认为我的问题可以简单地简化为:是否有可能有一个 FacetGrid 对象来绘制图例 under 或 over 图而不是 on对吗?如果不是,可能没有简单的方法可以做我想做的事。
【问题讨论】:
-
请参阅this 帖子了解如何移动 matplotlib 图例。
-
谢谢,但是当我使用 xarray 自动布局来绘制我的图形时,它并不是那么简单。如何访问包含 matplotlib 图例的斧头?当然,我可以使用 subplot 并通过指定轴手动绘制所有子图,但这不是我在这里想要做的。我真的希望有一个不涉及从零开始构建数字的解决方案。
-
也许你可以使用seaborn的
sns.move_legend()?见Legend handle to an xarray plot。 -
感谢您的反馈。抱歉回来晚了,我花了一段时间才能够回到这个项目。可悲的是,它不适用于 FacetGrid 对象。 fig.gca() 没有关联的图例。我想我将不得不挖掘一下才能弄清楚这个数字的确切位置。我尝试了我的 fig.figlegend() 技巧,但它没有发送 seaborn 能够处理的对象。
标签: python matplotlib seaborn python-xarray