- 如何
vlines
在 Pandas 系列图中绘制垂直线 ( )? - 我正在使用 Pandas 绘制滚动方式等,并想用垂直线标记重要位置。
- 是否可以使用
vlines
或类似的东西来完成此任务? - 在这种情况下,x 轴是
datetime
。
问问题
97462 次
4 回答
117
plt.axvline(x_position)
它采用标准绘图格式选项(linestlye
、、color
等)
如果您引用了您的axes
对象:
ax.axvline(x, color='k', linestyle='--')
于 2013-10-06T20:54:47.207 回答
46
如果您有时间轴,并且将 Pandas 导入为 pd,则可以使用:
ax.axvline(pd.to_datetime('2015-11-01'), color='r', linestyle='--', lw=2)
对于多行:
xposition = [pd.to_datetime('2010-01-01'), pd.to_datetime('2015-12-31')]
for xc in xposition:
ax.axvline(x=xc, color='k', linestyle='-')
于 2016-03-09T20:59:44.467 回答
14
DataFrame 绘图函数返回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="--")
于 2019-09-10T10:58:32.467 回答
5
matplotlib.pyplot.vlines
- 对于时间序列,轴的日期必须是正确的日期时间对象,而不是字符串。
- 用于
pandas.to_datetime
将列转换为datetime
dtype。
- 用于
- 允许单个或多个位置
ymin
&ymax
指定为特定的 y 值,而不是百分比ylim
- 如果引用
axes
类似fig, axes = plt.subplots()
,则更plt.xlines
改为axes.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()
包版本
import matplotlib as mpl
print(mpl.__version__)
print(sns.__version__)
print(pd.__version__)
[out]:
3.3.1
0.10.1
1.1.0
于 2020-06-08T20:48:23.800 回答