Python 从Timeserie绘图中删除周六(但不包括周日或其他无数据时段)

Python 从Timeserie绘图中删除周六(但不包括周日或其他无数据时段),python,matplotlib,Python,Matplotlib,我正在绘制一个财务时间序列(见下文,这里是1个月的数据) 我想删除我在红十字会等处显示的时段,即周六。请注意,这些时段并非都是没有数据的时段,而只是周六 我知道有一些关于如何消除差距的例子,例如:。 这不是我想要的,因为他们消除了所有的差距。(不是我的本意!) 我在想,接下来的方法可能是为xaxis创建一个自定义的值序列。由于天数是序数(即1天=1的值),因此可以创建一个序列,如1、2、3、4、5、6、8、9、10、11、12、13、15、16等。每七天跳过一次-跳过的那一天当然需要是星期六

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

我想删除我在红十字会等处显示的时段,即周六。请注意,这些时段并非都是没有数据的时段,而只是周六

我知道有一些关于如何消除差距的例子,例如:。 这不是我想要的,因为他们消除了所有的差距。(不是我的本意!)

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

跳过每个星期六,我可以想象如何使用timeutil中的rrule完成它。这是在这里完成的(见下文),因为每个星期一都有一条更强的垂直线。但是我该如何把它传递给蜱虫定位器呢?事实上,matplotlib API中有一个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
数据框中的
DateTimeIndex
,则可以检查某个日期使用的是
.weekday
。然后您只需将周六的数据设置为
nan
。请参见下面的示例

代码 结果

OP希望“删除我用红十字显示的句点”。你的阴谋仍然存在。这是正确的。我还不知道如何解决这个问题。
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)