3D Camera Controls in Python
How to Control the Camera in your 3D Charts in Python with Plotly.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Try Plotly Studio now.
How camera controls work¶
The camera position and direction is determined by three vectors: up, center, eye. Their coordinates refer to the 3-d domain, i.e., (0, 0, 0) is always the center of the domain, no matter data values.
The eye vector determines the position of the camera. The default is $(x=1.25, y=1.25, z=1.25)$.
The up vector determines the up direction on the page. The default is $(x=0, y=0, z=1)$, that is, the z-axis points up.
The projection of the center point lies at the center of the view. By default it is $(x=0, y=0, z=0)$.
Default parameters¶
In [1]:
import plotly.graph_objects as go
import pandas as pd
# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
fig.update_layout(
title=dict(text='Mt Bruno Elevation'),
width=400, height=400,
margin=dict(t=40, r=0, l=20, b=20)
)
name = 'default'
# Default parameters which are used when `layout.scene.camera` is not provided
camera = dict(
up=dict(x=0, y=0, z=1),
center=dict(x=0, y=0, z=0),
eye=dict(x=1.25, y=1.25, z=1.25)
)
fig.update_layout(scene_camera=camera, title=name)
fig.show()
In [2]:
import plotly.graph_objects as go
import pandas as pd
# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
fig.update_layout(
title=dict(text='Mt Bruno Elevation'),
width=400, height=400,
margin=dict(t=30, r=0, l=20, b=10)
)
name = 'eye = (x:2, y:2, z:0.1)'
camera = dict(
eye=dict(x=2, y=2, z=0.1)
)
fig.update_layout(scene_camera=camera, title=name)
fig.show()
X-Z plane¶
set eye.x and eye.z to zero
In [3]:
import plotly.graph_objects as go
import pandas as pd
# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
fig.update_layout(
title=dict(text='Mt Bruno Elevation'),
width=400, height=400,
margin=dict(t=30, r=0, l=20