2017-10-27 3 views
0

Ich benutze die folgende Funktion, um eine Zeile pro Jahr von Daten zu plotten (überlagert, so dass ich ein Jahr mit den anderen vergleichen kann). Was ich erreichen möchte, ist für jede Zeile eine Farbe zu haben, die als ein Farbverlauf anstelle der Standardfarbskala definiert ist (d. H. Die Zeile 2008 in hellblau bis 2017 in sehr dunkelblau).Farbskala in plotly Liniendiagramm ändern

Was ist der richtige Weg, dies zu tun? Ich habe versucht, den colorscale Parameter zu benutzen (siehe Code), aber ich kann es nicht recht herausfinden, wo man es setzt.

def plotPMByYear_plotly(df, minyear): 
    allYears = list(set(list(df.Year))) 
    allYears = [int(x) for x in allYears if str(x) != 'nan'] 
    data = [] 
    df = df[df["Year"]>=minyear] 
    for year in allYears: 
     yeardf = df[df["Year"] == year] 
     trace = go.Scatter(
      x = yeardf['Month'], 
      y = yeardf['Value'], 
      mode = 'lines', 
      name = year 
     ) 
     colorscale='Jet', 
     data.append(trace) 
    iplot(data, filename='line-mode') 

enter image description here

+0

Sie müssten die Farbe manuell in Ihrem 'Scatter' Objekt einstellen, zB 'line = dict (color = 'rgb (0, 0, 167)')' und erhalten Sie Ihre eigene Farbbereich-Generator-Funktion. –

Antwort

0

Nach einigem Graben, fand ich die Lösung, wie in dem folgenden Code:

 
from colour import Color 

def plotPMByYear_plotly(df, minyear,color1,color2): 
    df = df[df["Year"]>=minyear] 
    allYears = list(set(list(df.Year))) 
    allYears = [int(x) for x in allYears if str(x) != 'nan'] 
    allYears.sort() 
    colors = list(Color(color1).range_to(Color(color2),len(allYears))) 
    colors = ['rgb'+str(x.rgb) for x in colors] 
    data = [] 
    i = 0 

    for year in allYears: 
     yeardf = df[df["Year"] == year] 
     trace = go.Scatter(
      x = yeardf['Month'], 
      y = yeardf['Value'], 
      mode = 'lines', 
      marker=dict(color=colors[i]), 
      name = year 
     ) 
     i+=1 
     data.append(trace) 

    layout = go.Layout(
     title = 'Year on Year comparison' 
    ) 

    fig = go.Figure(data=data, layout=layout) 
    iplot(fig, filename='line-mode') 

die beispielsweise mit den folgenden Argumenten arbeiten würde:

 
plotPMByYear_plotly(dfM, 2008,'white','red')