I have a Plotly pane
pn.pane.Plotly in which I have a
plotly.go.Figure(). I update the plot on a button press, by calling a function which creates a entirely new
go.Figure() and then replaces the figure that is used by the Plotly pane, as follows:
class PlotlyPlot: def __init__(self): self.figure= go.Figure() self.plotlyplane = pn.pane.Plotly(self.figure) self.update = pn.widgets.Button(name='Update') self.update.on_click(self.update_plot) def update_plot(self): # Get data here new_fig = go.Figure() new_fig.add_trace(**data) # 2-3 add traces new_fig.update_layout(**properties) self.figure = new_fig self.plotlyplane.object = self.figure
Now this was working completely fine, but I added a new
add_trace statement, which essentially is a dummy trace (no actual data). I use the following code for it.
new_fig.add_trace(go.Scatter(x=, y=, name='Name', legendgroup='Group Name')
Now when I update my plot, there are some remnants in my Plotly panel. The newly added dummy trace seems to be mirroring some other data that I have plotted. I tried printing out
self.figure['data'] and everything is as it’s supposed to be, but the plot is inconsistent. I am not sure why. And the plot was working perfectly fine till the addition of the new dummy scatter. Any help would be appreciated.
I found the following in the documentation regarding plotly.
Once created the plot can be updated by modifying the Plotly traces and then triggering an update by setting or triggering an event on the pane
object. Note that this only works if the
Figureis defined as a dictionary, since Plotly will make copies of the traces, which means that modifying them in place has no effect. Modifying an array will send just the array using a binary protocol, leading to fast and efficient updates.
However I was not sure what exactly it means, if someone could clarify that’d be great.