2012-01-25 119 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