首页 > 解决方案 > 子图中的独特图例(matplotlib)

问题描述

我正在尝试以 (2,3) 的格式创建 5 个子图,其中 (1,3) 是空白空间,我想在其中放置图例。每个子图中有六行,我想为此制作传奇。我得到了子图,格式正确,但很难得到:

(1) 独特的传说;使用 fig.legend(),图例中充满了重复的线条,我想纯粹根据线条的名称来创建图例;(2)将图例放置在子图(1,3)的空白处。

感谢您的帮助。

fig, axs = plt.subplots(2,3)

for i, j in zip(g_list,c_list):
        axs[0,0].plot(global_epsilon_T()["g_"+i+"_vlt"], global_epsilon_T()["g_"+i],   color=j, linewidth=1, label = "(c) "+i)
        axs[0,1].plot(global_epsilon_B()["g_"+i+"_vlt"], global_epsilon_B()["g_"+i],   color=j, linewidth=1, label = "(c) "+i)
        axs[0,2].plot(global_slope()["g_"+i+"_vlt"], global_slope()["g_"+i],   color=j, linewidth=1, label = "(c) "+i)
        axs[1,0].plot(global_trb()["g_"+i+"_vlt"], global_trb()["g_"+i],   color=j, linewidth=1, label = "(c) "+i)
        axs[1,1].plot(global_dis()["g_"+i+"_vlt"], global_dis()["g_"+i],   color=j, linewidth=1, label = "(c) "+i)

axs[1,2].set_visible(False)

标签: matplotlibsubplot

解决方案


您可以通过执行将图例归因于每个子图,axs[i,j].legend()并为每个图提供一个图例,显示该子图的标签。如果您想在 subplot (1,3) 上拥有所有标签,请执行以下操作并将句柄和您希望它显示的标签传递给它:

axs[1,3].legend([ax for ax in axs],[label for label in listOfLabels])

或者,您可以将其归因于图形,因此plt.legend()在您的 for 循环之后,它应该显示一个图例,其中包含图形对象上的所有标签,而不是子图。

另外,您是否对此没有错误:label = "(c) "+i 也许尝试label = "(c)%i" %(i)


推荐阅读