首页 > 解决方案 > Python 3D-Rotation of Text in 3D Plotly Plot

问题描述

我有一个有点复杂的 3d 绘图,为此我希望能够在绘图中放置文本并让它随着绘图旋转,就好像它是位于绘图平面上的 3d 对象一样。我看到您可以在 3d 图上进行注释,但注释被迫始终面向用户。我希望文本与图中的平面一起旋转和倾斜。例如:

import numpy as np
import plotly.graph_objects as go
init_notebook_mode()
nYpts = 50
arrowLw = 0.5
nThetaPts=50#72
theta = np.linspace(0, 2.*np.pi, nThetaPts)
ylim=4
yp = np.linspace(-ylim,ylim*1, nYpts)
theta, yp = np.meshgrid(theta, yp)
w0 = 0.2
zr = 0.5
def waistFunc(zpt):
    return w0 * np.sqrt(1+(zpt/zr)**2)

waist = waistFunc(yp)
xp = waist * np.cos(theta)
zp = waist * np.sin(theta)

colorscale = [[0, 'red'],
             [1, 'red']]
tweezer = go.Surface(x=xp, y=yp, z=zp, colorscale = colorscale,
                     showscale=False,lighting=dict(ambient=0.25, roughness=1, diffuse=0.5), lightposition={'x':5,'y':-1,'z':0},
                     opacity=1)
frame = go.Scatter3d(x=[2,2,-2,-2,2],y=[0,0,0,0,0],z=[2,-2,-2,2,2],     
                     line=dict( color='darkblue', width=2))
layout = go.Layout(scene_xaxis_visible=False, scene_yaxis_visible=False, scene_zaxis_visible=False)
fig =  go.Figure(data=[tweezer, frame], layout=layout)
fig.update_layout(
    scene=dict( annotations=[dict( showarrow=False, x=1, y=0, z=1, text="Point 1" )]))
fig.show()

生成带有此类注释的示例图,其中该图看起来大致合适,

在此处输入图像描述

但是这里的问题很明显,文本已经旋转出平面,这是不可取的。如何在情节中实现这种效果?

在此处输入图像描述

标签: pythonplotly

解决方案


推荐阅读