我在下图中有一个图例的第一版:
使用以下代码:
# Plot and save : kmax = 0.3
p11, = plt.plot([0], marker='None',
linestyle='None', label='$k_{max} = 0.3$')
p1, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,1], '-b', label = '$GC_{sp}$')
p2, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,2], '-r', label = '$GC_{ph}$')
p3, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,3], '-y', label = '$WL$')
p4, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,4], '-g', label = '$GC_{ph} + WL + XC$')
p5, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,5], '-m', label = \
'$GC_{sp} + (GC_{ph} + WL + XC)$')
# Plot and save : kmax = 1.0
p12, = plt.plot([0], marker='None',
linestyle='None', label='$k_{max} = 1.0$')
p6, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,1], '--b', label = '$GC_{sp}$')
p7, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,2], '--r', label = '$GC_{ph}$')
p8, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,3], '--y', label = '$WL$')
p9, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,4], '--g', label = '$GC_{ph} + WL + XC$')
p10, =plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,5], '--m', label = \
'$GC_{sp} + (GC_{ph} + WL + XC)$')
plt.legend(fontsize=14, loc='best', ncol=2, handleheight=1.4, labelspacing=0.05)
如您所见,我为每个标记和列都添加了一个标题(
k_max = 0.3
和 k_max = 1.0
)。现在,为了避免这种冗余,我正在尝试合并所有重复的标签,同时保留每个标记的标题,方法是:
from matplotlib.legend_handler import HandlerTuple
# Plot and save : kmax = 0.3
p11, = plt.plot([0], marker='None', linestyle='None')
p1, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,1], '-b')
p2, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,2], '-r')
p3, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,3], '-y')
p4, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,4], '-g')
p5, = plt.plot(FoM_vs_Density_array_1[:,0],FoM_vs_Density_array_1[:,5], '-m')
# Plot and save : kmax = 1.0
p12, = plt.plot([0], marker='None', linestyle='None')
p6, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,1], '--b')
p7, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,2], '--r')
p8, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,3], '--y')
p9, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,4], '--g')
p10, = plt.plot(FoM_vs_Density_array_2[:,0],FoM_vs_Density_array_2[:,5], '--m')
l = plt.legend([(p1,p6), (p2,p7), (p3,p8), (p4,p9), (p5,p10)], ['$GC_{sp}$', \
'$GC_{ph}$', '$WL$', '$GC_{ph} + WL + XC$', '$GC_{sp} + (GC_{ph} + WL + XC)$'], \
fontsize=14, loc='best', handlelength=2.5, handleheight=1.4, labelspacing=0.05, \
handler_map={tuple: HandlerTuple(ndivide=None)})
这样,我得到了以下图像: 然后,发生了两个问题:
1) 与上图相比,两个标记之间的空间太小:如何在标记之间插入更大的空间以及为标记本身增加更多的长度(例如,对于破折号标记,如何像我在帖子开头第一张图例中的4条虚线标记一样拥有4条虚线)。
2) 如何将标题"k_max = 0.3"和"k_max = 1.0"放置在每个标记列的上方?这样,我可以在绘图中快速识别我考虑的情况(就像我在上面的第一个图中所做的那样,但是通过重复所有标签的显示来实现了冗余)。