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

s1ag04yj  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(124)

使用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

字符串
使用一列日期时间作为x轴给出错误:

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


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

fsi0uk1n

fsi0uk1n1#

最安全的方法是在日期的序列化表示上运行回归,然后将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]部分确保每个刻度标记之间有一些空间。

情节一:


的数据
如果你想使用数据集的其他维度,这种方法甚至可以很好地工作,例如:fig = px.scatter(df_tips,x='date',y='tip', color = 'sex', trendline='ols')

情节二:


完整编码:

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()

m4pnthwp

m4pnthwp2#

下面的代码工作并显示了漂亮的图表

import plotly.express as px
import pandas as pd
import numpy as np

# Sample data
data = {
    "value": [6, 10, 15],
    "timestamp": ["2023-12-01 09:26:15", "2023-12-01 09:30:15", "2023-12-01 09:45:14"],
}

data["timestamp"] = np.array(data["timestamp"], dtype="datetime64")

df = pd.DataFrame(data)

# Create a scatter plot with a trendline
fig = px.scatter(
    df, x="timestamp", y="value", trendline="ols", title="Trendline for Value over Time"
)

# Show the plot
fig.show()

字符串

相关问题