在子图之间共享数据点文本

时间:2017-09-12 20:51:20

标签: python plot plotly

我正在绘制由堆积的子图组成的图,每个子图具有非常多的点。对于每个点,我想在工具提示中添加要显示的文本。

由于要显示的文本对于每个子图都是相同的,我刚刚传递了与每个子图的text属性相同的数组(如Plotly指南中所示)。

for cluster in sorted(reverse_clustering): 
....         
    trace = go.Scatter(x=base, y=cluster_features, name=name, text=word_list)

然而,这似乎是在每个子图的html文件中创建(非常长的)字符串数组word_list的副本。

如果没有html中相同数据的多重副本,有没有办法获得相同的结果?

1 个答案:

答案 0 :(得分:1)

tldr 不,你不能在Plotly中分享数据。

不幸的是,没有办法在图表之间共享数据(据我所知)。 Plotly的库序列化Python(或R)对象,使其可用于其JavaScript核心库。

数据共享需要在JavaScript上进行,即使这非常棘手。

<击>

您可以将数据上传为grid个对象,然后通过xsrcysrctextsrc等引用它们。

import plotly
import random

# some random data
data1 = [random.randint(0, 10) for _ in range(10)]
text = ['Measurement: {}'.format(i) for i in range(10)]
data2 = [i + random.random() for i in data]

# create the grid object and its columns
col0 = plotly.grid_objs.Column([i for i in range(10)], 'x')
col1 = plotly.grid_objs.Column(data1, 'exp1')
col2 = plotly.grid_objs.Column(data2, 'exp2')
col3 = plotly.grid_objs.Column(text, 'text')
grid = plotly.grid_objs.Grid([col0, col1, col2, col3])

# upload the grid
plotly.plotly.grid_ops.upload(grid, 'tmp')

# create the graph based on the reference grid columns
trace1 = plotly.graph_objs.Scatter(xsrc=grid[0], ysrc=grid[1], textsrc=grid[3])
trace2 = plotly.graph_objs.Scatter(xsrc=grid[0], ysrc=grid[2], textsrc=grid[3])
fig = plotly.graph_objs.Figure(data=[trace1, trace2])

plotly.plotly.iplot(fig)