- Wie zeichnet man eine vertikale Linie (
vlines
) in einem Pandas-Serienplot? - Ich benutze Pandas, um Rollmittel usw. zu zeichnen, und möchte wichtige Positionen mit einer vertikalen Linie markieren.
- Ist es möglich, dies zu verwenden
vlines
oder etwas Ähnliches? - In diesem Fall ist die x-Achse
datetime
.
python
matplotlib
plot
pandas
aetodd
quelle
quelle
Wenn Sie eine Zeitachse haben und Pandas als pd importiert haben, können Sie Folgendes verwenden:
ax.axvline(pd.to_datetime('2015-11-01'), color='r', linestyle='--', lw=2)
Für mehrere Zeilen:
xposition = [pd.to_datetime('2010-01-01'), pd.to_datetime('2015-12-31')] for xc in xposition: ax.axvline(x=xc, color='k', linestyle='-')
quelle
xposition = [pd.to_datetime('01/04/2016'), pd.to_datetime('02/04/2016'),pd.to_datetime('03/04/2016')]
dannfor xc in xposition: ax.axvline(x=xc, color='k', linestyle='-')
. Und ich habe :ValueError: ordinal must be >= 1.
. Was ist los?Die DataFrame-Plotfunktion gibt ein
AxesSubplot
Objekt zurück und Sie können so viele Zeilen hinzufügen, wie Sie möchten. Schauen Sie sich das folgende Codebeispiel an:%matplotlib inline import pandas as pd import numpy as np df = pd.DataFrame(index=pd.date_range("2019-07-01", "2019-07-31")) # for sample data only df["y"] = np.logspace(0, 1, num=len(df)) # for sample data only ax = df.plot() # you can add here as many lines as you want ax.axhline(6, color="red", linestyle="--") ax.axvline("2019-07-24", color="red", linestyle="--")
quelle
matplotlib.pyplot.vlines
pandas.to_datetime
diesedatetime
Option , um Spalten in dtype zu konvertieren.ymin
&ymax
werden als spezifischer y-Wert angegeben, nicht als Prozent vonylim
axes
mit etwas wie referenzierenfig, axes = plt.subplots()
, wechseln Sieplt.xlines
zuaxes.xlines
plt.plot()
&sns.lineplot()
from datetime import datetime import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # if using seaborn plt.style.use('seaborn') # these plots use this style # configure synthetic dataframe df = pd.DataFrame(index=pd.bdate_range(datetime(2020, 6, 8), freq='1d', periods=500).tolist()) df['v'] = np.logspace(0, 1, num=len(df)) # plot plt.plot('v', data=df, color='magenta') y_min = df.v.min() y_max = df.v.max() plt.vlines(x=['2020-07-14', '2021-07-14'], ymin=y_min, ymax=y_max, colors='purple', ls='--', lw=2, label='vline_multiple') plt.vlines(x=datetime(2021, 9, 14), ymin=4, ymax=9, colors='green', ls=':', lw=2, label='vline_single') plt.legend(bbox_to_anchor=(1.04, 0.5), loc="center left") plt.show()
df.plot()
df.plot(color='magenta') ticks, _ = plt.xticks() print(f'Date format is pandas api format: {ticks}') y_min = df.v.min() y_max = df.v.max() plt.vlines(x=['2020-07-14', '2021-07-14'], ymin=y_min, ymax=y_max, colors='purple', ls='--', lw=2, label='vline_multiple') plt.vlines(x='2020-12-25', ymin=y_min, ymax=8, colors='green', ls=':', lw=2, label='vline_single') plt.legend(bbox_to_anchor=(1.04, 0.5), loc="center left") plt.show()
Paketversionen
import matplotlib as mpl print(mpl.__version__) print(sns.__version__) print(pd.__version__) [out]: 3.3.1 0.10.1 1.1.0
quelle
plt.style.use('seaborn')