繁体   English   中英

可视化 plotly 中的多行表示 plot

[英]Visualise Multiple lines in plotly express plot

我目前正在试验 plotly 快速图表到 plot 多个传感器测量。 我有一个 csv 数据集,我用 pandas 读取它看起来像这样 (df_full_data):

数据示例

数据在回调图中使用,其中两个下拉字段用作输入以定义年份 (year_value) 以及应在图中显示哪些传感器 (hoved)。

year_data = df_full_data[df_full_data.years == int(year_value)]
filtered_sensor = year_data[year_data['ID'].isin(hoved)]

然后我使用 px.line 到 plot 数据。

figure = px.line(filtered_sensor, x=filtered_sensor['time'], y=filtered_sensor['water_m'], color=filtered_sensor['ID'], title='Sensor Meting')

选择一个 sensorID 时一切正常,但是当我 select 两个传感器时,数据将显示在彼此后面。 这意味着第一个传感器 58 的数据将从 01/01/2019 到 31/12/2010 显示,然后 x 轴将从 01/01/2019 和 plot 传感器 64 的数据再次开始。

plot 两个数据集的结果。

我想 plot 这两个图表彼此重叠/彼此重叠,我想这与我如何排序或构建我的熊猫表以及 plotly 将如何表示它有关,但我不知道如何完成这个。 任何想法或提示如何更改它,以便数据将像这样在彼此上方表示:

正确的图形示例

尝试过我尝试为每个传感器添加跟踪:

fig = go.Figure()
for subset_id, subset in year_data.groupby('ID'):
    fig.add_trace(
        px.line(
            subset,
            x=subset['time'],
            y=subset['water_m'],
            color=subset['ID'],
            title=subset_id
        ).data[0]
    )

但它仍然给我相同的行为,即传感器是串联绘制的,而不是彼此平行绘制的。 在此处输入图像描述

我认为您正在寻找的是为您的 plot 添加第二条甚至第三条trace线。

plotly express 文档的片段

fig.add_trace(
    go.Scatter(
        x=[2, 4],
        y=[4, 8],
        mode="lines",
        line=go.scatter.Line(color="gray"),
        showlegend=False)
)

这行得通吗?

import plotly.express as px
import plotly.graph_objects as go

fig = go.Figure()

for subset_id, subset in year_data.groupby('ID'):
    fig.add_trace(
        px.line(
            subset,
            x=subset['time'],
            y=subset['water_m'],
            color=subset['ID'],
            title=subset_id
        )
    )

假设您有一个 dataframe df ,列为: 'id''time''air_Pa''water_m''year' ,代表来自某个过程的时间和压力,以及连续的行索引。 'time'格式是第一天,因此 pandas dataframe 和 plotly 图表会将其视为一系列字符串,而不是时间序列,这就是为什么来自不同传感器的图不会叠加。 这可能就是为什么您还需要一个'year'列,否则您应该能够使用'time'来分割年度数据。 只需尝试将 dayfirst 日期时间列转换为有效的 pandas 时间戳:

df.time = pandas.to_datetime(df.time,dayfirst = True)

此外,您还可以从 csv 读取已经解析的日期 dayfirst ...

df = pd.read_csv('df.csv', dayfirst=True, parse_dates=True)

......现在你的情节不会叠加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM