Matplotlib中的3D柱状图问题

7 投票
2 回答
801 浏览
提问于 2025-04-17 11:05

当我用4个或更多的数值制作3D柱状图时,图表看起来是正确的。但是当我尝试用3个数值时,柱子变成了三角形,这是怎么回事呢?

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

这样生成的结果是:

三角形柱子

但是当我把数值和高度增加到5时,我得到了这个:

正确的柱子

2 个回答

0

这是因为你只给了它3个点来绘图。只需把代码改成下面这样,它就能正常工作了。

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

这几乎可以肯定是个bug。试着运行你的示例代码,我得到了想要的矩形条形图,点的数量可以是任意的(我测试了1、2、3、5、15个点):

代码正常工作的示例,显示3个点

我在Linux系统上运行的是matplotlib版本1.1.1rc。如果可以的话,试着更新到最新版本。注意,

import matplotlib
print matplotlib.__version__

这段代码可以告诉你你正在使用哪个版本。

撰写回答