I’d like to use Plotly inside monitor functions of computational routines, e.g. finding a global minimum of a function, solving ODE, etc… For this, I must be able to perform online updates on traces. Below is a minimal example of trying to move a marker, superimposed over a heat-map.

**NOTE:** assume the new marker coordinates are obtained at runtime (possibly by calling an expensive routine), so **we do not have all the curve the marker will trace**.

**Question 1**: steps of for-loop are being skipped, unless I invoke time.sleep() to wait for figure to update. Why does this happen?

**Question 2** How can I force the entire figure to re-draw and not increment the for-loop index, unless the figure has re-drawn?

**Question 3** Is there a better way to do the online update of the marker position?

I run the code below in 2 Jupiter Lab cells.

## Jupyter Cell 1: Plot a heatmap of sin(x)cos(y); superimpose marker at x=1, y=0

```
import numpy as np
import plotly.graph_objs as go
from time import sleep
x = np.arange(0,2.*np.pi,np.pi/100)-np.pi
y = np.arange(0,2.*np.pi,np.pi/100)-np.pi
xx, yy = np.meshgrid(x,y)
zz = np.sin(xx)*np.cos(yy)
fig = go.FigureWidget(layout_width = 400, layout_height = 400)
fig.add_heatmap(x = x, y = y, z=zz, colorscale = 'blues')
fig.add_scatter(x=[1.], y=[0],
marker_color = 'red',
marker_size = 10)
fig
```

## Jupyter Cell 2: force the marker to trace a semi-circle

```
N = 10
for i in range(N+1):
phi=np.pi/N*i
with fig.batch_update():
fig.data[1].update(x=[np.cos(phi)],y = [np.sin(phi)])
fig.layout.title.text = 'i='+ str(i)
sleep(.6)
```