2017-08-08 6 views
0

J'essaye de lisser un graphique avec des valeurs, juste un simple tracé de ligne, mais en lissant, la courbe est tirée en dessous de zéro, mais je veux que tout soit positif. Comment cela va-t-il fonctionner?Matlibplot Graph Lissage en dessous de zéro

v est juste n'importe quelle liste avec des valeurs positives et je ne veux pas juste rendre les valeurs positives (abs(bincenters)).

def main(v): 
    window = Tk() 
    x=np.array ([1,2,3,4,5,6,7,8,9,10]) 

    p = np.array(v) 

    fig = Figure(figsize=(15,7)) 
    a = fig.add_subplot(111) 

    med = np.median(p) 
    print(med) 

    y,binEdges=np.histogram(p,bins=200) 
    bincenters = 0.5*(binEdges[1:]+binEdges[:-1]) 

    maxi = max(y) 

    x_smooth = np.linspace(bincenters.min(), bincenters.max(), len(y)*10) 
    y_smooth = spline(bincenters, y, x_smooth) 

    a.grid(True) 
    a.annotate('Median: %s' %med, xy=(med, 0), xytext=(med + max(v)/15, maxi*0.7), 
      arrowprops=dict(arrowstyle="->", 
          connectionstyle="arc3"),) 

    a.plot(x_smooth,y_smooth,'-',color="#3F5D7D") 

    a.set_title ("Histogram for %s"%product, fontsize=16) 

    canvas = FigureCanvasTkAgg(fig, master=window1) 
    canvas.get_tk_widget().pack() 
    b2 = Button(window1, text='Close', bg="#FAAC58", command= lambda : close(window)) 
    b2.pack(side=LEFT, padx=5, pady=5) 
    canvas.draw() 
    window.mainloop() 

Result, with negative values

Répondre

1

Vous pouvez les valeurs plancher y à zéro:

y_smooth = spline(bincenters, y, x_smooth) 
y_smooth = np.where(y_smooth > 0, y_smooth, 0)