Python 的 matplotlib 图例在带有 gridspec 的单独轴中

Python's matplotlib legend in separate axis with gridspec

假设我在 python 脚本中有一个 matplotlib 的 gridspec 实例。我想要做的是创建两个轴并在一个轴上绘制图例,在另一个轴上绘制图例。像

import numpy as np
from matplotlib import gridspec, pyplot as plt

x = np.linspace(0,100)
y = np.sin(x)

gs = gridspec.GridSpec( 100, 100 )
ax1 = fig.add_subplot(gs[ :50, : ])
ax2 = fig.add_subplot(gs[ 55:, : ])
ax1.plot( s, y, label=r'sine' )
ax2.legend() # ?? Here I want legend of ax1
plt.show()

有什么办法吗?

您可以使用 ax1.get_legend_handles_labels() 从第一个子图中获取图例句柄和标签,然后在第二个子图中创建图例时使用它们。

来自docs

get_legend_handles_labels(legend_handler_map=None)

Return handles and labels for legend

ax.legend() is equivalent to:

h, l = ax.get_legend_handles_labels() 
ax.legend(h, l)
import numpy as np
from matplotlib import gridspec, pyplot as plt

x = np.linspace(0, 100)
y = np.sin(x)

fig = plt.figure()

gs = gridspec.GridSpec(100, 100 )
ax1 = fig.add_subplot(gs[:50, :])
ax2 = fig.add_subplot(gs[55:, :])

ax1.plot(x, y, label=r'sine')

h, l = ax1.get_legend_handles_labels() # get labels and handles from ax1

ax2.legend(h, l)                       # use them to make legend on ax2

plt.show()