{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plotly 3D camera controls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import plotly.plotly as py"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"def get_random_data(N):\n",
" return np.random.random(N), np.random.random(N), np.random.random(N)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def make_fig(camera, name, N=40):\n",
" x1, y1, z1 = get_random_data(N)\n",
"\n",
" trace1 = dict(\n",
" type= 'scatter3d',\n",
" x=x1,\n",
" y=y1,\n",
" z=z1,\n",
" mode='markers'\n",
" )\n",
"\n",
" layout = dict(\n",
" title='camera controls - {}'.format(name),\n",
" scene=dict(\n",
" camera=camera\n",
" )\n",
" )\n",
"\n",
" fig = dict(data=[trace1], layout=layout)\n",
" return fig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Default params\n",
"\n",
"The camera position is determined by three vectors: *up*, *center*, *eye*.\n",
"\n",
"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.\n",
"\n",
"The center vector determines the translation about the center of the scene. By default, there is no translation: the center vector is $(x=0, y=0, z=0)$.\n",
"\n",
"The eye vector determines the camera view point about the origin. The default is $(x=1.25, y=1.25, z=1.25)$. "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"name = 'default'\n",
"camera = dict(\n",
" up=dict(x=0, y=0, z=1),\n",
" center=dict(x=0, y=0, z=0),\n",
" eye=dict(x=1.25, y=1.25, z=1.25)\n",
")\n",
"fig = make_fig(camera, name)\n",
"py.iplot(fig, validate=False, filename=name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Lower the view point"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"name = 'eye = (x:2, y:2, z:0.1)'\n",
"camera = dict(\n",
" up=dict(x=0, y=0, z=1),\n",
" center=dict(x=0, y=0, z=0),\n",
" eye=dict(x=2, y=2, z=0.1)\n",
")\n",
"fig = make_fig(camera, name)\n",
"py.iplot(fig, validate=False, filename=name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### x-z plane"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"name = 'eye = (x:0.1, y:2.5, z:0.1)'\n",
"camera = dict(\n",
" up=dict(x=0, y=0, z=1),\n",
" center=dict(x=0, y=0, z=0),\n",
" eye=dict(x=0.1, y=2.5, z=0.1)\n",
")\n",
"fig = make_fig(camera, name)\n",
"py.iplot(fig, validate=False, filename=name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### y-z plane"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"name = 'eye = (x:2.5, y:0.1, z:0.1)'\n",
"camera = dict(\n",
" up=dict(x=0, y=0, z=1),\n",
" center=dict(x=0, y=0, z=0),\n",
" eye=dict(x=2.5, y=0.1, z=0.1)\n",
")\n",
"fig = make_fig(camera, name)\n",
"py.iplot(fig, validate=False, filename=name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### view from above"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"name = 'eye = (x:0.1, y:0.1, z:2.5)'\n",
"camera = dict(\n",
" up=dict(x=0, y=0, z=1),\n",
" center=dict(x=0, y=0, z=0),\n",
" eye=dict(x=0.1, y=0.1, z=2.5)\n",
")\n",
"fig = make_fig(camera, name)\n",
"py.iplot(fig, validate=False, filename=name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### zooming in\n",
"\n",
"... by reducing the norm the eye vector."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"name = 'eye = (x:0.1, y:0.1, z:1)'\n",
"camera = dict(\n",
" up=dict(x=0, y=0, z=1),\n",
" center=dict(x=0, y=0, z=0),\n",
" eye=dict(x=0.1, y=0.1, z=1)\n",
")\n",
"fig = make_fig(camera, name)\n",
"py.iplot(fig, validate=False, filename=name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"
\n",
"
\n",
"\n",
" Got Questions or Feedback?
\n",
"\n",
"About Plotly\n",
"\n",
"* email: feedback@plot.ly \n",
"* tweet: \n",
"@plotlygraphs\n",
"\n",
"Notebook styling ideas
\n",
"\n",
"Big thanks to\n",
"\n",
"* Cam Davidson-Pilon\n",
"* Lorena A. Barba\n",
"\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import display, HTML\n",
"import urllib2\n",
"url = 'https://raw.githubusercontent.com/plotly/python-user-guide/master/custom.css'\n",
"display(HTML(urllib2.urlopen(url).read()))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}