2016-03-22 4 views
1

Ich möchte gleichzeitig einem Objekt plt.plot Beschriftungen hinzufügen. matplotlib verwirrt mich wirklich, da es scheint eine Million Möglichkeiten, eine Figur zu plotten. Manche Leute tun fig, ax = plt.subplots während andere einfach plt.plot tun. Wenn ich suche, kann ich ein paar mehr finden.Alle Legendenbeschriftungen gleichzeitig zum Plotten hinzufügen (Python)

Wie auch immer, wie kann ich alle Etiketten hinzufügen, mit den Daten in einer Zeile ohne Schleife? Ich habe mit seaborn experimentiert, aber ich weiß nicht, wie man es macht, einfache Linie Diagramme zu machen, warum ich matplotlib verwende.

Gibt es irgendeine Art von Verfahren in entweder matplotlib oder seaborn, wo Sie ihm eine Reihe von Datenpunkten (in diesem Fall 3 Proben von 80 Punkten) zusammen mit den Etikett plotten geben können diese Art von Handlung zu bekommen?

Giving meinen Code unten, so dass Sie den Datenrahmen sehen ich das Grundstück von baute, aber der wichtigste Teil ist auf die Frage nach #____________________________

kein Duplikat How do I assign multiple labels at once in matplotlib? weil die Frage direkt zu fragen ist, wie man Richte es in einer Zeile ohne Schleife ein. Das vorgeschlagene "Duplikat" ähnelt der Lösung für meine Antwort unten.

"""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

+0

Wenn Sie mpl 1.5 haben, ist es mehr Pandas bewusst und wird Seriennamen für Etiketten extrahieren und Sie können 'ax.plot (idx, 'col1', idx, 'col2', data = df)'. Warum interessiert es dich, ob du es in einer Zeile machen kannst oder nicht? Wenn Sie das wirklich wollen, schreiben Sie einfach eine Hilfsfunktion 'def one_liner_plot (ax, df):' mit dem Forloop darin. – tacaswell

+0

Mögliches Duplikat von [Wie weise ich mehrere Labels gleichzeitig in Matplotlib zu?] (Http://stackoverflow.com/questions/11481644/how-do-i-assign-multiple-labels-at-once-in-matplotlib) – kazemakase

Antwort

2

Ich gehe davon aus meinen Sie die Etiketten für die Legende. Sie können in einer Anweisung direkt, geben sowohl die labels und die Objekte, die sie sich beziehen:

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

Aber das bedeutet Sie Ihr Grundstück in eine Variable setzen müssen.

Als Variable nur verwenden, um die Liste der Beschriftungen in der Legendenfunktion zu referenzieren.