【发布时间】:2022-01-16 14:56:46
【问题描述】:
我正在尝试使用此代码突出显示情节的一部分:
import pandas as pd
from pandas import DataFrame as df
import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime
import warnings
warnings.filterwarnings("ignore")
from matplotlib import dates as mdates
start = datetime.date(2020,1,1)
end = datetime.date.today()
stock = 'fb'
data = web.DataReader(stock, 'yahoo', start, end)
data.index = pd.to_datetime(data.index, format ='%Y-%m-%d')
data = data[~data.index.duplicated(keep='first')]
data['year'] = data.index.year
data['month'] = data.index.month
data['week'] = data.index.week
data['day'] = data.index.day
data.set_index('year', append=True, inplace =True)
data.set_index('month',append=True,inplace=True)
data.set_index('week',append=True,inplace=True)
data.set_index('day',append=True,inplace=True)
fig, ax = plt.subplots(dpi=300, figsize =(15,4))
plt.plot(data.index.get_level_values('Date'), data['Close'])
plt.axvspan((datetime(2020,3,12)), (datetime(2020,6,1)),
label="Labeled",color="green", alpha=0.3)
根据文档here,格式应为matplotlib.pyplot.axvspan(xmin, xmax, ymin=0, ymax=1, **kwargs)。您能否告诉我如何获得 y_min 和 y_max 的值?
locator = mdates.MonthLocator()
formatter = mdates.ConciseDateFormatter(locator)
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)
plt.show()
我试图让情节看起来像这样: https://datavizpyr.com/highlight-a-time-range-in-time-series-plot-in-python-with-matplotlib/
【问题讨论】:
-
ymin 和 ymax 的默认值为 0 和 1,因此将填充图形的整个垂直区域。如果要指定值,可以指定时间段的最小值和最大值。这是一个好答案吗?
-
我正在尝试输入一个值,例如 y_min = 200 或将其留空,但我收到以下错误:
TypeError: 'module' object is not callable。我该如何解决这个问题?谢谢 -
我以为我可以使用转换,但 axvspan 已修复。所以可以用下面的代码来计算y轴最大值为200时的ymax。
x0,x1 = ax.get_ylim();offset = 200;new_max = (offset - x0) / (x1 - x0);ax.axvspan(...,ymax=new_max) -
@r-beginners 感谢您的帮助。如果我想让它计算跨越最大高度的 ymax 怎么办?所以无论我使用什么股票代码,整个地区都会被覆盖?
-
是收盘价的最大值,所以在前面的例子中,将x1(图形区域的最大值)替换为
df['Colse'].max()。
标签: python matplotlib