在 plotly 3d 悬停文本中重命名轴

Rename axes in plotly 3d hover text

我正在用 plot.ly 绘制 3D 图片,我希望我的轴被引用为 (t, x, y) 而不是 (x, y, z)。可以给它们不同的标题(在 3D 的情况下 Scene object 下),但是当我将鼠标悬停在图上时,我得到一个工具提示,忽略新标题并仍然使用 (x, y, z) .也可以重命名吗?

我的密码是

from plotly.graph_objs import Scatter3d, Layout, Scene
from numpy import sin, cos, linspace, pi
from plotly.offline import iplot, init_notebook_mode
init_notebook_mode()

t = linspace(0, 4*pi)

trace = Scatter3d(
    x = t,
    y = cos(t),
    z = sin(t),
    mode = 'lines'
)
layout = Layout(
                width = 500, 
                height = 500, 
                scene = Scene(
                    xaxis = {'title': 't'},
                    yaxis = {'title': 'x'},
                    zaxis = {'title': 'y'}
                )
)
iplot(dict(data=[trace], layout=layout))

当我将鼠标悬停在图表上时,我有:

我想将此处的 x, y, z 更改为 t, x, y 或其他任何内容。

这是比解决方案更多的解决方法,但您可以定义一个字符串列表,一行中的每个点一个项目,其中列表中的每个项目都是您希望在悬停时显示的任何文本的字符串(包括字符串 "<br>" 对应一行 return),然后设置 text=your_listhoverinfo="text".

像这样:

from plotly.graph_objs import Scatter3d, Layout, Scene
from numpy import sin, cos, linspace, pi
from plotly.offline import iplot, init_notebook_mode
init_notebook_mode()
t = linspace(0, 4*pi)
your_list=[]
for iter_t in t:
    iter_string = 't:'+'%1.3f'%iter_t+'<br>' + 'x:'+'%1.3f'%cos(iter_t) + '<br>'+'y:'+'%1.3f'%sin(iter_t)
    your_list.append(iter_string)

trace = Scatter3d(
    x = t,
    y = cos(t),
    z = sin(t),
    mode = 'lines',
    text=your_list,
    hoverinfo='text')

layout = Layout(width = 500, height = 500, scene = Scene(
    xaxis = {'title': 't'},
    yaxis = {'title': 'x'},
    zaxis = {'title': 'y'}))

iplot(dict(data=[trace], layout=layout))

结果图如下所示

您可能应该将计算值保存在 for 循环中,以防止不得不多次计算它们,但您明白了。