簡體   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