2010-10-14 4 views
0

J'ai cette image: alt textcomment insérer du texte dans la barre si la barre de couleur égale au violet

Ce que j'essaie de faire si de quitter « H37Rv » que dans la barre violette.

Mon code est le suivant:

rects = ax.bar(ind, num, width, color=colors) 

    for rect in rects: 
     height = int(rect.get_height()) 

     if height < 5: 
      yloc = height + 2 
      clr = '#182866' 
     else: 
      yloc = height/2.0 
      clr = '#182866' 

     p = 'H37Rv' 
     xloc = rect.get_x() + (rect.get_width()/2.0) 
     ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold') 

J'ai aussi essayé ceci:

for rect in rects: 
     if color == purple: 
      height = int(rect.get_height()) 

      if height < 5: 
       yloc = height + 2 
       clr = '#182866' 

mais je reçois une erreur disant que la couleur n'est pas définie.

Quelqu'un a une idée pour résoudre ce problème?

Merci beaucoup!

Répondre

2

Si vous déplacez les trois dernières lignes de votre premier exemple dans un niveau d'indentation, de sorte qu'elles font partie de la clause "else" qui définit la couleur sur violet, cela devrait le faire. [Edit: Désolé, j'ai mal lu légèrement. Cela laisserait également le texte dans la 2ème barre. Il n'y a pas moyen d'obtenir la couleur d'un rectangle pour autant que je sache, mais vous pouvez faire:

rects = ax.bar(ind, num, width, color=colors) 

rect = rects[-1] 
height = int(rect.get_height()) 

if height < 5: 
    yloc = height + 2 
else: 
    yloc = height/2.0 

clr = '#182866' 
p = 'H37Rv' 
xloc = rect.get_x() + (rect.get_width()/2.0) 
ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold') 

qui fixerait le texte dans le dernier bar seulement.

Si ce pourrait être une barre qui pourrait être violet, pas nécessairement le dernier, eh bien, vous avez la liste des couleurs que vous initialisés les rectangles avec, donc:

rects = ax.bar(ind, num, width, color=colors) 

for i in range(len(colors): 
    if colors[i] == purple: # or however you specified "purple" in your colors list 
     labelled_rects.append(i) 

for i in labelled_rects: 
    rect = rects[i] 
    height = int(rect.get_height()) 

    if height < 5: 
     yloc = height + 2 
    else: 
     yloc = height/2.0 

    clr = '#182866' 
    p = 'H37Rv' 
    xloc = rect.get_x() + (rect.get_width()/2.0) 
    ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold') 
+0

Je ne mets pas la couleur au violet dans cet exemple. si vous parlez de ceci: clr = '# 182866' alors c'est le bleu foncé que nous voyons dans les lettres, et c'est en fait la même chose. le violet est à l'intérieur d'une liste de couleurs, parce que c'est un graphique qui change en fonction de la demande. NOt sûr est que j'étais assez clair .. – pavid

+0

@Pat: J'ai édité ma réponse, j'espère que cela aide – Vicky

+0

merci! J'essayais de faire quelque chose de similaire avec l'exemple @EOL mais le tien c'est aussi assez facile. :) – pavid

2

Vous pouvez obtenir le couleur d'un rectangle avec rect.get_facecolor(), ce qui vous permet de placer l'étiquette comme vous le souhaitez. En outre, comme vous connaissez les couleurs que vous avez utilisées pour dessiner le graphique à barres et si elles sont représentées par une liste, vous pouvez en effet obtenir facilement la liste des rectangles violets.

+0

merci! Je cherchais quelque chose comme ça, mais @Vicky et aussi votre suggestion fait aussi l'affaire :) – pavid

Questions connexes