3d bargraph issue in Matplotlib

815 views Asked by At

When I make a 3d bargraph with 4 or more values the graph looks correct but when I I try it with 3 the bars become triangles, what's going on?

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

generates this:

Triangular bar

but when I increase the number of indexes and heights to 5 I get this:

Correct bar

2

There are 2 answers

1
Widjet On

This is almost certainly a bug. Trying your example code gives me the desired result of rectangular bars, with any number of points (tested with 1, 2, 3, 5, 15): Example of code working as desired for 3 points

I'm running matplotlib version 1.1.1rc, on linux. If you can, try updating to the latest version. Note that

import matplotlib
print matplotlib.__version__

will tell you what version you're using.

0
rhm2012 On

This is because you are only giving it 3 points to plot. Just change the code to following and it should work.

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