plotly.py
plotly.py copied to clipboard
BUG: rangebreaks for datetime axises, the value+dvalue doesn't work with bounds
It looks that the value+dvalue
mode doesn't work well with the bounds
mode for rangebreak
parameter of the datetime axis. Below is an simple example to replicate the issue:
packages import and data preparation:
import numpy as np
import pandas as pd
from pandas.tseries.offsets import CustomBusinessHour, BusinessDay
from pandas.tseries.holiday import USFederalHolidayCalendar
import plotly.offline as py
import plotly.graph_objs as go
x = pd.bdate_range('2020-12-15', '2021-01-15', freq=CustomBusinessHour(calendar=USFederalHolidayCalendar()))
y = np.sin(np.arange(len(x))/3)
Scenario I, bounds only to exclude non-business hours and weekends
layout1=go.Layout(xaxis=dict(tickangle=45, rangebreaks=[
dict(pattern='hour', bounds=[17, 9]),
dict(bounds=['sat', 'mon'])
]))
fig1 = go.Figure(data=go.Scatter(x=x, y=y), layout=layout1)
fig1.show()
We see the discontinuity on business-day holidays 2020-12-25, 2021-01-01 as expected.
Scenario II, trying to exclude the holidays with values
dict
missing_date2 = list(set(pd.bdate_range('2020-12-15', '2021-01-15')) - set(x.normalize()))
layout2=go.Layout(xaxis=dict(tickangle=45, rangebreaks=[
dict(values=missing_date2),
dict(pattern='hour', bounds=[17, 9]),
dict(bounds=['sat', 'mon']),
]))
fig2 = go.Figure(data=go.Scatter(x=x, y=y), layout=layout2)
fig2.show()
We see the plot get messed.
Scenario III, use values
for day level only:
Even I don't use bounds
for weekends, it still faces same problem:
missing_date3 = list(set(pd.date_range('2020-12-15', '2021-01-15')) - set(x.normalize()))
layout3=go.Layout(xaxis=dict(tickangle=45, rangebreaks=[
dict(values=missing_date3),
dict(pattern='hour', bounds=[17, 9]),
]))
fig3 = go.Figure(data=go.Scatter(x=x, y=y), layout=layout3)
fig3.show()
Can someone help take a look please?