plotly座標軸截斷混合設定且指定設定截斷時間的時候需要注意先後順序
- 大範圍的時間要在小範圍的時間前設定,比如日內時間的截斷要設定在日期截斷的後面
- 同範圍的規則截斷要在指定截斷前設定,對日期的截斷,規則系截斷最好在指定截斷前設定,六日截斷規則在指定日期截斷前
以上兩條為測試出來的規律,具體細節尚未細究與驗證
1.測試程式碼:繪製不設定座標軸範圍截斷的圖
df = df[['datetime', 'v']]
fig = go.Figure(data=go.Figure(go.Scatter(x=df['datetime'],
y=df['v'],
mode='lines+markers',
line=dict(width=1),
marker=dict(size=1)
)))
fig.update_xaxes(tickformat="%H:%M\n%Y-%m-%d",)
先看不設定座標軸範圍截斷的圖
中間有大片沒有資料的線,佔據了大量空間,將資料形狀擠壓得看不出來
2.測試程式碼:繪製設定座標軸範圍截斷的圖,去除座標軸中的無資料的空白的時間段
df = df[['datetime', 'v']]
資料時間序列 = pd.Series(df['datetime'].dt.date.unique())
全量時間序列 = pd.Series(pd.date_range(start=資料時間序列.min(), end=資料時間序列.max(), freq='D').date)
需要刪除時間序列 = 全量時間序列[全量時間序列.isin(資料時間序列) == False].values
需要刪除時間序列 = [i.strftime('%Y-%m-%d') for i in 需要刪除時間序列]
fig = go.Figure(data=go.Figure(go.Scatter(x=df['datetime'],
y=df['v'],
mode='lines+markers',
line=dict(width=1),
marker=dict(size=1)
)))
fig.update_xaxes(
tickformat="%H:%M\n%Y-%m-%d",
rangebreaks=[
dict(bounds=[6, 1], pattern='day of week'), # 設定週六週日截斷,規則截斷
dict(values=需要刪除時間序列), # 補充截斷一天中沒有資料的日期,指定日期截斷
dict(bounds=[11.6, 13.4], pattern="hour"), # 空白時間段,時間範圍小於天
dict(bounds=[15.1, 20.9], pattern='hour'), # 空白時間段
dict(bounds=[23.1, 8.9], pattern='hour')] # 空白時間段
)
新增時間截斷後,資料看起來就連貫了很多
3.測試程式碼:繪製設定座標軸範圍截斷的圖,去除座標軸中的無資料的空白的時間段,但是將需要截斷的時間設定在需要截斷的日期前,這樣會出現錯誤
df = df[['datetime', 'v']]
資料時間序列 = pd.Series(df['datetime'].dt.date.unique())
全量時間序列 = pd.Series(pd.date_range(start=資料時間序列.min(), end=資料時間序列.max(), freq='D').date)
需要刪除時間序列 = 全量時間序列[全量時間序列.isin(資料時間序列) == False].values
需要刪除時間序列 = [i.strftime('%Y-%m-%d') for i in 需要刪除時間序列]
fig = go.Figure(data=go.Figure(go.Scatter(x=df['datetime'],
y=df['v'],
mode='lines+markers',
line=dict(width=1),
marker=dict(size=1)
)))
fig.update_xaxes(
tickformat="%H:%M\n%Y-%m-%d",
rangebreaks=[
dict(bounds=[11.6, 13.4], pattern="hour"),
dict(bounds=[15.1, 20.9], pattern='hour'),
dict(bounds=[23.1, 8.9], pattern='hour'),
dict(bounds=[6, 1], pattern='day of week'),
dict(values=需要刪除時間序列)
# 按照規則截斷在指定日期截斷後的順序,畫出來的圖是空白
# dict(values=需要刪除時間序列),
# dict(bounds=[6, 1], pattern='day of week'),
],
)
出現座標軸重疊的現象,如下圖
當調整週末程式碼在指定日期的程式碼後面的時候,畫圖甚至是空白的