Half of the problem that you already figured out, since the first difficult bit is to set the graph to translucent with alpha=0.5 . There is a more subtle problem, although this must be taken care of.
The first naive attempt is to duplicate your call on bar3d to another data set. That should work, and so it is. Your stripes completely overlap with each other (in dz2 all nonzero elements are contained in higher bars in dz ), so I suggest making less transparent stripes smaller and higher stripes more transparent, for example:
# less transparent ax1.bar3d(xpos, ypos, zpos, dx , dy ,dz, color = '#ff0080', alpha = 0.3)
However, this leads to an ugly and undesirable result that some faces in z==0 turn out to be visualized in front of the faces in z>0 . This may be specific to the backend used: I run it with ipython using the Qt4Agg backend. It also allows me to revolve around the chart, and in this case it is obvious that fatal rendering problems arise with this approach. Here's a still image:

You can see on the second woman on the left that the zero-level patch behind the panel seems to be in front of the top panel patch. Obviously not what you (or someone, for that matter).
After bar3d a bit of experimentation (and a useful hint for this answer ), I realized that bar3d is just a mistake when building multiple bars at the same time. The workaround is simple: use a loop to create each bar one by one, and the problem (almost completely) goes away:
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np kets = ["|00>","|01>","|10>","|11>"]
When you rotate this graph using an interactive backend, it clearly shows that it behaves almost perfectly (although there are still slight glitches from certain viewing directions). Here is still from a fixed solution:

Finally, note that even if there were no rendering failures, it is not easy to understand such overlapping line art. The second case that you refer to in your question may get away with it, since the two blows are clearly separated. If they had a huge overlap, then the plot would be much more difficult to understand. I propose to consider other methods of visualization, for example, cut each bar into two (with a vertical plane each) and apply two sets of data z side by side at each position.