2017-12-29 28 views
0

ich die Etiketten in meine Plots auf die Etiketten habe ich in meinem Diagramm sehen wollen, aber es funktioniert nicht:ändern Markennamen Python

sns.set(rc={"figure.figsize": (16, 8)}) 
ax = events_all_metrics[["event_name","kambi_payback"]].plot(x="event_name", style='.',use_index=False, color ='green', label='Kambi Payback') 
events_all_metrics[["event_name","pinny_payback"]].plot(x="event_name",style='.', color='red', label='Pinnacle Payback', ax=ax) 
plt.tick_params(
    axis='x',   # changes apply to the x-axis 
    which='both',  # both major and minor ticks are affected 
    bottom='off',  # ticks along the bottom edge are off 
    top='off',   # ticks along the top edge are off 
    labelbottom='off') 
plt.legend(loc=4, prop={'size': 15}) 

pinny_mean = events_all_metrics["pinny_payback"].mean() 
plt.axhline(y=pinny_mean, label='Pinny Mean', linestyle='--', color='red') 

kambi_mean = events_all_metrics["kambi_payback"].mean() 
plt.axhline(y=kambi_mean, label='Kambi Mean', linestyle='--', color='green') 
plt.show() 

kambi_pinny

Also, habe ich herausgefunden, dass Im Grunde überschrieb plt.legend() die ursprünglichen Bezeichnungen in Pandas. Ich ging es bis zum Ende (kurz vor plt.show()) mit dem folgenden Code und es funktionierte:

plt.legend(["Kambi Payback","Pinnacle Payback", "Kambi Mean", "Pinnacle Mean"], loc=4, prop={'size': 15}) 
+0

Wahrscheinlich weil die Zeile mit 'plt.legend (...)' am Ende sein sollte? – Georgy

Antwort

1

wie Pandas Sieht überschreibt den Label-Befehl, wenn sie von einem Datenrahmen aufgetragen ist. Siehe das Beispiel unten - die obere Zahl wird direkt von Pandas mit DataFrame.plot(x=...) gezeichnet, während der untere Teil direkt durch matplotlib mit plt.plot() geht.

Direktes Auftragen einer Reihe, z. df["series1"].plot() überschreibt auch nicht das Label.

Offenbar this was a behavior known as an issue in an old version of pandas --so ist es möglich, dass es nicht behoben wurde? Ich kann das OP-Problem mit 0.20.1 reproduzieren.

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

data = list(zip(np.arange(100),np.random.random(100),2*np.random.random(100))) 

fig,axes = plt.subplots(2,1) 

df = pd.DataFrame(data, columns = ["x","series1","series2"]) 
df[["x","series1"]].plot(x = "x", color = "red", label = "Label 1", ax = axes[0]) 

#df[["x","series2"]].plot(x = "x", color = "green", label = "Label 2", ax = ax) 

axes[1].plot(df["x"], df["series1"], color = "red", label = "Label 1") 

plt.legend() 

enter image description here

Allerdings ist es möglich, sie nach der Tat, Kredit zu this answer umbenennen. Zum Beispiel:

ax = df[["x","series1"]].plot(x = "x", color = "red", label = "Label 1") 
ax.legend(["Label 1"]) 

enter image description here

mir noch unklar, ob die Unfähigkeit Serie Etikett direkt beim Aufruf von df.plot() ist absichtlich oder nicht einzustellen.

+0

danke Patrick. Also sollte ich einfach auf eine Lösung in der Zukunft warten? –

+0

@IvoFilipe gut Ich habe die Antwort aktualisiert, um mit einer Arbeit für jetzt zu verknüpfen, aber ich weiß nicht, ob eine Reparatur, um das Kernverhalten zu ändern, in den Karten ist oder nicht. Hoffe das hilft zumindest. –

+0

@IvoFilipe Können Sie bitte diese Antworten auf Ihre Fragen akzeptieren, wenn sie das Problem lösen, so dass sie nicht ungelöst bleiben ?! Sonst können Sie natürlich um Klarstellungen bitten. – ImportanceOfBeingErnest