Synchronize camera across 3D subplots?

Hi @zotgabe,

is this what you are aiming to do? ->:

  • with ipywidgets :
import plotly.graph_objs as go
import pandas as pd
import ipywidgets as widgets

# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')

data1 = [
    go.Surface(
        z=z_data.values
    )
]

data2 = [
    go.Surface(
        z=z_data.values, colorscale='viridis'
    )
]
layout1 = go.Layout(title=dict(text='Mt Bruno Elevation'))
layout2 = go.Layout(title=dict(text='Mt Bruno Elevation 2'))

fig1 = go.FigureWidget(data=data1, layout=layout1)
fig2 = go.FigureWidget(data=data2, layout=layout2)

def cam_change(layout, camera):
    fig2.layout.scene.camera = camera

fig1.layout.scene.on_change(cam_change, 'camera')
display(widgets.HBox([fig1,fig2]))
  • or with subplots:
import plotly.graph_objs as go
import pandas as pd
from plotly import tools

# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')

trace1 = dict(type='surface', scene='scene1', z=z_data.values)

trace2 = dict(type='surface', scene='scene2', z=z_data.values, colorscale='viridis')

f= tools.make_subplots(rows=1, cols=2, specs=[[{'is_3d': True}, {'is_3d': True}]])

f.append_trace(trace1, 1, 1)
f.append_trace(trace2, 1, 2)

fig = go.FigureWidget(f)

def cam_change(layout, camera):
    fig.layout.scene2.camera = camera

fig.layout.scene1.on_change(cam_change, 'camera')
fig