어떻게 애니메이션을 추가하 plotly 그림에서 Python

0

질문

현재 이 코드:

fig= go.Figure()
for idx in range(len(reference)):
    df = reference.loc[idx]
    if df.ObjClass != 0:
        x,y = df.Polygon.exterior.xy
        fig.add_trace(go.Scatter(x=np.array(x), y=np.array(y)))
return fig

의 줄거리입 boudning 상자를 사용하여 다각형으로 구성됩니다. Moste 가능성이 가장 효율적이고,열 개선에 대한뿐만 아니라 거기에.

나의 질문은 어떻게 추가하려면 애니메이션을 기존 Plotly 그? 내 df 나는 시간 열 것에 적합한 것(df.시간). 애니메이션이 추가되는,나만을 구성하고 싶은 다각형에 대한 타임스탬프입니다.

현재 줄거리지 않고 애니메이션

편집:데이터를 추가하는 구조체

그래서 이것은 작동하지 않을 경우 플로팅,내가 설명에 나의 코멘트는 아래. 그러나 변경하는 경우를 분류하여 objid 입 대신의 시간,그것은 작동하지만 애니메이션 프레임에 정렬되지 않습니다. 내가 원하는 가장 낮은 시간이 될 첫 번째 및 가장 높은 끝에서.

ObjClass    Time    ObjID   Corner  Lat Long
0   3.0 5.9 54.0    RR  21.549906   129.418088
563 3.0 5.9 54.0    LR  23.569243   129.523022
1126    3.0 5.9 54.0    LF  23.569243   136.523022
1689    3.0 5.9 54.0    RF  21.549906   136.418088
1   3.0 5.95    54.0    RR  17.946687   114.856340
564 3.0 5.95    54.0    LR  19.726662   114.919184
1127    3.0 5.95    54.0    LF  19.726662   121.919184
1690    3.0 5.95    54.0    RF  17.946687   121.856340
2   3.0 6.0 54.0    RR  17.685873   121.115523
565 3.0 6.0 54.0    LR  19.556310   121.182149
1128    3.0 6.0 54.0    LF  19.556310   128.182149
1691    3.0 6.0 54.0    RF  17.685873   128.115523
3   3.0 6.05    54.0    RR  17.685873   121.115523
566 3.0 6.05    54.0    LR  19.556310   121.182149
1129    3.0 6.05    54.0    LF  19.556310   128.182149
1692    3.0 6.05    54.0    RF  17.685873   128.115523
4   3.0 6.1 54.0    RR  17.375609   127.925362
567 3.0 6.1 54.0    LR  19.322351   127.848100
1130    3.0 6.1 54.0    LF  19.322351   134.848100
1693    3.0 6.1 54.0    RF  17.375609   134.925362
animation pandas plot plotly
2021-11-22 14:07:05
1

최고의 응답

1

을 제공하지 않 샘플 데이터를 확보합니다. 암시적으로 당신은 정의된 데이터 구조

다각형 개체 id ObjClass 시간
다각형((58 91, 58 77, 0 73, -0 87, 58 91)) 0 1 00:00
다각형((51 102, 58 90, 7 62, 0 74, 51 102)) 0 1 01:00
다각형((40 110, 52 101, 18 54, 6 63, 40 110)) 0 1 02:00

이 가 추가 열 개체 id 같은 다각형 이 있는 서로 다른 좌표에 대한 각각의 시간

가장 간단한 방법을 만들 plotly 애니메이션은 그림은 사용 Plotly 익스프레스. 따라서 개조 데이터를 xy 시퀀스에서 데이터 프레임

import io
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
import shapely.wkt


df_p = pd.read_csv(io.StringIO("""Polygon,ObjectId,ObjClass,time
"POLYGON ((58 91, 58 77, 0 73, -0 87, 58 91))",0,1,00:00
"POLYGON ((51 102, 58 90, 7 62, 0 74, 51 102))",0,1,01:00
"POLYGON ((40 110, 52 101, 18 54, 6 63, 40 110))",0,1,02:00
"POLYGON ((28 112, 41 109, 30 52, 17 55, 28 112))",0,1,03:00
"POLYGON ((32 29, 20 33, 38 93, 50 89, 32 29))",1,1,00:00
"POLYGON ((45 31, 34 29, 25 91, 36 93, 45 31))",1,1,01:00
"POLYGON ((57 38, 47 32, 13 84, 23 90, 57 38))",1,1,02:00
"POLYGON ((65 50, 58 39, 5 72, 12 83, 65 50))",1,1,03:00
"POLYGON ((1 90, 7 90, 12 48, 6 48, 1 90))",2,1,00:00
"POLYGON ((-7 85, -2 89, 20 53, 15 49, -7 85))",2,1,01:00
"POLYGON ((-13 78, -10 83, 26 60, 23 55, -13 78))",2,1,02:00
"POLYGON ((-15 69, -14 75, 28 69, 27 63, -15 69))",2,1,03:00
"POLYGON ((59 12, 49 18, 84 92, 94 86, 59 12))",3,1,00:00
"POLYGON ((77 11, 65 11, 66 93, 78 93, 77 11))",3,1,01:00
"POLYGON ((94 17, 83 12, 49 87, 60 92, 94 17))",3,1,02:00
"POLYGON ((107 30, 99 21, 36 74, 44 83, 107 30))",3,1,03:00
"POLYGON ((9 29, 3 37, 13 43, 19 35, 9 29))",4,1,00:00
"POLYGON ((12 28, 4 34, 10 44, 18 38, 12 28))",4,1,01:00
"POLYGON ((15 29, 5 31, 7 43, 17 41, 15 29))",4,1,02:00
"POLYGON ((17 32, 8 29, 5 40, 14 43, 17 32))",4,1,03:00"""))

df_p["Polygon"] = df_p["Polygon"].apply(shapely.wkt.loads)

# explode out ploygons to x & y for plotly express
df_plot = (
    df_p["Polygon"]
    .apply(
        lambda p: [{"x": x, "y": y} for x, y in zip(p.exterior.xy[0], p.exterior.xy[1])]
    )
    .explode()
    .apply(pd.Series)
    .join(df_p)
)


px.line(df_plot, x="x", y="y", color="ObjectId", animation_frame="time")

enter image description here

샘플 데이터를 사용하여

import pandas as pd
import io
import plotly.express as px

df = pd.read_csv(
    io.StringIO(
        """ObjClass    Time    ObjID   Corner  Lat Long
0   3.0 5.9 54.0    RR  21.549906   129.418088
563 3.0 5.9 54.0    LR  23.569243   129.523022
1126    3.0 5.9 54.0    LF  23.569243   136.523022
1689    3.0 5.9 54.0    RF  21.549906   136.418088
1   3.0 5.95    54.0    RR  17.946687   114.856340
564 3.0 5.95    54.0    LR  19.726662   114.919184
1127    3.0 5.95    54.0    LF  19.726662   121.919184
1690    3.0 5.95    54.0    RF  17.946687   121.856340
2   3.0 6.0 54.0    RR  17.685873   121.115523
565 3.0 6.0 54.0    LR  19.556310   121.182149
1128    3.0 6.0 54.0    LF  19.556310   128.182149
1691    3.0 6.0 54.0    RF  17.685873   128.115523
3   3.0 6.05    54.0    RR  17.685873   121.115523
566 3.0 6.05    54.0    LR  19.556310   121.182149
1129    3.0 6.05    54.0    LF  19.556310   128.182149
1692    3.0 6.05    54.0    RF  17.685873   128.115523
4   3.0 6.1 54.0    RR  17.375609   127.925362
567 3.0 6.1 54.0    LR  19.322351   127.848100
1130    3.0 6.1 54.0    LF  19.322351   134.848100
1693    3.0 6.1 54.0    RF  17.375609   134.925362"""
    ),
    sep="\s+",
    engine="python",
)

# if polygon is a quadrangle, need five points to define it. 4 is just a linestring
# duplicate first corner
df = pd.concat([df, df.loc[df["Corner"].eq("RR")].assign(Corner="RR2")])

# need to sort by Corner, hence make it a categorical
df["Corner"] = pd.Categorical(
    df["Corner"], ["RR", "RF", "LF", "LR", "RR2"], ordered=True
)

px.line(
    df.sort_values(["ObjID", "Time", "Corner"]),
    x="Long",
    y="Lat",
    color="ObjID",
    animation_frame="Time",
).update_layout(
    xaxis={"range": [df["Long"].min(), df["Long"].max()]},
    yaxis={"range": [df["Lat"].min(), df["Lat"].max()]},
)
2021-12-03 15:41:12

마에 대한 당신의 대답이다! 도 med 을 많이! 그러나 지금은 새로운 문제입니다. 를 사용하여 예를 들어 재구성 내 데이터 프레임을 장식으로"Lat"및"긴"열이 있습니다. 그러나 그것은 매우 까다로운 방법에 정렬합니다. 면 나는 종류에 의해"objid 입"그것은 작동하지만 타임라인은 모두 엉망입니다. 면 나는 종류에 의해"시간"대신적인 확인을 하지만 그것은 단지 구획의 개별 시간 값도 불구하고,여러가 있습니다.
MartinCB

를 공유하지 않은 데이터 구조는 그래서 나는 그것을 추정. 그것처럼 당신은 데이터 구조와 다각형은 각각형은 objid 입는 일정한 시간을 통해/변환합니다. 따라서는 어떻게 구조화된 샘플 데이터를 확보합니다. 업데이트와 함께 귀하의 질문 head(10) 귀하의 데이터 프레임과 나 업데이트합니다. 이것은 모든 그에 대한 지침을 묻는 질문에 스트레스를 공유해야 샘플 데이터를 확보합니다. 을 하지 않는 끔찍한 일의 데이터를 공유하는 이미지를 강제로 어떤 answerer 사용하는 신뢰할 수 OCR 사용
Rob Raymond

추가 데이터 구조다. 조금 보이는 끔찍한 하지만 나는 희망을 복사할 수 있습니다 그것은 너무 많이 없이 번거 로움.
MartinCB

업데이트한 답변을 완전히 던져 나와 샘플 코드를 사용하여 매끈한. 나의 샘플 코드와 샘플 데이터는 관련이 없
Rob Raymond

다이기 때문에 나는 변경된 내 매끈한 다각형 접근 방식에 가까운 경기 당신의 대답이다. 원본 데이터가 포함한 다각형 물체,그러나 나는 그 때에 적응하려고 노력하고 내 df 의 예입니다.
MartinCB

ok-내 생각으로 떠나 다각형은 더 나은 지원 3,4,5 등 편들어진 다각형으로 구성됩니다. 핵심이 그것을 분류하기 전에 폭발 그
Rob Raymond

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................