ยังไงเพื่อเพิ่มให้มีการเคลื่อนไหวเมื่อต้อง plotly คิดภาษาไพธอน

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.เวลา). ตอนที่ให้มีการเคลื่อนไหวเมื่อคืนถูกเพิ่มเข้าไปข้าเพียงต้องการที่จะวางแผนที่รูปหลายเหลี่ยมสำหรับวันที่และเวลา.

ปัจจุบันวางแผนโดยไม่มีการเคลื่อนไหว

แก้ไข:การเพิ่มข้อมูล struct

งั้นนี่จะไม่ทำงานเมื่อวางแผนอย่างที่ฉันอธิบายอยู่ในความคิดเห็นทางด้านล่างนี้ แต่ถ้าฉันเปลี่ยนต้องการเรียงลำดับโดย 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

คุณยังไม่ได้เตรียมไว้ให้ตัวอย่างข้อมูล Implicitly คุณถูกกำหนดเป็นข้อมูลของเฟรม

ภาพหลายเหลี่ยม ObjectId 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

นี่ถือว่าเป็นคอลัมน์เพิ่มเติม ObjectId นั่นคือคนเดียวกับ ภาพหลายเหลี่ยม ซึ่งแตกต่างพิกัดสำหรับแต่ละค รั้ง

งานง่ายสุดทางที่จะสร้าง plotly การเคลื่อนไหวของคิดคือใช้ Plotly แสดงออก. จึ restructure ข้อมูลที่เป็น x และ y sequences มานานมากแล้ว dataframe

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

ใช้ตัวอย่างข้อมูล

  • ตัวอย่างข้อมูลไม่ได้ใช้ shapely https://shapely.readthedocs.io/en/stable/manual.html#polygons จึงใช้ของ exterior.xy อยู่ในตัวอย่างรหัสคืวรเคารพบรรพบุรุษของ
  • ตัวอย่างข้อมูลกำหนข้อมูลที่เป็นลำดับของค่าสำหรับการ ObjID อยู่ไหนเป็นเวอร์เท็กซ์ก็คือคุณสมบัติกับ หัวมุม
  • ต้องวาดภาพหลายเหลี่ยม,อนุกรมของเอ็กซ์/y นั่นรวมถึงการเดียวกันจุดที่เริ่มต้นและจุดจบคือต้องการ. นี่คงเป็นการแทรก
  • คำสั่ง สำคัญจึงกำหนด มุม มือ https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Categorical.html
  • งั้นมันออกแบบมาให้เข้าใจง่ายที่จะใช้ plotly สร้างเป็นการเคลื่อนไหวของรู้
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

ขอบคุณมากสำหรับคำตอบของคุณ! ช่วยแพทย์ออกมา! แต่ตอนนี้ฉันมีปัญหาใหม่ ใช้ตัวอย่างเช่นฉัน restructured ของฉัน dataframe ต้องเป็นแบบกับ"Lat"และ"นาน"คอลัมน์. แต่มันดูเหมือนเลือนว่าฉันค่อนของข้อมูลออกมา ถ้าฉันเรียงลำดับตาม@title:menu"ObjID"มันงานแต่งของเส้นเวลาทั้งหมดยุ่งเหยิงมาก ถ้าฉันเรียงลำดับตาม@title:menu"เวลา"แทนที่ไทม์ไลน์ก็โอเคแต่หลังจากนั้นมันเพียงอุบายหนึ่งในวัตถุต่อเวลาค่าแม้ว่ามันมีหลาย.
MartinCB

คุณยังไม่ได้ใช้ร่วมกันของคุณข้อมูลของโครงสร้างดังนั้นฉันต้อง infer มัน มันดูเหมือนว่าคุณมีข้อมูลของเฟรมกับรูปหลายเหลี่ยมที่แต่ละภาพหลายเหลี่ยมเป็น ObjId นั่นคือทั้งหมดคือค่าคงที่ผ่านเวลา/transformations. จึนั่นเป็นวิธีที่ฉัน structured ตัวอย่างข้อมูล ปรับปรุงของคุณกับคำถาม head(10) ของของคุณ dataframe และฉันจะปรับปรุง นี่คือเหตุผลทั้งดังนั้นไกด์ไลน์ถามคำถามความเครียดต้องการที่จะแบ่งปันตัวอย่างข้อมูล อย่าทำสิ่งที่เลวร้ายที่สุดของแบ่งปันข้อมูลของคุณเป็นภาพบังคับให้มี answerer ใช้ไม่น่าเชื่อถือเพีย OCR ต้องใช้มัน
Rob Raymond

เพิ่มของข้อมูลของโครงสร้างทางด้านบน ดูเหมือนิดหน่อแย่มากแต่ฉันหวังว่าคุณสามารถคัดลอกโดยไม่มีมากเกินไป hassle.
MartinCB

ปรับปรุงคำตอบ-คุณอย่าโยนฉันกับตัวอย่างรหัสโดยใช้ shapely. มันดูเหมือนของคุณตัวอย่างรหัสและตัวอย่างข้อมูลเป็นไม่เกี่ยวข้อง
Rob Raymond

Hehe นั่นเป็นเพราะฉันเปลี่ยนของฉัน Shapely ภาพหลายเหลี่ยมเข้าใกล้เพื่อเข้าใกล้ตรงกับคำตอบของคุณ ดั้งเดิมข้อมูลของมันรวมถึงภาพหลายเหลี่ยมวัตถุแต่ฉันทิ้งพวกนั้นเมื่อพยายามปรับตัวของฉัน df ของตัวอย่าง
MartinCB

โอเค-ฉันคิดออกจากเป็นรูปหลายเหลี่ยมคือดีกว่า...ที่จะคอยช่วยเหลือกัน 3,4,5 เป็นต้องด้านรูปหลายเหลี่ยม. กุญแจเหรมันก่อนที่จะระเบิดมัน
Rob Raymond

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่