2016-04-15 9 views
0

Ich möchte auf einem Raster meine Daten mit zugeordneten Fehlerbalken und eine stückweise lineare Regression durch den Mittelwert jedes Zeitpunkts. Ich habe meine Daten in einem Pandas Datenrahmen und möchte uns seaborn, um den Job zu machen.Kombinieren Regplot mit stückweise lineare Regression auf einem Facetgrid mit Seaborn

Wenn ich seaforns factorplot verwende, komme ich nah.

g = sns.factorplot(x="Time", y='value', hue="Name", 
       col="PEAK", data=meltdf, 
       size=4, aspect=1.0,col_wrap=3,sharey=False,scale=0.7) 

output for the factorplot

aber feststellen, dass meine xaxis nicht richtig skaliert wird (dies macht Sinn, da die factorplot für kategorische Vergleiche ausgelegt ist)

Wenn ich stattdessen eine FacetGrid und Karte regplot und plt erstellen. Grundstück auf das Gitter I auf den xaxis korrekten Abstand zu bekommen und halten Fehlerbalken etc., aber die lineare Regression ist nicht, wie ich will es

meltdf = pd.melt(Conc_norm.drop(['GLC','pan','Ratio %'],axis=1), 
id_vars=['Name','Time'], var_name='PEAK') 

g = sns.FacetGrid(meltdf, col="PEAK",hue='Name', col_wrap=4,sharey=False) 
g.map(sns.regplot, "Time", "value",fit_reg=False, x_estimator=np.mean); 
g.map(plt.plot, "Time", "value"); 

output for the Facetgrid mapped with regplot and plt.plot

Jetzt kommt die Frage: Wie zeichne ich eine stückweise lineare Regression zwischen den Punkten in der Handlung?

Danke,

+0

ich Ihre zweite Ansatz denken sollte funktionieren, wenn Sie sortieren gefunden haben der Datenrahmen auf 'Zeit' vor dem Plotten. – mwaskom

+0

Sortierung nach der Zeit wird das Aussehen verbessern, aber es wird immer noch eine Linie durch alle Zeit, Wertkoordinaten zeichnen. Was ich will, ist etwas zu malen, ala. df.groupby ('Time'). mean() aber ich kann mir nicht vorstellen, wie man das macht – atomman

+0

Ah, ja, du musst dann eine kleine Plotfunktion schreiben. – mwaskom

Antwort

1

Nach dem Netto-Schleppen und viele von mwaskom ausgezeichneten Antworten lesen scheint, dass ich eine funktionierende Lösung

def _plotmean(x, *args, **kwargs): 
    ax = plt.gca() 
    data = kwargs.pop('data') 
    data = data.groupby(x).mean() 
    data.plot(ax=ax, **kwargs) 

Conc_norm.sort_values('Time', inplace=True) 

meltdf = pd.melt(Conc_norm.drop(['GLC','pan','Ratio %'], axis=1), 
       id_vars=['Name','Time'], var_name='PEAK') 

g = sns.FacetGrid(meltdf, col="PEAK", hue='Name', col_wrap=3,sharey=False) 
g.map(sns.regplot, "Time", "value", fit_reg=False, x_estimator=np.mean) 
g.map_dataframe(_plotmean, "Time") 
g.add_legend() 

working output

Verwandte Themen