xaxis上有日期的加法绘图不显示

2024-05-29 02:57:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图绘制多个矩形条,覆盖两个选定日期之间的区域

fig=go.Figure()
for i in range(len(holiday)):
    fig.add_vrect(x0=holiday['dateA'].iloc[i], x1=holiday['dateB'].iloc[i], fillcolor='red', opacity=0.8, layer="below", line_width=0)
fig.show()

holiday是一个数据框,有两列datetime.date()类型的日期,我不知道为什么它不工作,请帮助我


Tags: inadd区域goforlenfig绘制
1条回答
网友
1楼 · 发布于 2024-05-29 02:57:48
  • 你的问题没有提供基础数据或样本数据。因此,我模拟了一些
  • 很明显,下面我以一种不同的方式讲述了假期。如果没有一个可复制的示例,我无法评论代码的错误
from datetime import datetime
import plotly.express as px
import pandas as pd
import numpy as np
import random

from pandas.tseries.offsets import DateOffset, WeekOfMonth
from pandas.tseries.holiday import sunday_to_monday, AbstractHolidayCalendar, \
    Holiday, USMemorialDay, USLaborDay, USColumbusDay, USThanksgivingDay


class BankCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday("New Year's Day", month=1, day=1, observance=sunday_to_monday),
        Holiday("Martin Luther King Jr.'s Birthday", month=1, day=1, offset=WeekOfMonth(week=3, weekday=1)),
        Holiday("Washington's Birthday", month=2, day=1, offset=WeekOfMonth(week=3, weekday=1)),
        USMemorialDay,
        Holiday("Independence Day", month=7, day=4, observance=sunday_to_monday),
        USLaborDay,
        USColumbusDay,
        Holiday("Veteran's Day", month=11, day=11, observance=sunday_to_monday),
        USThanksgivingDay,
        Holiday("Christmas Day", month=12, day=25, observance=sunday_to_monday),
    ]

# create some sample holodays and data to plot
cal = BankCalendar()
df = pd.DataFrame(cal.holidays(return_name=True, start="1-Jan-2021", end="31-Dec-2021")).rename(columns={0:"name"})
df2 = pd.DataFrame(index=pd.date_range("1-jan-2021","31-dec-2021"), data={"val":np.random.uniform(1,5,365)})

# create plot and add rectangles, for purpose of demo, a holdiday is 1 to 10 days ...
fig = px.line(df2, x=df2.index, y="val").update_traces(line={"color":"yellow"})
for h in df.reset_index().values:
    fig.add_vrect(x0=h[0], x1=h[0]+pd.Timedelta(days=random.randint(1,10)), 
                  annotation={"text":h[1], "textangle":-90}, 
                  fillcolor='red', opacity=0.3, layer="below", line_width=0)
    
fig

enter image description here

相关问题 更多 >

    热门问题