Plotly Express mit Animationsrahmen: Probleme mit der Legende und Punkte anzeigenPython

Python-Programme
Anonymous
 Plotly Express mit Animationsrahmen: Probleme mit der Legende und Punkte anzeigen

Post by Anonymous »

Ich versuche einen Film zu machen, der die Entwicklung eines Schätzers zeigt. Die Idee ist, die Geschichte des Schätzers nach jedem Update zu zeichnen. Ich möchte dies als Film machen, da einige Updates aus der Sequenz ausgehen, und dies war der einfachste Weg, dies anzuzeigen. der erste Rahmen. Dies führt auch zu einer Farbe, die auf dem ersten Frame nicht zeichnet, nicht. Wenn beispielsweise ein Frame einen blauen Punkt aktualisiert, sind alle blauen Punkte korrekt, aber rote Punkte werden nicht aktualisiert, auch wenn er sich ändern sollte. Es ist eine einfache Streuung einiger y = x Punkte. Jeder Frame hat einen neuen Punkt im Vergleich zu den letzten und Punkten oben (3, 3) sind rot. Wenn Sie dies auf die einfachste Weise tun, führt die einfachste Art und Weise zu roten Punkten, die nicht in der Legende oder im Diagramm angezeigt werden. < /P>

Code: Select all

import numpy as np
import pandas as pd
import plotly.express as px

# Make a y=x line that grows from origin (0, 0), to (9, 9)
x = [val for stop in range(10) for val in np.arange(0, stop, 1)]
frame_id = [stop for stop in range(10) for _ in np.arange(0, stop, 1)]
y = x
color = ['blue' if val < 3 else 'red' for val in x]

simple_df = pd.DataFrame().assign(
x=x,
y=y,
color=color,
frame_id=frame_id,
).sort_values(by='frame_id')

px.scatter(
simple_df, x='x', y='y', color='color', animation_frame='frame_id'
).update_layout(
title='Animation of y=x line growing from (0, 0) to (9, 9)',
).update_yaxes(range=[-1, 10]).update_xaxes(range=[-1, 10]).show()
< /code>
Ich habe dies sozusagen behoben, indem ich einen Startbild mit allen angezeigten Punkten hinzugefügt habe. Ich habe dies im realen Code weniger hässlich gemacht, indem ich die Größe der Punkte auf Null gesetzt habe, aber ich zeige sie hier aus Klarheit. Das Problem sind jetzt nur Farben, die in einem bestimmten Rahmen hinzugefügt werden, werden korrekt behandelt. Also werden also nur auf Frames 1-3 blaue Punkte aktualisiert. Dies führt dazu, dass die roten Punkte bis zum ersten Rahmen herumhängen, an dem ein roter Punkt hinzugefügt wird. Dies führt zu weiteren Problemen, wenn Sie mit dem Schieberegler vorwärts und rückwärts gehen, aber ich denke, dieser Film zeigt den Kern des Problems an. < /P>
zero_frame = pd.concat([simple_df.assign(frame_id=0), simple_df])
px.scatter(
zero_frame, x='x', y='y', color='color', animation_frame='frame_id'
).update_layout(
title='Animation of y=x line growing from (0, 0) to (9, 9)',
).update_yaxes(range=[-1, 10]).update_xaxes(range=[-1, 10]).show()
< /code>
Hat jemand irgendwelche Korrekturen dafür? Um wieder zu reduzieren, möchte ich in dem Spielzeugbeispiel eine Linie von blauen Punkten aus (1, 1) 
wachsen und nach (3, 3) rot sein, wobei ein Punkt pro Rahmen hinzugefügt wird. Ich denke, wenn dies funktioniert habe, könnte ich es dazu bringen, sich an echten Daten zu verhalten.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post