The answers lies here
[Dash callback not outputting a subplot]
Instead of fig.add_trace(), I need to do fig.append_trace() so it appends as a list and then return as a fig object and not as ‘data’: fig
maybe someone can give me difference between the two?