日期绘图似乎在破折号绘图框架中被打破

时间:2017-06-23 16:01:23

标签: python flask plotly

我正在尝试在短划线环境中绘制水平条形图,但是虽然我可以绘制天数或数字等元素,但我无法获得正确的范围。换句话说,开始日期是正确的,但结束日期不正确。

def build_data(contract_name, stream): # one stream only
    data = []
    month_list = sorted([z['month'] for z in stream['monthList']])
    month_list = [datetime.datetime.strptime(month, '%Y-%m-%d') for month in month_list]
    print month_list

    min_month = min(month_list)
    max_month = max(month_list)

    start = go.Bar(x=[min_month], y=[contract_name], orientation = 'h', marker=dict(color='rgba(1,1,1, 0.0)'))
    end = go.Bar(x=[max_month], y=[contract_name], orientation = 'h', marker=dict(color='rgba(55, 128, 191, 0.7)', 
        line=dict( color='rgba(55, 128, 191, 1.0)', width=2,)))
    data.append(start)
    data.append(end)
    return data


def plot_bar(data):
    app.layout = html.Div(children=[html.H1(children=''), html.Div(children='''History.'''),

    dcc.Graph(
        figure=go.Figure(
        data = data,
        layout=go.Layout(title='', showlegend=False, barmode='stack', margin=go.Margin(l=200, r=0, t=40, b=20))),
    style={'height': 300},
    id='my-graph')
    ])      


if __name__ == '__main__':
    data = build_data('xxx', example_stream)
    plot_bar(data)
    print data
    app.run_server(debug=True)

输入数据:

example_stream={'status': 'active', 'monthList': [{'month': '2017-04-01'}, {'month': '2017-06-01'}]}

最重要的方面是有两个日期:'2017-05-01'和'2017-04-01',转换为python日期对象。然而,下限被绘制,但结束条在未来的某个时间结束。

我使用非日期数据检查了这些例程,它的行为符合预期。

我把图表放在下面:Horizontal axis is way off

1 个答案:

答案 0 :(得分:2)

也许第二个日期应该是timedelata,而不是datetime。内部Python的日期时间对象引用到1970年1月1日(参见Unix Time)。这是大约47年前。您的栏的开头和结尾之间的差异看起来就是这个顺序,所以我认为它错误地解释了结束日期。

也许试试:

max_month = max(month_list) - min_month

看看是否有帮助。