2015-10-28 64 views
30

Ho usato l'interpolazione spline per arrotondare una serie temporale e vorrei anche aggiungere una linea orizzontale alla trama. Ma sembra esserci un problema che è fuori dalle mie mani. Qualsiasi assistenza sarebbe davvero utile. Ecco quello che ho:Tracciare una linea orizzontale usando matplotlib

annual = np.arange(1,21,1) 
l = np.array(value_list) # a list with 20 values 
spl = UnivariateSpline(annual,l) 
xs = np.linspace(1,21,200) 
plt.plot(xs,spl(xs),'b') 

plt.plot([0,len(xs)],[40,40],'r--',lw=2) 
pylab.ylim([0,200]) 
plt.show() 

problema sembra essere con il mio uso di [0,len(xs)] per la linea tracciato orizzontale.

risposta

7

Sei corretto, penso che lo [0,len(xs)] ti stacchi. Dovrai riutilizzare la variabile originale dell'asse x xs e tracciarla con un'altra matrice numpy della stessa lunghezza in cui è contenuta la variabile.

annual = np.arange(1,21,1) 
l = np.array(value_list) # a list with 20 values 
spl = UnivariateSpline(annual,l) 
xs = np.linspace(1,21,200) 
plt.plot(xs,spl(xs),'b') 

#####horizontal line 
horiz_line_data = np.array([40 for i in xrange(len(xs))]) 
plt.plot(xs, horiz_line_data, 'r--') 
###########plt.plot([0,len(xs)],[40,40],'r--',lw=2) 
pylab.ylim([0,200]) 
plt.show() 

Speriamo che risolva il problema!

+0

Funziona. Grazie! – Ibe

+2

Funziona, ma non è particolarmente efficiente, specialmente perché stai creando un array potenzialmente molto grande a seconda dei dati. Se hai intenzione di farlo in questo modo, sarebbe più intelligente avere due punti dati, uno all'inizio e uno alla fine. Ancora, matplotlib ha già una funzione dedicata per le linee orizzontali. – BlivetWidget

114

Stai cercando axhline (una linea dell'asse orizzontale). Il seguente ti darà una linea orizzontale a y = 0.5, per esempio.

import matplotlib.pyplot as plt 
plt.axhline(y=0.5, color='r', linestyle='-') 
plt.show() 
+1

È semplice e funziona con i documenti – Ibe

+3

: ['axhline'] (https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline). – handle

Problemi correlati