同时添加所有图例标签到绘图(Python)

时间:2016-03-22 18:50:00

标签: python matplotlib plot figure

我想同时向plt.plot对象添加标签。 matplotlib真的让我感到困惑,因为似乎有一百万种方法来绘制一个人物。有些人fig, ax = plt.subplots而其他人只做plt.plot。如果我搜索,我可以找到更多。

无论如何,我怎样才能在数据上添加所有标签,在一行中没有循环?我一直在尝试使用seaborn,但我不知道如何使用简单的线图,这就是我使用matplotlib的原因。

matplotlibseaborn中是否存在某种类型的方法,您可以在其中为其绘制数据点数组(在本例中为80个点的3个样本)以及标签得到这种情节?

在下方提供我的代码,以便您看到我正在构建情节的DataFrame,但问题的最重要部分是在#____________________________

之后

不是How do I assign multiple labels at once in matplotlib?的副本,因为问题是直接询问如何在没有for循环的情况下将其设置在一行中。 "重复"建议类似于下面我的答案的解决方案。

"""Softmax."""

scores = [3.0, 1.0, 0.2]

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

def softmax(x):
    """Compute softmax values for each sets of scores in x."""
    return(np.exp(x) / np.sum(np.exp(x),axis=0))


# Plot softmax curvesy

x = np.arange(-2.0, 6.0, 0.1)
scores = np.vstack([x, np.ones_like(x), 0.2 * np.ones_like(x)])
DF_activation = pd.DataFrame(softmax(scores).T,index=x,columns=["x","1.0","0.2"])

#____________________________
#I have to add them like this
[plt.plot(DF_activation.index,DF_activation[c], linewidth=3,label=c) for c in DF_activation.columns]
#But I want to add them like this
#plt.plot(DF_activation.index,DF_activation,label=DF_activation.columns,linewidth=2)
plt.xlabel("x")
plt.ylabel("softmax")
plt.legend()

plt.show()

enter image description here

1 个答案:

答案 0 :(得分:2)

我假设你的意思是传奇的标签。您可以在一条指令中直接说明labels及其引用的对象:

 legend((plot1, plot2, plot3), ('label1', 'label2', 'label3'))

但这意味着您需要将您的情节放入变量中。

 plot, = ...

只需使用变量来引用图例功能中的标签列表。