在对时间数据进行归一化后,在单个图形中针对处于不同时间限制的时间数据绘制值

Plotting values against time data, which is in different time limits, in a sigle graph after normalising time data

我有一个数据框,它有一些与时间数据相对应的值。此处的时间数据采用离散单位,因为 Time 列中给出了 int 数据类型。在此数据框中,时间间隔是不规则的,描述了 Event 列中给出的某些事件。必须绘制的值在 Values 列中。

data = {'Time':[21,22,23,24,25,26,27,28,29,30,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,10],
        'Event':[8,8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3],
        'Values':[10,15,23,17,18,26,24,30,35,42,44,42,38,36,34,30,27,25,27,24,1,0,2,3,5,26,30,40,42,50]}

data_df = pd.DataFrame(data)
data_df

使用以下代码,我能够根据事件的时间值获取按事件分隔的图表:

fig = px.line(data_df, 
              x='Time', 
              y='Values', 
              color='Event',
              facet_col = 'Event',
              facet_col_wrap=1
             )
fig.update_xaxes(matches=None, showticklabels = True)
fig.show()

输出:

现在,我很好奇是否有可能以某种方式将这些图合并到具有标准化 x 轴的单个图中。时间值下限 = 0。时间值上限 = 所有事件的最大时间间隔。基本上 x 轴应该足够大以容纳所有图形。

期望的输出: 我能想到的方法是创建另一个具有标准化 Time 值的列,然后绘制单个图形。在这里,我很好奇是否可以避免这种情况。如有任何相关信息,我们将不胜感激。

  • 已使用 pandasTime 变基为每个 Event[=22] 的序列=]
  • plotly 然后直截了当
import pandas as pd
import plotly.express as px

# fmt: off
data = {'Time':[21,22,23,24,25,26,27,28,29,30,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,10],
        'Event':[8,8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3],
        'Values':[10,15,23,17,18,26,24,30,35,42,44,42,38,36,34,30,27,25,27,24,1,0,2,3,5,26,30,40,42,50]}
# fmt: on

data_df = pd.DataFrame(data)

px.line(
    data_df.groupby("Event").apply(lambda d: d.assign(Time=range(1, len(d)+1, 1))),
    x="Time",
    y="Values",
    color="Event",
)