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

时间:2016-02-17 20:42:46

标签: python plotly

我正在用plot.ly绘制3D图片,我希望我的轴被引用为(t, x, y)而不是(x, y, z)。可以为它们提供不同的标题(在3D情况下在Scene对象下),但是当我将鼠标悬停在情节上时,我会得到一个忽略新标题但仍然使用(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))

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

tooltip

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

1 个答案:

答案 0 :(得分:2)

这比解决方案更具解决方法,但您可以定义一个字符串列表,一行中每个点都有一个项目,其中列表中的每个项目都是您在悬停时要显示的任何文本的字符串(包括字符串)行"<br>"表示行返回),然后设置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))

结果情节看起来像这样

enter image description here

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