2017-09-12 28 views
0

我正在繪製一個由堆積的子圖組成的圖,每個子圖都具有非常多的點數。對於每個點,我想添加一個文本在工具提示中可視化。在子圖之間共享數據點文本

由於要顯示的文本對於每個子圖都是相同的,因此我剛剛通過了與每個子圖的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中複製相同的數據?

+0

在Python中的數據成爲其方式向Plotly Javascript庫連載。所以,不,沒有直接的方法來在圖形之間共享數據。 –

+0

好吧似乎沒有解決方案,所以如果你發表你的評論作爲答案,我會將其標記爲已接受@MaximilianPeters – ClonedOne

+0

接受的答案是錯誤的,並已相應更新。 –

回答

1

tldr不,您不能在Plotly中共享數據。

不幸的是,沒有辦法在圖形之間共享數據(據我所知)。 Plotly的庫將Python(或R)對象序列化,以使其可用於其JavaScript核心庫。數據共享需要在JavaScript上進行,甚至是非常棘手的。

你可以上傳你的數據作爲grid對象,然後通過xsrc引用它們,ysrctextsrc

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)