我正在为循环中的图形添加绘图,因此当我向图中添加图例时,它的排序顺序与添加绘图的顺序相同。相反,我想直观地订购图例,因为图中显示了图表。在某些情况下,有些图重叠并相互交叉,所以当我说"因为图中显示了图#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()
显示此图:
答案 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()