wake-up-neo.net

Zeichnen Sie eine horizontale Linie mit matplotlib

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.

89
Ibe

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!

7
chill_turner

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()

sample figure

312
BlivetWidget

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:

enter image description here

17
jdhao

Zusätzlich zu der am besten bewerteten Antwort kann man axhline auch verketten, nachdem man plot für pandas eines DataFrame aufgerufen hat.

import pandas as pd

(pd.DataFrame([1, 2, 3])
   .plot(kind='bar', color='orange')
   .axhline(y=1.5));

enter image description here

4
ayorgo

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.

2
MosteM

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()

random data plot example

1
Mehdi