我正在尝试在短划线环境中绘制水平条形图,但是虽然我可以绘制天数或数字等元素,但我无法获得正确的范围。换句话说,开始日期是正确的,但结束日期不正确。
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日期对象。然而,下限被绘制,但结束条在未来的某个时间结束。
我使用非日期数据检查了这些例程,它的行为符合预期。
答案 0 :(得分:2)
也许第二个日期应该是timedelata,而不是datetime。内部Python的日期时间对象引用到1970年1月1日(参见Unix Time)。这是大约47年前。您的栏的开头和结尾之间的差异看起来就是这个顺序,所以我认为它错误地解释了结束日期。
也许试试:
max_month = max(month_list) - min_month
看看是否有帮助。