你如何在熊猫的时间序列图上绘制一条垂直线?

aet*_*odd 72 python plot matplotlib pandas

你如何绘制熊猫系列图中的垂直线(vlines)?我正在使用Pandas绘制滚动方式等,并希望用垂直线标记重要位置.是否可以使用vlines或类似的东西来实现这一目标?如果是这样,有人可以提供一个例子吗?在这种情况下,x轴是日期时间.

tac*_*ell 102

plt.axvline(x_position)
Run Code Online (Sandbox Code Playgroud)

它采用标准的绘图格式选项(linestlye,color等)

(DOC)

如果您有axes对象的引用:

ax.axvline(x, color='k', linestyle='--')
Run Code Online (Sandbox Code Playgroud)

  • 是的,您可以访问ax对象ax = s.plot(),其中s是pandas.Series (2认同)

zbi*_*nsd 33

如果您有时间轴,并且已将Pandas导入为pd,则可以使用:

ax.axvline(pd.to_datetime('2015-11-01'), color='r', linestyle='--', lw=2)
Run Code Online (Sandbox Code Playgroud)

对于多行:

xposition = [pd.to_datetime('2010-01-01'), pd.to_datetime('2015-12-31')]
for xc in xposition:
    ax.axvline(x=xc, color='k', linestyle='-')
Run Code Online (Sandbox Code Playgroud)


Rom*_*rac 14

DataFrame plot 函数返回AxesSubplot对象,您可以在其上添加任意数量的行。看看下面的代码示例:

%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="--")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Tre*_*ney 11

matplotlib.pyplot.vlines

  • 对于时间序列,轴的日期必须是正确的日期时间对象,而不是字符串。
  • 允许单个或多个位置
  • ymin&ymax被指定为特定的 y 值,而不是百分比ylim
  • 如果引用axes类似的内容fig, axes = plt.subplots(),则更plt.xlines改为axes.xlines
  • 另请参阅如何在给定绘图上绘制垂直线
  • 测试于python 3.10, pandas 1.4.2, matplotlib 3.5.1,seaborn 0.11.2

导入和样本数据

from datetime import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns  # if using seaborn

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

# display(df.head())
                   v
2020-06-08  1.000000
2020-06-09  1.004625
2020-06-10  1.009272
2020-06-11  1.013939
2020-06-12  1.018629
Run Code Online (Sandbox Code Playgroud)

绘制初始图

使用matplotlib.pyplot.plotmatplotlib.axes.Axes.plot

fig, ax = plt.subplots(figsize=(9, 6))
ax.plot('v', data=df, label='v')
ax.set(xlabel='date', ylabel='v')
Run Code Online (Sandbox Code Playgroud)

使用pandas.DataFrame.plot

ax = df.plot(ylabel='v', figsize=(9, 6))
Run Code Online (Sandbox Code Playgroud)

使用seaborn.lineplot

fig, ax = plt.subplots(figsize=(9, 6))
sns.lineplot(data=df, ax=ax)
ax.set(ylabel='v')
Run Code Online (Sandbox Code Playgroud)

添加垂直线

  • 这应该遵循用于绘制绘图的 3 种方法中的任何一种
y_min = df.v.min()
y_max = df.v.max()

# add x-positions as a list of date strings
ax.vlines(x=['2020-07-14', '2021-07-14'], ymin=y_min, ymax=y_max, colors='purple', ls='--', lw=2, label='vline_multiple')

# add x-positions as a datetime
ax.vlines(x=datetime(2020, 12, 25), ymin=4, ymax=9, colors='green', ls=':', lw=2, label='vline_single')

ax.legend(bbox_to_anchor=(1.04, 0.5), loc="center left")
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述