在python中修改xarray图图例

mca*_*cat 6 python plot python-xarray

我刚开始使用 xarray 的绘图功能,我通常使用 matplotlib。

我正在尝试移动 xarray.plot.scatter 创建的图例。能够删除图例标题也很酷。

data.plot.scatter(x = 'HGT', y = var, hue = 'time', add_guide = True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我通过 ax.legend 制作单独的图例,当 add_guide = False 时,我的图例顺序会变得混乱。我的绘图用不同的颜色标记不同的时间对(hours2 - hours1),并且顺序对于易于理解非常重要。

ax.legend(labels, bbox_to_anchor=(-1.15, 2.4, -1., .102), loc='lower left', ncol = 6)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

因此,我试图更好地了解如何修改图例 xarray.plot.scatter,但到目前为止我无法找到有关它的信息。有什么建议么?:)

小智 0

这会将现有图例替换为具有相同句柄、标签字符串和标题字符串的新图例。您可以传入任何对旧图例有效的关键字参数Axes.legend(),甚至可以覆盖旧图例的句柄/标签/标题。不会从旧图例继承任何其他属性,包括旧标签或标题的字体属性。如果您有多个图例,或者图例绑定到图形而不是轴,则这可能不起作用。

def modify_legend(axes, **kwargs):
    oldleg = axes.get_legend()
    props = dict(
        handles=oldleg.legend_handles,
        labels=[t.get_text() for t in oldleg.texts],
        title=oldleg.get_title().get_text()
    )
    props.update(kwargs) # kwargs takes precedence over props
    axes.legend(**props)
    return
Run Code Online (Sandbox Code Playgroud)

使用示例:

data.plot.scatter(x = 'HGT', y = var, hue = 'time', add_guide = True)
ax = plt.gca()
modify_legend(
    ax,
    bbox_to_anchor=(-1.15, 2.4, -1., .102),
    loc='lower left',
    ncol=6,
    title=None # removes the title, as requested
)
Run Code Online (Sandbox Code Playgroud)