Ich habe ein Pandas-Datenfeld, das mehrere Felder hat. Die, die von Bedeutung sind:Plotten Pandas Datenrahmen mit String-Labels
In[191]: tasks[['start','end','appId','index']]
Out[189]:
start end appId index
2576 1464262540102.000 1464262541204.000 application_1464258584784_0012 1
2577 1464262540098.000 1464262541208.000 application_1464258584784_0012 0
2579 1464262540104.000 1464262541194.000 application_1464258584784_0012 3
2583 1464262540107.000 1464262541287.000 application_1464258584784_0012 6
2599 1464262540125.000 1464262541214.000 application_1464258584784_0012 26
2600 1464262541191.000 1464262541655.000 application_1464258584784_0012 28
.
.
.
2701 1464262562172.000 1464262591147.000 application_1464258584784_0013 14
2718 1464262578901.000 1464262588156.000 application_1464258584784_0013 28
2727 1464262591145.000 1464262602085.000 application_1464258584784_0013 40
ich eine Linie für jede Zeile darstellen möchten, die von den Koordinaten geht (x1 = Start, y1 = Index), (x2 = Ende, y1 = Index). Jede Zeile hat eine andere Farbe, abhängig vom Wert von appId, das eine Zeichenfolge ist. Dies alles geschieht in einem Teilplot, den ich in einem Zeitreihendiagramm habe. Ich poste den Code hier, aber das wichtige Bit ist der Teil tasks.iterrows(), Sie können den Rest ignorieren.
def plot_stage_in_host(dfm,dfg,appId,stageId,parameters,host):
[s,e] = time_interval_for_app(dfm, appId,stageId, host)
time_series = create_time_series_host(dfg, host, parameters, s,e)
fig,p1 = plt.subplots()
p2 = p1.twinx()
for para in parameters:
p1.plot(time_series.loc[time_series['parameter']==para].time,time_series.loc[time_series['parameter']==para].value,label=para)
p1.legend()
p1.set_xlabel("Time")
p1.set_ylabel(ylabel='%')
p1.set(ylim=(-1,1))
p2.set_ylabel("TASK INDEX")
tasks = dfm.loc[(dfm["hostname"]==host) & (dfm["start"]>s) & (dfm["end"]<e) & (dfm["end"]!=0)] #& (dfm["appId"]==appId) & (dfm["stageId"]==stageId)]
apps = tasks.appId.unique()
norm = colors.Normalize(0,len(apps))
scalar_map = cm.ScalarMappable(norm=norm, cmap='hsv')
for _,row in tasks.iterrows():
color = scalar_map.to_rgba(np.where(apps == row['appId'])[0][0])
p2.plot([row['start'],row['end']],[row['index'],row['index']],lw=4 ,c=color)
p2.legend(apps,loc='lower right')
p2.show()
Das ist das Ergebnis, das ich bekomme.
Offenbar erwägt nicht die Etiketten und die Legende zeigt die gleichen Farben für alle Linien. Wie kann ich sie richtig beschriften und auch die Legende anzeigen?
! [Bild] (http://imgur.com/kUmYE2A). Immer noch das gleiche Problem. Ich bin mehr daran interessiert, für jede Zeile andere Farben zu erhalten als in der Legende selbst. – Brandon
@Brandon hoffe, die aktualisierte Antwort hilft Ihnen. –
Danke !. Ich habe es etwas anders gemacht, durch eine Farbkarte, die Ihrer Lösung sehr ähnlich ist. Allerdings habe ich Probleme beim Zeichnen der Legende, da es keine Labels gibt. Wie kann ich die Legende plotten? – Brandon