2017-08-29 70 views
1

我需要绘制精度与参数图(主要任务是通过网格搜索查找最佳参数值)。现在,因为有很多参数组合,通过它我正在迭代;我想为每个组合的迭代编号加上标签;并做出精确度与迭代次数的关系图。如何在没有类标签的情况下在matplotlib中定义图例?

我确实需要针对每个参数值的组合绘制精度。 但是我也想提供一个图例,图中有参数组合值与其各自的迭代次数。 这是怎么回事?

parameters = parameterGrid(paramGrid) 
    i = 0 
    lst = [] 
    maxScore = 0 


for parameter in parameters: 
    meanAcc = 0 

    clf = DecisionTreeClassifier(**parameter) 
    dTree = clf.fit(xTrain,yTrain) 
    score = dTree.score(xTest, yTest) 
    if(score > maxScore): 
     maxScore = score 
     selectedParams = parameter  
    plt.plot(i,score) 
    #plotting accuracy against current parameter set 

    l = [i,score] 
    lst.append(l) 
    legend[i] = parameter 
    i += 1 



plt.xlabel('X Label') 
plt.ylabel('Y Label') 
plt.show() 

此外,任何其他的建议,我应该如何做阴谋非常受欢迎。 请帮忙。

+0

这有什么错用'plt.plot(...,标签= “嗒嗒”)'然后'plt.legend()'? – Julien

+0

如果您发布了一段代码,则更容易为您提供帮助。建立从索引构建的标签列表,并将它们分配给每个要绘制的数据集应该很容易。 –

+0

@Julien - 使用plt.plot()和plt.legend()方法没有任何问题。但我没有得到如何将所需的信息放在图例中。 另外,plt.plot()给我一个空的图;而plt.scatter正在给出正确的结果。不明白为什么。 – chi

回答

0

如果您遍历的参数,你可以使用

iter = 0 
for param1 in [1,2,3,4]: 
for param2 in [2,3,4,5]: 
    plt.plot(..., label=str(param1)+"_"+str(param2)+"_"+str(iter)) 
    iter += 1 
plt.legend() 
+0

我编辑了我的答案以包含代码。请看看它。 plt.plot(x,y)给我一个空的阴谋;但plt.scatter正在工作。我不明白为什么。 – chi

+0

plt.plot()是一个线条图,所以在一个线条图上有一个单一点没有意义。 plt.scatter()可能是你想要使用的。您可以使用相同的方法创建图例。 – jfried

+0

我不想有一个单一的点;对于每个参数组合,都有一个准确性;所以有多个点。所以我认为线图更合适。 – chi

相关问题