2010-08-10 34 views
0

Je veux garder la même largeur des barres quel que soit le nombre de barres comparées est haute ou basse. J'utilise le graphique à barres empilées Matplotlib. la largeur des barres est relative au nombre de barres. Voici mon exemple de code.Comment garder la même largeur des barres quel que soit le nombre de barres que nous comparons dans la figure?

Comment puis-je faire la largeur de la même, peu importe le nombre de barres I 1 à comparer à partir de 10

import numpy as np 
import matplotlib.pyplot as plt 




N =1 
ind = np.arange(N) # the x locations for the groups 
width = 0.35  # the width of the bars: can also be len(x) sequence 




design = [] 
arch = [] 
code = [] 

fig = plt.figure() 



b = [70] 
a= np.array([73]) 
c = [66] 




p1 = plt.bar(ind, a,width, color='#263F6A') 
p2 = plt.bar(ind, b, width, color='#3F9AC9', bottom=a) 
p3 = plt.bar(ind, c, width, color='#76787A', bottom=a+b) 


plt.ylabel('Scores') 
plt.title('CQI Index') 


plt.xticks(ind+width/2., ('P1'))#dynamic - fed 

plt.yticks(np.arange(0,300,15)) 


plt.legend((p1[0], p2[0], p3[0]), ('A','B','C')) 
plt.grid(True) 

plt.show() 

Merci

Répondre

2

La largeur des barres ne change pas, l'ampleur votre image change. Si vous voulez l'échelle de rester le même, vous devez spécifier manuellement quelle plage vous voulez montrer, si votre terrain est 10x10, 100x100 ou 1000000000 x 10

Edit:

Si je comprends bien, ce que vous voulez est quelque chose comme ceci:

Graphique 1 - 2 barres:

10 
+---------------------------+ 
|       | 
|       | 
|       | 
|       | 
|       | 
|  4_     | 
|  | |     | 
| 2_ | |     | 
| | | | |     | 
| | | | |     | 
+---------------------------+ 10 

Graphique 2 - ajouter 2 autres barres

10 
+---------------------------+ 
|       | 
|       | 
|     7_  | 
|     | |  | 
|     | |  | 
|  4_  | |  | 
|  | | 3_ | |  | 
| 2_ | | | | | |  | 
| | | | | | | | |  | 
| | | | | | | | |  | 
+---------------------------+ 10 

Lorsque la largeur apparente des barres n'a pas changé du graphique 1 à Graphique 2. Si tel est ce que vous voulez faire, vous devrez définir l'échelle de votre parcelle

Vous pouvez faire avec

import matplotlib 
matplotlib.use('GTKAgg') 

import matplotlib.pyplot as plt 
import gobject 

fig = plt.figure() 
ax = fig.add_subplot(111) 

def draw1(): 
    plt.bar(0,2) 
    plt.bar(2,4) 
    ax.set_xlim((0,10)) 
    ax.set_ylim((0,10)) 
    fig.canvas.draw() 
    return False 

def draw2(): 
    plt.bar(4,3) 
    plt.bar(6,7) 

    ax.set_xlim((0,10)) 
    ax.set_ylim((0,10)) 
    fig.canvas.draw() 
    return False 

draw1() 
gobject.timeout_add(1000, draw2) 
plt.show() 
+0

Je suis d'accord, la largeur est toujours comme spécifié au début. Ce que je voulais dire en réalité, c'est que je veux que la balance change automatiquement afin que les barres ne soient pas serrées pour s'adapter à la zone de la parcelle. Je veux dire que la zone de traçage devrait être dynamique. Ainsi, au lieu de diviser la zone de traçage sur le nombre de barres, nous pourrions simplement ajouter l'une à l'autre jusqu'à 10 barres. – Atlas

+0

J'ai ajouté un edit ... c'est ce que vous cherchez? –

+0

Désolé si je ne me suis pas exprimé clairement. L'ajout de graphiques n'est pas la fonctionnalité que je recherche. C'était plutôt une analogie. Je ne veux pas ajouter de barres. Je voulais juste expliquer que la largeur devrait ressembler, peu importe le nombre de barres dans la figure. Ils ne devraient pas diviser le chiffre sinon plus nous aurons besoin de barres, plus les graphiques que nous recevrons seront petits. Ils devraient plutôt forcer la figure à se développer un peu pour permettre qu'ils se ressemblent. Sinon, si nous tracons une barre, elle ne devrait pas prendre tout l'espace comme c'est le cas avec mon exemple ci-dessus. Merci – Atlas