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()
假设我在 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()