我在数据的x轴方面遇到麻烦。目前,它看起来像这样。
[201909240908, 201909240956, 201909241002, ...
]为YYYYMMDDHHMM
格式。该图不仅是错误的(中间不应该是直线),而且很难读取。
如何在保留日期的同时更改我的a轴数据?理想情况下,x轴值在底部会显示为DDHHMM
,而年份和月份则是隐藏的。
更新
现在显示日期好得多了。但是间隔是相等的,而不是准确的。
答案 0 :(得分:1)
这里似乎有两个问题:
日期格式:
该答案使用您的日期列表解决了日期格式问题。我们将使用pandas.DataFrame
来处理数据的格式化和传递到plotly
中,因为它们可以很好地协同工作。
这是带有注释的示例代码。 我模拟了值,但是日期是您的。
线性间距:
不幸的是,我无法找到一种具有日期轴的方法,在日期之间具有代表性的(非相等)间距。还有谁?但是下面的代码解决方案使您可以使用xaxis上的'type': 'category'
参数将日期用作xaxis。
我还没有对输出图应用任何漂亮的格式-由您决定。 :-)
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from plotly.offline import plot
# Builing date range from yours.
dates = [201909240908, 201909240956, 201909241002, 201909241056, 201909241113, 201909241156,
201909241200, 201909241227, 201909241256, 201909241301, 201909241356, 201909241456,
201909241547, 201909241556, 201909241648, 201909241656, 201909241704, 201909241756,
201909241936, 201909241956, 201909242008, 201909242056, 201909242151, 201909242156,
201909242218, 201909242256, 201909242315, 201909242356, 201909250041, 201909250056,
201909250057, 201909250156, 201909250200, 201909250256, 201909250356, 201909250400,
201909250456, 201909250556, 201909250656, 201909250756, 201909250856, 201909250956,
201909251056, 201909251156, 201909251256, 201909251356]
# Simulate values.
values = np.random.randint(250, 350, len(dates)).tolist()
# Add dates and values to a DataFrame.
df = pd.DataFrame({'Dates': dates, 'Values': values})
# Format your dates.
df['Dates'] = pd.to_datetime(dates, format='%Y%m%d%H%M').strftime('%Y-%d-%m %H:%M')
# Create plot.
trace = go.Scatter(x=df['Dates'], y=df['Values'])
layout = {}
layout.update({'xaxis': {'type': 'category'}})
layout.update({'yaxis': {'range': [0, 400]}})
fig = {'data': [trace], 'layout': layout}
plot(fig)
日期格式替代:
将日期转换为datetime
对象列表(并保留DataFrame)的另一种方法是:
datesf = [pd.datetime.strptime(str(date), "%Y%m%d%H%M") for date in dates]
这将返回:
[datetime.datetime(2019, 9, 24, 9, 8), datetime.datetime(2019, 9, 24, 9, 56), ... ]