Plotly:如何在图表上显示特定范围数据的信息?

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

我必须马上说,我是Python新手,刚刚接触过其中的数据分析。 使用 Pandas 和 Plotly,从 csv 文件中获取数据,在 Pandas 中创建一个数据框(下一个 - DF),然后使用 loc[::10] 每 10 行获取一次。 DF 文件本身由数千行和数十列组成,但我只对 2 列感兴趣:时间和数据。然后我将这两列传递给 Plotly:“fig.add_trace(go.Scatter(x = DF[column Time], y = DF[column Power], mode='line+markers'))”,其中 x 是时间, y 是数据。数据中的值可以是负数、零或正数。

问题:如何在 Plotly 图表上显示有关负值和零值总共持续多长时间的信息? 比方说: 0 00:00:01 5 1 00:00:02 10 3 00:00:03 9 4 00:00:04 -0.5 5 00:00:05 -0.4 6 00:00:06 -0.3 7 00:00:07 0.0 - 4 秒持续时间 8 00:00:08 5 9 00:00:09 10 10 00:00:10 11

这需要显示在图表上。这样的值可以有很多。 我会非常感谢你,英语不是我的母语。

我还没有尝试过任何东西,我不知道它是如何工作的。也许还需要其他库。

upd:我插入了一张示例图片。我需要知道红色间隔持续多长时间(15 分钟、30 分钟或 1 小时)并将其反映在图表上。 在此输入图片描述

python pandas plotly
1个回答
0
投票

请记住发布足够数量的示例数据以帮助解决您的问题。因此,基本上,您需要计算您感兴趣或缺乏的数据的持续时间。之后,您可以绘制并注释该图。这是一个示例,当且仅当持续时间大于 60 秒时,我才设置注释:

import pandas as pd
import plotly.graph_objects as go
from datetime import datetime, timedelta

data = {
    'Time': [datetime(2023, 5, 1, 12) + timedelta(minutes=10 * i) for i in range(20)],
    'Power': [5, 3, 2, -1, -2, -3, 0, 0, 5, 2, -1, -2, 3, 5, 0, 0, -1, 0, 2, 3]
}

df = pd.DataFrame(data)

df['Time'] = pd.to_datetime(df['Time'])
df['Duration'] = df['Time'].diff()
df['Shifted Duration'] = df['Duration'].shift(-1)
df['Group'] = (df['Power'] > 0).astype(int).cumsum()

negative_durations = df[df['Power'] <= 0].groupby('Group')['Shifted Duration'].sum()

fig = go.Figure()

fig.add_trace(go.Scatter(x=df['Time'], y=df['Power'], mode='lines+markers', name='Power'))

annotations = []
for group, duration in negative_durations.items():
    start_time = df[df['Group'] == group]['Time'].min()
    if duration.total_seconds() > 60:
        annotations.append(dict(
            x=start_time,
            y=0,  
            xref="x",
            yref="y",
            text=f"{duration}",
            showarrow=True,
            arrowhead=1,
            ax=0,
            ay=-40  
        ))

fig.update_layout(annotations=annotations)

fig.show()

这给了你

enter image description here

根据您的数据进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.