कैसे करने के लिए एनीमेशन जोड़ने के लिए 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.समय). जब एनीमेशन जोड़ा गया है में, मैं केवल चाहते हैं, साजिश करने के लिए बहुभुज के लिए है कि टाइमस्टैम्प.

वर्तमान साजिश एनीमेशन के बिना

संपादन: जोड़ने के लिए डेटा संरचना

तो यह काम नहीं करता है जब की साजिश रचने के रूप में, मैं समझाने में मेरी टिप्पणी के नीचे. लेकिन अगर मैं परिवर्तन करने के लिए छँटाई के द्वारा 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

तुम नहीं प्रदान की नमूना डेटा. उलझाव से आप परिभाषित कर रहे हैं एक डेटा फ्रेम

बहुभुज 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 एक्सप्रेस. इसलिए डेटा का पुनर्गठन किया जा करने के लिए x और y दृश्यों में एक लंबे 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

नमूना डेटा का उपयोग कर

  • नमूना डेटा का उपयोग नहीं है सुडौल https://shapely.readthedocs.io/en/stable/manual.html#polygons इसलिए उपयोग की exterior.xy में नमूना कोड अप्रासंगिक है
  • नमूना डेटा को परिभाषित करता है के रूप में डेटा का एक अनुक्रम मूल्यों के लिए एक ObjID , जहां एक शीर्ष के साथ योग्य है कोने में
  • आकर्षित करने के लिए एक बहुभुज, एक के अनुक्रम x/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

बहुत बहुत धन्यवाद आपके उत्तर के लिए! मदद मेड बाहर एक बहुत कुछ! हालांकि अब मैं एक नई समस्या है । का उपयोग कर अपने उदाहरण मैं पुनर्गठन मेरे dataframe करने के लिए एक लंबे समय प्रारूप के साथ "अक्षांश" और "लंबे" कॉलम । हालांकि यह लगता है बहुत picky कैसे मैं एक तरह से मेरे डेटा. अगर मैं "द्वारा क्रमबद्ध ObjID" यह काम है, लेकिन समय के सब गड़बड़ है. अगर मैं एक तरह से "समय" इसके बजाय, इस समय ठीक है, लेकिन फिर यह केवल फ्लैट्स वस्तुओं की एक प्रति समय के मूल्य, यहां तक कि हालांकि वहाँ रहे हैं कई.
MartinCB

आप साझा नहीं किया है अपने डेटा संरचना तो मैं था अनुमान करने के लिए । यह आप की तरह लग रहा है डेटा के साथ फ्रेम, बहुभुज, जहां प्रत्येक बहुभुज एक ObjId है कि लगातार समय के माध्यम से / परिवर्तनों. इसलिए कि मैं कैसे संरचित नमूना डेटा. अद्यतन अपने प्रश्न के साथ head(10) अपने dataframe और मैं अद्यतन हूँ. यह है क्यों सब इतने के दिशा-निर्देशों पर सवाल पूछ तनाव की जरूरत है, साझा करने के लिए नमूना डेटा । नहीं क्या भयानक बात है के साथ अपने डेटा को साझा करने के रूप में एक छवि के लिए मजबूर किसी भी उत्तर का उपयोग करने के लिए अविश्वसनीय ओसीआर का उपयोग करने के लिए यह
Rob Raymond

जोड़ा गया मेरे डेटा संरचना के ऊपर. एक सा लग रहा है भयानक है लेकिन मुझे उम्मीद है कि आप कॉपी कर सकते हैं यह भी बहुत परेशानी के बिना.
MartinCB

अद्यतन जवाब - आप पूरी तरह से मुझे फेंक दिया के साथ नमूना कोड का उपयोग सुडौल. यह प्रतीत होता है अपने नमूना कोड और नमूना डेटा कर रहे हैं असंबंधित
Rob Raymond

Hehe है कि क्योंकि मैं बदल गया मेरे सुडौल बहुभुज दृष्टिकोण करने के लिए करीब मैच अपने जवाब. मूल डेटा को शामिल करता है बहुभुज वस्तुओं, लेकिन मैं गिरा जब उन लोगों के अनुकूल करने की कोशिश कर मेरे df करने के लिए अपने उदाहरण है.
MartinCB

ठीक है - मुझे लगता है कि छोड़ने के रूप में बहुभुज बेहतर है... समर्थन करेंगे कि 3,4,5, आदि पक्षीय बहुभुज. प्रमुख है की तरह यह विस्फोट से पहले यह
Rob Raymond

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में