Ich habe Spline-Interpolation verwendet, um eine Zeitreihe zu glätten, und möchte dem Plot auch eine horizontale Linie hinzufügen. Aber es scheint ein Problem zu geben, das ich nicht im Griff habe. Jede Hilfe wäre sehr hilfreich. Folgendes habe ich:
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()
das Problem scheint mit der Verwendung von [0,len(xs)]
für die horizontale Linienzeichnung zu sein.
Sie haben Recht, ich denke, die [0,len(xs)]
wirft Sie ab. Sie möchten die ursprüngliche x-Achsen-Variable xs
wiederverwenden und diese mit einem anderen numpy-Array der gleichen Länge zeichnen, in dem sich Ihre Variable befindet.
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()
Hoffentlich behebt das das Problem!
Sie suchen nach Achslinie (eine horizontale Achslinie). Das folgende Beispiel gibt Ihnen eine horizontale Linie bei y = 0,5.
import matplotlib.pyplot as plt
plt.axhline(y=0.5, color='r', linestyle='-')
plt.show()
Wenn Sie eine horizontale Linie in den Achsen zeichnen möchten, können Sie auch die Methode ax.hlines () verwenden. Sie müssen y
Position und xmin
und xmax
in der Datenkoordinate angeben (d. H. Ihren tatsächlichen Datenbereich in der x-Achse). Ein Beispielcode-Snippet ist:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 21, 200)
y = np.exp(-x)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.hlines(y=0.2, xmin=4, xmax=20, linewidth=2, color='r')
plt.show()
Das obige Snippet zeichnet eine horizontale Linie in den Achsen bei y=0.2
. Die horizontale Linie beginnt bei x=4
und endet um x=20
. Das generierte Bild ist:
Ein guter und einfacher Weg für diejenigen, die den Befehl axhline
immer vergessen, ist der folgende
plt.plot(x, [y]*len(x))
In deinem Fall xs = x
und y = 40
. Wenn len (x) groß ist, wird dies ineffizient und Sie sollten wirklich axhline
verwenden.
Sie können plt.grid
, um eine horizontale Linie zu zeichnen.
import numpy as np
from matplotlib import pyplot as plt
from scipy.interpolate import UnivariateSpline
from matplotlib.ticker import LinearLocator
# your data here
annual = np.arange(1,21,1)
l = np.random.random(20)
spl = UnivariateSpline(annual,l)
xs = np.linspace(1,21,200)
# plot your data
plt.plot(xs,spl(xs),'b')
# horizental line?
ax = plt.axes()
# three ticks:
ax.yaxis.set_major_locator(LinearLocator(3))
# plot grids only on y axis on major locations
plt.grid(True, which='major', axis='y')
# show
plt.show()