plotly 坐标轴范围截断rangebreaks使用的一个注意点

科技资讯 投稿 6900 0 评论

plotly 坐标轴范围截断rangebreaks使用的一个注意点

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',

    ],

出现坐标轴重叠的现象,如下图
当调整周末代码在指定日期的代码后面的时候,画图甚至是空白的

编程笔记 » plotly 坐标轴范围截断rangebreaks使用的一个注意点

赞同 (25) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽