从 plotly 3d 图形中获取相机位置
Grab camera position from plotly 3d graph
我正在绘制 3D 图形并想调整相机位置。对我来说最好的方法是使用查看器,根据需要缩放和旋转场景,然后将相机位置抓取为 JSON 并将其放入生成图片的脚本中,默认情况下达到相同的位置。
根据 this tweet,它应该可以工作,但没有。
我的代码是:
from plotly.graph_objs import Scatter3d, Layout, Scene
from plotly.offline import iplot
import plotly
from numpy import sin, cos, linspace, pi, zeros_like
plotly.offline.init_notebook_mode()
t = linspace(0, 4*pi)
trace1 = Scatter3d(
x = t,
y = cos(t),
z = sin(t),
mode = 'lines'
)
layout = Layout(
width = 600,
height = 600,
scene = Scene(
xaxis = {'title': 't'},
yaxis = {'title': 'x'},
zaxis = {'title': 'y'},
camera =
{'eye':{'x':0,'y':1,'z':0},
'up': {'x':0,'y':0,'z':1},
'center': {'x':0,'y':0,'z':0}}
)
)
iplot(dict(data=[trace1], layout=layout))
然后我得到一张照片:
点击'save and edit in the cloud',切换到plotly界面,调整相机位置并点击查看JSON,仍然得到我在布局中指定的默认相机位置。
以下是 Plotly 的 3d 绘图相机控制示例的完整解释:
http://nbviewer.jupyter.org/github/etpinard/plotly-misc-nbs/blob/master/3d-camera-controls.ipynb
为了完整起见,这里有一个简短的总结:
可以使用 camera
代替 cameraposition
因为它似乎有更简单的解释。
相机位置由三个向量确定:up
、center
、eye
。
向上矢量确定页面的向上方向。默认为(x=0, y=0, z=1)
,即z轴指向上方
中心矢量确定场景中心的平移。默认情况下,没有翻译:中心向量是 (x=0, y=0, z=0)
.
眼睛矢量确定关于原点的相机视点。默认为 (x=1.25, y=1.25, z=1.25)
.
也可以通过减小眼向量的范数来放大。
name = 'eye = (x:0.1, y:0.1, z:1)'
camera = dict(
up=dict(x=0, y=0, z=1),
center=dict(x=0, y=0, z=0),
eye=dict(x=0.1, y=0.1, z=1)
)
fig = make_fig(camera, name)
py.iplot(fig, validate=False, filename=name)
这是预期的行为。
plotly.js 在将其发送到 plot.ly 云之前不会保存相机位置。您需要将图表保存在位于 plot.ly/plot 的 plotly 工作区中,以便更新其 camera
属性。
我正在绘制 3D 图形并想调整相机位置。对我来说最好的方法是使用查看器,根据需要缩放和旋转场景,然后将相机位置抓取为 JSON 并将其放入生成图片的脚本中,默认情况下达到相同的位置。
根据 this tweet,它应该可以工作,但没有。
我的代码是:
from plotly.graph_objs import Scatter3d, Layout, Scene
from plotly.offline import iplot
import plotly
from numpy import sin, cos, linspace, pi, zeros_like
plotly.offline.init_notebook_mode()
t = linspace(0, 4*pi)
trace1 = Scatter3d(
x = t,
y = cos(t),
z = sin(t),
mode = 'lines'
)
layout = Layout(
width = 600,
height = 600,
scene = Scene(
xaxis = {'title': 't'},
yaxis = {'title': 'x'},
zaxis = {'title': 'y'},
camera =
{'eye':{'x':0,'y':1,'z':0},
'up': {'x':0,'y':0,'z':1},
'center': {'x':0,'y':0,'z':0}}
)
)
iplot(dict(data=[trace1], layout=layout))
然后我得到一张照片:
点击'save and edit in the cloud',切换到plotly界面,调整相机位置并点击查看JSON,仍然得到我在布局中指定的默认相机位置。
以下是 Plotly 的 3d 绘图相机控制示例的完整解释:
http://nbviewer.jupyter.org/github/etpinard/plotly-misc-nbs/blob/master/3d-camera-controls.ipynb
为了完整起见,这里有一个简短的总结:
可以使用 camera
代替 cameraposition
因为它似乎有更简单的解释。
相机位置由三个向量确定:up
、center
、eye
。
向上矢量确定页面的向上方向。默认为(x=0, y=0, z=1)
,即z轴指向上方
中心矢量确定场景中心的平移。默认情况下,没有翻译:中心向量是 (x=0, y=0, z=0)
.
眼睛矢量确定关于原点的相机视点。默认为 (x=1.25, y=1.25, z=1.25)
.
也可以通过减小眼向量的范数来放大。
name = 'eye = (x:0.1, y:0.1, z:1)'
camera = dict(
up=dict(x=0, y=0, z=1),
center=dict(x=0, y=0, z=0),
eye=dict(x=0.1, y=0.1, z=1)
)
fig = make_fig(camera, name)
py.iplot(fig, validate=False, filename=name)
这是预期的行为。
plotly.js 在将其发送到 plot.ly 云之前不会保存相机位置。您需要将图表保存在位于 plot.ly/plot 的 plotly 工作区中,以便更新其 camera
属性。