Plotly。如何使用plotly express显示时间序列数据的趋势线?

问题描述 投票:0回答:1

使用plotly express中内置的 "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

使用datetimes列作为x轴会出现错误。

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

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

pandas plotly
1个回答
0
投票

最安全的方法是在日期的序列化表示上运行回归,然后将x轴设置为字符串显示。我所说的序列化表示法是指,例如,Ben.T在他的评论中建议的方法,或者在 用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]])

鍵來設定X軸的佈局。df_tips['date'][0::40] 部分确保每个刻度线之间有一些空间。

绘图1。

enter image description here

如果你想利用数据集的其他维度,这种方法也很好用,例如: fig = px.scatter(df_tips,x='date',y='tip', color = 'sex', trendline='ols'):

Plot 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()
© www.soinside.com 2019 - 2024. All rights reserved.