2017-09-13 91 views
8

我跟着这里的指导:Python的和弦图(Plotly) - 交互式工具提示

https://plot.ly/python/filled-chord-diagram/

我生成此:

enter image description here

在引导,我跟着ribbon_info代码将hoverinfo添加到连接的色带,但没有显示。我可以得到hoverinfo只显示功能区结束。任何人都可以看到我要去哪里吗?是

ribbon_info=[] 
for k in range(L): 

    sigma=idx_sort[k] 
    sigma_inv=invPerm(sigma) 
    for j in range(k, L): 
     if matrix[k][j]==0 and matrix[j][k]==0: continue 
     eta=idx_sort[j] 
     eta_inv=invPerm(eta) 
     l=ribbon_ends[k][sigma_inv[j]] 

     if j==k: 
      layout['shapes'].append(make_self_rel(l, 'rgb(175,175,175)' , 
            ideo_colors[k], radius=radii_sribb[k])) 
      z=0.9*np.exp(1j*(l[0]+l[1])/2) 
      #the text below will be displayed when hovering the mouse over the ribbon 
      text=labels[k]+' appears on'+ '{:d}'.format(matrix[k][k])+' of the same grants as '+ '', 
      ribbon_info.append(Scatter(x=z.real, 
             y=z.imag, 
             mode='markers', 
             marker=Marker(size=5, color=ideo_colors[k]), 
             text=text, 
             hoverinfo='text' 
             ) 
          ) 
     else: 
      r=ribbon_ends[j][eta_inv[k]] 
      zi=0.9*np.exp(1j*(l[0]+l[1])/2) 
      zf=0.9*np.exp(1j*(r[0]+r[1])/2) 
      #texti and textf are the strings that will be displayed when hovering the mouse 
      #over the two ribbon ends 
      texti=labels[k]+' appears on '+ '{:d}'.format(matrix[k][j])+' of the same grants as '+\ 
        labels[j]+ '', 

      textf=labels[j]+' appears on '+ '{:d}'.format(matrix[j][k])+' of the same grants as '+\ 
        labels[k]+ '', 
      ribbon_info.append(Scatter(x=zi.real, 
             y=zi.imag, 
             mode='markers', 
             marker=Marker(size=0.5, color=ribbon_color[k][j]), 
             text=texti, 
             hoverinfo='text' 
             ) 
          ), 
      ribbon_info.append(Scatter(x=zf.real, 
             y=zf.imag, 
             mode='markers', 
             marker=Marker(size=0.5, color=ribbon_color[k][j]), 
             text=textf, 
             hoverinfo='text' 
             ) 
          ) 
      r=(r[1], r[0])#IMPORTANT!!! Reverse these arc ends because otherwise you get 
          # a twisted ribbon 
      #append the ribbon shape 
      layout['shapes'].append(make_ribbon(l, r , 'rgb(255,175,175)', ribbon_color[k][j])) 

为变量的输出如下所示:

texti = (u'Sociology appears on 79 of the same grants as Tools, technologies & methods',) 

textf = (u'Tools, technologies & methods appears on 79 of the same grants as Sociology',) 

ribbon_info = [{'hoverinfo': 'text', 
    'marker': {'color': 'rgba(214, 248, 149, 0.65)', 'size': 0.5}, 
    'mode': 'markers', 
    'text': (u'Demography appears on 51 of the same grants as Social policy',), 
    'type': 'scatter', 
    'x': 0.89904409911342476, 
    'y': 0.04146936036799545}, 
{'hoverinfo': 'text', 
    'marker': {'color': 'rgba(214, 248, 149, 0.65)', 'size': 0.5}, 
    'mode': 'markers', 
    'text': (u'Social policy appears on 51 of the same grants as Demography',), 
    'type': 'scatter', 
    'x': -0.65713108202353809, 
    'y': -0.61496238993825791},..................**etc** 

sigma = array([ 0, 14, 12, 10, 9, 7, 8, 5, 4, 3, 2, 1, 6, 16, 13, 11, 15], dtype=int64) 

先前块后的码构建弦图如下:

ideograms=[] 
for k in range(len(ideo_ends)): 
    z= make_ideogram_arc(1.1, ideo_ends[k]) 
    zi=make_ideogram_arc(1.0, ideo_ends[k]) 
    m=len(z) 
    n=len(zi) 
    ideograms.append(Scatter(x=z.real, 
          y=z.imag, 
          mode='lines', 
          line=Line(color=ideo_colors[k], shape='spline', width=0), 
          text=labels[k]+'<br>'+'{:d}'.format(row_sum[k]), 
          hoverinfo='text' 
          ) 
        ) 


    path='M ' 
    for s in range(m): 
     path+=str(z.real[s])+', '+str(z.imag[s])+' L ' 

    Zi=np.array(zi.tolist()[::-1]) 

    for s in range(m): 
     path+=str(Zi.real[s])+', '+str(Zi.imag[s])+' L ' 
    path+=str(z.real[0])+' ,'+str(z.imag[0]) 

    layout['shapes'].append(make_ideo_shape(path,'rgb(150,150,150)' , ideo_colors[k])) 

data = Data(ideograms+ribbon_info) 
fig=Figure(data=data, layout=layout) 

plotly.offline.iplot(fig, filename='chord-diagram-Fb') 

这是唯一的hoverinfo这表明,外面的标签,而不是稍微更多的里面:

enter image description here

使用我的问题开始时的链接示例。他们有两套标签。就我的例子而言,相当于'伊莎贝尔评论了索菲亚的32个......'并没有显示出来。

enter image description here

+0

从提供的链接:“ribbon_info是设置当鼠标悬停在功能区结束时显示的信息的dicts列表。“仅仅允许hoverinfo用于标记,而不用于连接线 –

+0

因此,当ribbon_info追加textf和texti时,它在功能区结束时显示标签,即'Economics'。在我的问题开始时(https://plot.ly/python/filled-chord-diagram/),他们的图表在带子上有标签并且在带子上有标签?:/ – ScoutEU

+0

当光标处于光标所在位置时,我的浏览器显示hoverinfo在圈子的外部,但不在里面,另外还有一些hoverinfo接近外部段,但是再次没有内部的东西。在你的浏览器中删除'class =“shapelayer”'来摆脱这些功能区,并看到底层标记它会触发hoverinfo。 –

回答

1

和弦图生成代码由两年前的Plotly发布。同时在Plotly形状的定义中进行了一些改变。要在离线模式下,你应该提示工作:

1)插入该行

layer='below' 
在返回类型的字典

由功能make_ideo_shapemake_ribbonmake_self_rel;

2)在包含列表ribbon_info的定义,更改每个含有ribbon_info.append中,x,三条线和y赋值的细胞,含有这些值列表:

x=[z.real], 
y=[z.imag], 

x=[zi.real], 
y=[zi.imag], 

分别,

x=[zf.real], 
y=[zf.imag], 

相应笔记本https://plot.ly/python/filled-chord-diagram/已更新。 感谢Python StackOverflow @PythonStack指出这个错误,在这里:https://twitter.com/PythonStack/status/914924595953721344

+0

这真的很有帮助。非常感谢你回复我的文章!特别是考虑到其年龄 – ScoutEU

1

我找到了解决方案。事实证明,ribbon_info不喜欢脱机运行,只要我在网上做了它显示。即它不会在plotly.offline中运行。你必须在网上做

编辑:不知道为什么downvoted,很多人使用阴谋离线。希望这可以帮助!