Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何突出显示特定工作日(周六和周日)具有垂直颜色栏的绘图仪?_Python_Pandas_Matplotlib_Plot_Plotly - Fatal编程技术网

Python 如何突出显示特定工作日(周六和周日)具有垂直颜色栏的绘图仪?

Python 如何突出显示特定工作日(周六和周日)具有垂直颜色栏的绘图仪?,python,pandas,matplotlib,plot,plotly,Python,Pandas,Matplotlib,Plot,Plotly,我为航班绘制了每日线路图,我想突出显示所有周六和周日。我试着用axvspan来实现它,但我在努力使用它?有没有关于如何编码的建议 (flights.loc[flights['date'].dt.month.between(1, 2), 'date'] .dt.to_period('D') .value_counts() .sort_index() .plot(kind="line",figsize=(12

我为航班绘制了每日线路图,我想突出显示所有周六和周日。我试着用axvspan来实现它,但我在努力使用它?有没有关于如何编码的建议

(flights.loc[flights['date'].dt.month.between(1, 2), 'date']
         .dt.to_period('D')
         .value_counts()
         .sort_index()
         .plot(kind="line",figsize=(12,6))
 )


Thx提前获取提供的任何帮助

您可以使用pandas的
dt.weekday
获取与给定日期的工作日对应的整数。5等于周六,6等于周日(周一为0)。您可以使用此信息作为另一种方式来分割数据帧并过滤属于周六或周日的条目。正如您所提到的,它们可以使用axvspan高亮显示,并且matplotlib版本>3能够使用datetime对象作为输入。必须通过
datetime.timedelta
添加1天,因为如果
xmin=xmax
,则不会绘制矩形。 这是密码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime

#create sample data and dataframe
datelist = pd.date_range(start="2014-12-09",end="2015-03-02").tolist()
datelist += datelist #test to see whether it works with multiple entries having the same date
flights = pd.DataFrame(datelist, columns=["date"])

#plot command, save object in variable
plot = flights.loc[flights['date'].dt.month.between(1, 2), 'date'].dt.to_period('D').value_counts().sort_index().plot(kind="line",figsize=(12,6))

#filter out saturdays and sundays from the date range needed
weekends = flights.loc[(flights['date'].dt.month.between(1, 2)) & ((flights['date'].dt.weekday == 5) | (flights['date'].dt.weekday == 6)), 'date']
#5 = Saturday, 6 = Sunday

#plot axvspan for every sat or sun, set() to get unique dates
for day in set(weekends.tolist()):
    plot.axvspan(day, day + datetime.timedelta(days=1))

您可以使用pandas'
dt.weekday
获取与给定日期的工作日相对应的整数。5等于周六,6等于周日(周一为0)。您可以使用此信息作为另一种方式来分割数据帧并过滤属于周六或周日的条目。正如您所提到的,它们可以使用axvspan高亮显示,并且matplotlib版本>3能够使用datetime对象作为输入。必须通过
datetime.timedelta
添加1天,因为如果
xmin=xmax
,则不会绘制矩形。 这是密码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime

#create sample data and dataframe
datelist = pd.date_range(start="2014-12-09",end="2015-03-02").tolist()
datelist += datelist #test to see whether it works with multiple entries having the same date
flights = pd.DataFrame(datelist, columns=["date"])

#plot command, save object in variable
plot = flights.loc[flights['date'].dt.month.between(1, 2), 'date'].dt.to_period('D').value_counts().sort_index().plot(kind="line",figsize=(12,6))

#filter out saturdays and sundays from the date range needed
weekends = flights.loc[(flights['date'].dt.month.between(1, 2)) & ((flights['date'].dt.weekday == 5) | (flights['date'].dt.weekday == 6)), 'date']
#5 = Saturday, 6 = Sunday

#plot axvspan for every sat or sun, set() to get unique dates
for day in set(weekends.tolist()):
    plot.axvspan(day, day + datetime.timedelta(days=1))

使用pandas timestamp类型的日期列,可以直接使用获取日期的工作日。然后,您可以使用
df.iterrows()
检查每个日期是否为周六或周日,并在图中包括如下形状:

for index, row in df.iterrows():
    if row['date'].weekday() == 5 or row['date'].weekday() == 6:
        fig.add_shape(...)
使用这样的设置,您将得到一条线,指示每个日期是周六还是周日。但是,考虑到您处理的是一个连续的时间序列,将这些时间段作为整个时间段的一个区域来说明可能是有意义的,而不是突出显示每一天。因此,只需确定每个星期六,并将整个周期设置为每个星期六加上,即可获得:

用示例数据完成代码
使用pandas timestamp类型的日期列,可以直接使用获取日期的工作日。然后,您可以使用
df.iterrows()
检查每个日期是否为周六或周日,并在图中包括如下形状:

for index, row in df.iterrows():
    if row['date'].weekday() == 5 or row['date'].weekday() == 6:
        fig.add_shape(...)
使用这样的设置,您将得到一条线,指示每个日期是周六还是周日。但是,考虑到您处理的是一个连续的时间序列,将这些时间段作为整个时间段的一个区域来说明可能是有意义的,而不是突出显示每一天。因此,只需确定每个星期六,并将整个周期设置为每个星期六加上,即可获得:

用示例数据完成代码
有一些非常相似的问题和。有一些非常相似的问题和。