按与绘图的(最后一个值)相同的顺序对图例进行排序

时间:2017-11-04 15:36:06

标签: python numpy matplotlib

我正在为循环中的图形添加绘图,因此当我向图中添加图例时,它的排序顺序与添加绘图的顺序相同。相反,我想直观地订购图例,因为图中显示了图表。在某些情况下,有些图重叠并相互交叉,所以当我说"因为图中显示了图#34;更明确的定义是根据最后一个y-命令图例。每个情节的价值。

以下是我的代码:

heights = [3, 4]

algos = ["NegaMax w/o PV",
         "PVS w/o PV",
         "NegaMax w/ PV",
         "PVS w/ PV"]

# (H, B, Algo, Approx)
temp = np.swapaxes(results, 2, 3)

for i in range(temp.shape[0]):
    for j in range(temp.shape[2]):
        plt.plot(temp[i][-1][j], label="{} (H = {})".format(algos[j], heights[i]))

plt.title("Num of Evaluations for each Algorithm at each Height with Maximum Branching Factor")
plt.xlabel("\'Aprox\' Value")
plt.ylabel("Number of Evaluations")
plt.xticks(np.arange(7), np.arange(0, 301, 50))
plt.legend()
plt.show()

显示此图:

enter image description here

Here is myresults numpy array.

1 个答案:

答案 0 :(得分:0)

这个想法是从最后一个数据行获得元素的顺序,例如使用numpy.argsort,相应地对手柄和标签进行排序,并为图例提供有序的手柄和标签。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0.,3.4)
phis = np.linspace(0.3,6.2,5)
y = np.array([np.sin(x+phi) for phi in phis]).T

labels = ["sin({:.2f}*x)".format(phi) for phi in phis]

plt.plot(x,y, label="unknown")

order = np.argsort(y[-1,:])[::-1]
h, l = plt.gca().get_legend_handles_labels()
plt.legend(handles=list(np.array(h)[order]),labels=list(np.array(labels)[order]))
plt.show()

enter image description here