2012-01-25 10 views
7

Quando creo un grafico a barre 3d con 4 o più valori, il grafico sembra corretto ma quando lo provo con 3 le barre diventano triangoli, cosa succede?Problema bargra 3D in Matplotlib

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

color_grade_classes = ['#80FF00','#FFFF00','#FF8000', '#FF0000'] 

for colors, rows in zip(color_grade_classes, [3,2,1,0]): 
    indexs = np.arange(3) 
    heights = np.random.rand(3) 
    print rows, indexs, heights, colors 

    ax.bar(indexs, heights, zs = rows, zdir='y', color=colors, alpha=0.8) 

ax.set_xlabel('X') 
ax.set_ylabel('Y') 

plt.show() 

genera questo:

Triangular bar

ma quando ho aumentare il numero di indici e altezze per 5 ottengo questo:

Correct bar

+2

Sembra un possibile errore. –

+1

con 3 avete triangoli e con 2 barre non li disegna ... windows 7 matplotlib 1.1.0 – joaquin

+0

Qualcuno sa dove posso segnalare bug in matplotlib? – user1170056

risposta

0

Questo è perché tu sei solo dandogli 3 punti per la trama. Basta cambiare il codice per seguire e dovrebbe funzionare.

indexs = np.arange(4) # not 3 
heights = np.random.rand(4) # not 3 
1

Questo è quasi sicuramente un bug. Cercando il codice di esempio mi dà il risultato desiderato di barre rettangolari, con qualsiasi numero di punti (testato con 1, 2, 3, 5, 15): Example of code working as desired for 3 points

sto correndo matplotlib versione 1.1.1rc, su linux . Se puoi, prova ad aggiornare alla versione più recente. Si noti che

import matplotlib 
print matplotlib.__version__ 

indica quale versione si sta utilizzando.

+0

Il codice funziona anche come previsto su Python 2.7.3/Matplotlib 1.1.1 su OS X 10.7.4, quindi è anzi probabilmente un bug. – Tim