我正在制作一些数字,其中每个都有不同数量的子图。 我想在右下角添加一个传奇,但我遇到了一些麻烦。 我尝试在右下角添加一个新的子图并仅添加一个图例,但在图例后面有一个空的子图。 这就是我现在站立的地方,但无论最后一个子情节在哪里,都想要右下角的图例。
fig = plt.figure()
matplotlib.rc('xtick', labelsize=8)
matplotlib.rc('ytick', labelsize=8)
for line in a[1:]:
ax = fig.add_subplot(subcol,subrow,counter)
ax.plot(x,line[3:7],marker='o', color='r', label = 'oral')
ax.plot(x,line[7:],marker='o', color='b',label = 'physa')
ax.set_title(line[1],fontsize = 10)
counter+=1
ax.legend(bbox_to_anchor=(2, 0),loc = 'lower right')
plt.subplots_adjust(left=0.07, right=0.93, wspace=0.25, hspace=0.35)
plt.suptitle('Kegg hedgehog',size=16)
plt.show()
答案 0 :(得分:2)
更好的解决方案是
fig.legend(handles, labels, loc='', ...)
这会将图例添加到图形而不是子图。
根据您的示例,它会像
fig = plt.figure()
matplotlib.rc('xtick', labelsize=8)
matplotlib.rc('ytick', labelsize=8)
handles = []
for line in a[1:]:
ax = fig.add_subplot(subcol,subrow,counter)
l1 = ax.plot(x,line[3:7],marker='o', color='r', label = 'oral')
l2 = ax.plot(x,line[7:],marker='o', color='b',label = 'physa')
if not handles:
handles = [l1, l2]
ax.set_title(line[1],fontsize = 10)
counter+=1
fig.legend(handles, ['oral', 'physa'], bbox_to_anchor=(2, 0),loc = 'lower right')
plt.subplots_adjust(left=0.07, right=0.93, wspace=0.25, hspace=0.35)
plt.suptitle('Kegg hedgehog',size=16)
plt.show()
答案 1 :(得分:0)
我最后添加了一个额外的子图,我删除了它的框架和轴,然后没有绘制任何内容并添加了一个图例
lastSubplot = plt.subplot(subcol,subrow,subcol*subrow)
lastSubplot.set_frame_on(False)
lastSubplot.get_xaxis().set_visible(False)
lastSubplot.get_yaxis().set_visible(False)
plt.plot(0, 0, marker='o', color='r', label = 'line1')
plt.plot(0, 0, marker='o', color='b', label = 'line2')
lastSubplot.legend(loc = 'lower right')
这让我只留下右下角的传说,不管我实际有多少个子图。