绘图:如何使用绘图表示法显示时间序列数据的趋势线?

时间:2020-05-06 19:52:48

标签: python pandas plotly

首先使用内置的“ tips”数据框以图方式表达,然后首先创建一个datetime列。

import plotly.express as px
import pandas as pd
from datetime import datetime

df_tips = px.data.tips()
datelist = pd.date_range(datetime.today(), periods=df_tips.shape[0]).tolist()
df_tips['date'] = datelist

使用一列日期时间作为x轴会出现错误:

px.scatter(df_tips,x='date',y='tip',trendline='ols')    
...
TypeError: cannot astype a datetimelike from [datetime64[ns]] to [int32]

不使用任何其他列。有什么好方法吗?

1 个答案:

答案 0 :(得分:0)

最安全的方法是对日期的序列化表示进行回归,然后将x轴设置为向上显示为字符串。所谓序列化表示,是指Ben.T在其评论中建议的方法,或 Plot best fit line with plotly。然后,您可以使用以下方法设置x轴的布局:

fig.update_xaxes(tickangle=45,
                 tickmode = 'array',
                 tickvals = df_tips['date'][0::40],
                 ticktext= [d.strftime('%Y-%m-%d') for d in datelist[0::40]])

df_tips['date'][0::40]部分确保每个刻度线之间有一定的间距。

情节1:

enter image description here

如果您想使用数据集的其他维度,例如:fig = px.scatter(df_tips,x='date',y='tip', color = 'sex', trendline='ols')

图2:

enter image description here

完整代码:

import plotly.express as px
import pandas as pd
from datetime import datetime

df_tips = px.data.tips()
df_tips['date'] = df_tips.index
datelist = pd.date_range(datetime.today(), periods=df_tips.shape[0]).tolist()

fig = px.scatter(df_tips,x='date',y='tip', trendline='ols')
fig = px.scatter(df_tips,x='date',y='tip', color = 'sex', trendline='ols')  

fig.update_xaxes(tickangle=45,
                 tickmode = 'array',
                 tickvals = df_tips['date'][0::40],
                 ticktext= [d.strftime('%Y-%m-%d') for d in datelist])

fig.show()