2012-01-25 86 views
7

当我制作一个具有4个或更多值的三维条形图时,图形看起来正确,但是当我用3条形图尝试时,条形变成三角形,发生了什么?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() 

产生这样的:

Triangular bar

但是当我增加指标和高度的数到5,我得到这样的:

Correct bar

+2

这看起来像一个可能的错误。 –

+1

与3你有三角形和2酒吧它并没有绘制它们... Windows 7 matplotlib 1.1.0 – joaquin

+0

有谁知道我可以在matplotlib中报告错误? – user1170056

回答

0

这是因为你是唯一给它3点积分。只需将代码更改为以下代码即可使用。

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

这几乎肯定是一个错误。试图您的示例代码给我的矩形棒所期望的结果,与任意数量的点(用1,2,3,5,15测试): Example of code working as desired for 3 points

我运行matplotlib版本1.1.1rc,在Linux 。如果可以,请尝试更新到最新版本。请注意,

import matplotlib 
print matplotlib.__version__ 

会告诉你你正在使用的是什么版本。

+0

该代码也可以在OS X 10.7.4上的Python 2.7.3/Matplotlib 1.1.1上按预期工作,所以它是确实可能是一个错误。 – Tim