2017-09-13 64 views
8

I przestrzegać instrukcji tutaj:Python Chord Diagram (Plotly) - Interaktywne podpowiedzi

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

I produkowane w ten sposób:

enter image description here

w przewodniku, ja następnie kod ribbon_info aby dodać hoverinfo do łączących się wstążek, ale nic nie pokazuje. Mogę uzyskać informacje o hoverinfo, które będą wyświetlane tylko na końcach wstążki. Czy ktoś może zobaczyć, gdzie idę źle?

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])) 

wyjścia dla zmiennych są:

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) 

Kod po poprzednim bloku, który tworzy schemat cięciwa jest następujący:

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') 

Jest to jedyny hoverinfo to pokazuje zewnętrzne etykiety, a nie tylko nieco bardziej wewnątrz:

enter image description here

Posługując się przykładem z linku na początku mojego pytania. Mają dwa zestawy etykiet. Na moim przykładzie odpowiednik "Isabelle skomentował 32 Sophia ...." nie jest wyświetlany.

enter image description here

+0

Z podanego linku: "ribbon_info to lista dyktorów ustawiających informacje wyświetlane po najechaniu myszą na końce wstążki."Plotly zezwala tylko na hoverinfo dla znaczników, a nie dla linii łączących –

+0

Kiedy więc ribbon_info dołącza textf i texti, to co robi, gdy wstążka kończy się na moim wykresie, pokazuje tylko etykiety tj." Economics ". Na początku mojego pytania (https://plot.ly/python/filled-chord-diagram/) ich wykres zawiera etykiety na końcach wstążek ORAZ na wstążkach?:/ – ScoutEU

+0

Moja przeglądarka wyświetla wskaźnik hoverinfo, gdy kursor jest w zewnętrznej części koła, ale nie w środku, a ponadto w pobliżu zewnętrznego segmentu jest trochę hoverinfo, ale znowu nic wewnątrz. Usuń 'class =" shapelayer "' w przeglądarce, aby pozbyć się wstążek i zobaczyć podstawowe znaczniki które uruchamiają hoverinfo –

Odpowiedz

1

Kod generowania diagramów akordów został opublikowany przez firmę Plotly dwa lata temu. W międzyczasie dokonano kilku zmian w definicji Plotwych kształtów. Aby podpowiedzi pracę w trybie offline należy:

1) wstawić linię

layer='below' 

w zwróconych dicts przez funkcje make_ideo_shape, make_ribbon, make_self_rel;

2) komórki zawierającej definicji listy ribbon_info zmienić na każdej z trzech linii zawierających ribbon_info.append, z X i Y przypisane wartości, wykazów tych wartości:

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

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

odpowiednio ,

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

Odpowiedni notebook https://plot.ly/python/filled-chord-diagram/ jest teraz aktualizowany. Dzięki Python StackOverflow @PythonStack do wskazania tego błędu, tutaj: https://twitter.com/PythonStack/status/914924595953721344

+0

To jest naprawdę pomocne. Dziękuję bardzo za odpowiedź na mój post! Zwłaszcza biorąc pod uwagę jej wiek – ScoutEU

1

znalazłem rozwiązanie. Okazuje się, że ribbon_info nie lubi być uruchamianym w trybie offline, gdy tylko zrobiłem to online, pokazało. To znaczy. nie działa w plotly.offline. MUSISZ to zrobić online

Edycja: nie wiem, dlaczego odrzucono, wiele osób używa sprytnie offline. Mam nadzieję że to pomoże!