gpt4 book ai didi

python - 从 Timeserie 图中删除星期六(但不是星期日或其他无数据时间段)

转载 作者:行者123 更新时间:2023-12-05 07:45:42 35 4
gpt4 key购买 nike

我正在绘制一个金融时间序列(见下文,这里有 1 个月的数据)

enter image description here

我想删除我用红叉等显示的时间段,即星期六。请注意,这些时间段并非所有没有数据的时间段,而只是星期六。

我知道有一些如何消除间隙的例子,例如:http://matplotlib.org/examples/api/date_index_formatter.html .这不是我所追求的,因为它们消除了所有差距。 (不是我的意图!)。

我在想,要走的路可能是为 x 轴创建一个自定义的值序列。由于天数是序数(即 1 天 = 值 1),因此可以创建一个序列,例如 1,2,3,4,5,6,8,9,10,11,12,13, 15、16等每 7 天跳过 1 - 跳过的那一天当然需要是星期六。

我可以想象如何使用 timeutil 中的 rrule 来跳过每个星期六。这是在这里完成的(见下文),因为每个星期一都标有更强的垂直线。但是我如何将它传递给 Tick 定位器呢?事实上,在 matplotlib API 中有一个 RRuleLocator 类,但文档中没有给出如何使用它的指示:http://matplotlib.org/api/dates_api.html#matplotlib.dates.RRuleLocator .欢迎提出任何建议。

这里是我用于当前图表的代码:

fig, axes = plt.subplots(2, figsize=(20, 6))
quotes = price_data.as_matrix() # as matrix() to remove the columns header of the df
mpf.candlestick_ohlc(axes[0], quotes, width=0.01)
plt.bar(quotes[:,0] , quotes[:,5], width = 0.01)
for i , axes[i] in enumerate(axes):
axes[i].xaxis.set_major_locator(mdates.DayLocator(interval=1) )
axes[i].xaxis.set_major_formatter(mdates.DateFormatter('%a, %b %d'))
axes[i].grid(True)

# show night times with a grey shade
majors=axes[i].xaxis.get_majorticklocs()
chart_start, chart_end = (axes[i].xaxis.get_view_interval()[0],
axes[i].xaxis.get_view_interval()[1])
for major in majors:
axes[i].axvspan(max (chart_start, major-(0.3333)),
min(chart_end, major+(0.3333)),color="0.95", zorder=-1 ) #0.33 corresponds to 1/3 of a day i.e. 8h

# show mondays with a line
mondays = list(rrule(WEEKLY, byweekday=MO, dtstart= mdates.num2date(chart_start),
until=mdates.num2date(chart_end)))
for j, monday in enumerate(mondays):
axes[i].axvline(mdates.date2num(mondays[j]), linewidth=0.75, color='k', zorder=1)

最佳答案

如果您的日期是 datetime 对象,或者是 pandas DataFrame 中的 DateTimeIndex,您可以检查哪个weekday 某个日期正在使用 .weekday。然后,您只需将星期六的数据设置为 nan。请参见下面的示例。

代码

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import random
import datetime
import numpy as np

# generate some data with a datetime index
x = 400
data = pd.DataFrame([
random.random() for i in range(x)],
index=[datetime.datetime(2018, 1, 1, 0)
+ datetime.timedelta(hours=i) for i in range(x)])
# Set all data on a Saturday (5) to nan, so it doesn't show in the graph
data[data.index.weekday == 5] = np.nan

# Plot the data
fig, ax = plt.subplots(figsize=(12, 2.5))
ax.plot(data)

# Set a major tick on each weekday
days = mdates.DayLocator()
daysFmt = mdates.DateFormatter('%a')
ax.xaxis.set_major_locator(days)
ax.xaxis.set_major_formatter(daysFmt)

结果

enter image description here

关于python - 从 Timeserie 图中删除星期六(但不是星期日或其他无数据时间段),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41435138/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com