问题在于数据不再等距,这在聚合 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