【问题标题】:How can I suppress weekend days on matplot datetime index?如何在 matplot 日期时间索引上抑制周末?
【发布时间】:2021-06-28 18:48:37
【问题描述】:

在 mathplot 上绘制财务数据系列时遇到问题。

基本上,我的数据框包含一个日期时间索引和 3 列数据(市场价格:“开盘价”、“收盘价”和“PRC_RL”)。

DATETIME 索引中的数据只包含工作日。

根据日期时间索引绘制系列时会出现此问题,绘图显示周末有间隙。我该如何解决?

【问题讨论】:

标签: python matplotlib plot time-series


【解决方案1】:

问题在于数据不再等距,这在聚合 x 轴上的标签时会产生问题。尽管如此,您仍然可以通过对数据进行切片来做到这一点:

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
# create dummy data
dates = pd.date_range(start='24/4/2020', end='24/5/2020', freq='D')
val = np.random.rand(len(dates))
df = pd.DataFrame()
df['date'] = dates
df['value'] = val

现在用

绘制虚拟数据
df.plot(x='date',y='value')

结果:

可以通过创建逻辑向量lg 来排除周末,表示非周末:

lg = []
for day in df['date']:
    day_ISO = day.isoweekday()
    if day_ISO == 6 or day_ISO == 7: # check for saturday & sunday
        lg.append( False )
    else:
        lg.append( True )

并再次绘制数据,但使用此逻辑向量进行切片:

df[lg].plot(x='date',y='value')

您还可以通过这种方式轻松查看银行假期。

上面的虚拟数据表明您实际上遗漏了数据。如果您使用财务数据,则情况并非如此,因为这些数据根本不会在周末生成。所以这条线仍然是连续的,但 x 轴不再清晰。所以我建议调整轴,例如通过为每个标签设置明确的日期,或者在情节本身中用一条灰色的小垂直线来表示被切碎的日子......或类似的东西

编辑:使用pandas.DatetimeInex

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
# create dummy data
dates = pd.date_range(start='24/4/2020', end='24/5/2020', freq='D')
val = np.random.rand(len(dates))
df = pd.DataFrame()
df['date'] = dates
df['value'] = val
df = df.set_index('date') # create a pandas.DatetimeIndex

lg = []
for day in df.index: # iterate over the indeces
    day_ISO = day.isoweekday()
    if day_ISO == 6 or day_ISO == 7: # check for saturday & sunday
        lg.append( False )
    else:
        lg.append( True )

df[lg].plot(y='value') # no need to set the x-axis explicitly

【讨论】:

  • 我明白你的意思。这当然是一种解决方法。但是,数据帧中的日期时间数据是索引,所以我想通过直接操作数据帧索引来找到一种解决方法。
  • @RodrigoAzevedo 好的,我的阅读速度太快了。您可能希望下次发布MVE,以便代码适合您的确切数据。无论如何,方法保持不变,我为您调整了代码以使用pandas.DatetimeIndex
猜你喜欢
  • 2017-01-08
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多