1

我愿意在同一张图表上绘制 3 个时间序列。数据源是一个pandas.DataFrame()对象,存在的类型Timestamp,以及使用 的颜色参数datetime.date从同一列绘制的 3 个不同的时间序列。Valueplotly.express.line()

图表上显示了 3 条线,但每条线都伴随着某种趋势线。我在函数签名中看不到如何禁用这些趋势线。你能帮忙吗?

我做了几次尝试,例如使用另一个color,但趋势线只是停留在那里。

请在下面的代码片段和结果图表中找到。

import plotly.io as pio
import plotly.express as px
pio.renderers = 'jupyterlab'
fig = px.line(data_frame=df, x='Timestamp', y='Value', color='Position_Type')
fig.show()

(如果相关,我正在使用jupyterlab

散点图截图

屏幕上的时间戳如下所示(这是 [常规] 每周时间序列):

大豆时间序列数据

并且,根据类型:

type(df.Timestamp[0])
> datetime.date

我要补充的是,我最初认为是趋势线的线看起来更像是从每个时间序列的第一个数据点到最后一个数据点的直线。

4

2 回答 2

2
df_melt = df_melt.sort_values('datetime_id')

排序摆脱了那些“环绕”。感谢以上建议。使用 Plotly 4.8.2。

于 2020-08-03T15:46:51.960 回答
1

介绍:

您提供的数据样本是一个图像,并且不是很容易使用,所以我将使用一些采样的随机时间序列来提供建议。顺便说一句,您的数据样本中的变量与您使用的变量不匹配px.Scatter

我正在使用 plotly 版本'4.2.0',无法重现您的问题。希望无论如何你会发现这个建议很有用。

使用这样结构的数据...

     Timestamp Position_type      value
145 2020-02-15        value3  86.418593
146 2020-02-16        value3  78.285128
147 2020-02-17        value3  79.665202
148 2020-02-18        value3  84.502445
149 2020-02-19        value3  91.287312

...我能够制作这个情节...

在此处输入图像描述

...使用此代码:

# imports
from plotly.subplots import make_subplots
import plotly.graph_objs as go
import pandas as pd
import numpy as np

# data
np.random.seed(123)
frame_rows = 50
n_plots = 2
frame_columns = ['V_'+str(e) for e in list(range(n_plots+1))]
df = pd.DataFrame(np.random.uniform(-10,10,size=(frame_rows, len(frame_columns))),
                  index=pd.date_range('1/1/2020', periods=frame_rows),
                    columns=frame_columns)
df=df.cumsum()+100
df.iloc[0]=100
df.reset_index(inplace=True)

df.columns=['Timestamp','value1', 'value2', 'value3' ]
varNames=df.columns[1:]


# melt dataframe with timeseries from wide to long format.
# YOUR dataset seems to be organized in a long format since
# you're able to set color using a variable name
df_long = pd.melt(df, id_vars=['Timestamp'], value_vars=varNames, var_name='Position_type', value_name='value')
#df_long.tail()

# plotly time
import plotly.io as pio
import plotly.express as px
#pio.renderers = 'jupyterlab'
fig = px.scatter(data_frame=df_long, x='Timestamp', y='value', color='Position_type')
#fig = px.line(data_frame=df_long, x='Timestamp', y='value', color='Position_type')
fig.show()

如果你改变...

 px.scatter(data_frame=df_long, x='Timestamp', y='value', color='Position_type')

...至...

fig = px.line(data_frame=df_long, x='Timestamp', y='value', color='Position_type')

...你会得到这个情节:

肉眼所见没有趋势线。

在此处输入图像描述

编辑 - 我想我知道发生了什么......

仔细看了你的图,我意识到这些线不是趋势线。趋势线通常不会从系列的初始值开始,并以系列的最后一个值结束。这就是所有三个系列都发生的事情。所以我认为你在某处有一些错误或重复的时间戳。

于 2019-12-05T12:31:00.923 回答