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

时间:2016-03-16 12:27:47

标签: python matplotlib legend

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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:5)

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

来自docs

  

get_legend_handles_labels(legend_handler_map=None)

     

返回图例的句柄和标签

     

ax.legend()相当于:

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()

enter image description here