2017-02-27 4 views
0

J'ai tracé tracé de la barre interactive à l'aide Boutons de manchette plotly (en utilisant la série de pandas géants). en mode hors ligneComment ajouter déroulante et boîte de recherche dans les parcelles de bar créées avec des boutons de manchette en utilisant Pandas (ipython portable)?

Ci-dessous le code que je utilise pour le traçage:

cf.go_offline() ## Use plotly in offline mode 

df.iplot(kind='bar', xTitle = 'roles',yTitle='count', title='Bar Plot:', filename='cufflinks/categorical-bar-chart') 

Ici df est ma série et rôle est mon index (axe x)

   Priority Year Avg_in_hrs   Total_in_Hrs 
Role       
A   Medium  2015  34.4    34 
B   Low  2014  33.55    123 
C   High  2014  3     4566 
D   Low  2015  12    3666 
.

maintenant, je veux ajouter dans la liste déroulante et zone de recherche pour mes étiquettes axe x ie pour rôles qui est ma colonne de pandas géants dataframe ayant de nombreuses valeurs pour que je puisse la mer rch et ne voient que l'intrigue pour ce rôle particulier. Comment puis-je l'ajouter?

également comment partager ces parcelles interactives avec d'autres comme l'utilisation de l'application Web afin que je puisse maintenir l'interactivité?

Merci

Répondre

1

Vous pouvez déplacer votre yaxisrange en fonction du menu déroulant sélectionné, à savoir si l'utilisateur sélectionne A, seule la gamme spécifique pour A est affichée.

Le code définit une entrée de menu déroulant pour chaque index et une pour réinitialiser le graphique.

import pandas as pd 
import cufflinks as cf 
cf.go_offline() 

roles = 'ABCDE' 
prios = ['Medium', 'Low', 'High', 'Low', 'High'] 
years = [2015, 2014, 2014, 2015, 2014] 
avgs = [34.4, 33.55, 3, 12, 15] 
total_hours = [34, 123, 4566, 3666, 4000] 

data = dict() 
data['Prio'] = prios 
data['Year'] = years 
data['average'] = avgs 
data['hours'] = total_hours 

df = pd.DataFrame(data) 
df.index = list(roles) 
df.index.names = ['Role'] 

buttons = list() 
offset = -0.5 
for r in roles: 
    buttons.append(dict(
     args=['xaxis.range', [offset, offset + 1]], 
     label=r, 
     method='relayout' 
    )) 
    offset += 1 
buttons.append(dict(
    args=['xaxis.range', [-0.5, offset]], 
    label='Reset', 
    method='relayout' 
)) 
layout = dict(updatemenus=list([ 
     dict(
      x=-0.05, 
      y=0.8, 
      buttons=buttons, 
      yanchor='top' 
     ) 
    ]) 
) 
df.iplot(kind='bar', xTitle = 'roles',yTitle='count', title='Bar Plot:', filename='cufflinks/categorical-bar-chart', layout=layout) 
+0

merci. J'ai utilisé votre code pour tracer mon ensemble de données original. Ça à l'air bon. Juste une question de plus, toutes les valeurs des étiquettes, à savoir la priorité, l'année, etc. ne sont pas visibles sur l'axe des ordonnées et dans la liste déroulante, elles ne montrent pas toutes les étiquettes. J'ai reçu 64 valeurs différentes pour l'index de mes rôles. C'est mieux je devrais inclure la boîte de recherche aussi bien pour le rôle. – Niranjanp

+0

autant que je sache Plotly ne fournit pas une recherche de texte libre, vous devez implémenter cela en Javascript vous-même. Les étiquettes d'axe y manquantes sont le résultat de boutons de manchette. Les résultats de boutons de manchette sont très courts, mais si vous voulez avoir plus de contrôle, vous devrez utiliser la syntaxe de Plotly. –