如何在matplotlib中绘制伪三维条形图?

时间:2013-08-05 11:50:40

标签: python 3d matplotlib bar-chart

我想为老板准备一些统计数据。 matplotlib条形图的平面样式会使它们对于那些习惯于Excel图表的人来说看起来很便宜,但为了清楚起见,可能应该避免使用这样的样式。

我不是那么远,但我不知道如何给出正确的酒吧厚度:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

row = [0, 0, 0, 22, 0, 0, 4, 16, 2, 0, 4, 4, 12, 26]
length = len(row)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.arange(length)
y = np.zeros(14)
z = np.array(row)
width = 0.8
ax.bar3d(x, y, [0]*length, 0.5, 0.001, z)
ax.set_xticks(x + width/2)
ax.set_xticklabels(titles[2:], rotation=90)
ax.set_yticks(y)
ax.set_zlabel('count')
plt.show()

结果:Result

1 个答案:

答案 0 :(得分:4)

条形图的厚度由dx, dyax.bar3d个参数设置,其0.5, 0.001值为dy。问题,我确定你注意到,更改ax.set_ylim(0, 0.002)将改变条的长度(在你的情况下是无标题轴),但matplotlib有助于重新调整y轴,以便数据填充它。这使它看起来很奇怪(我假设这是问题,对不起,如果不是)。

要解决此问题,您可以使用dy设置y限制(基本上您的y值从0-> 0.001)。如果您更改bar3d或当前为0的from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np row = [0, 0, 0, 22, 0, 0, 4, 16, 2, 0, 4, 4, 12, 26] length = len(row) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.bar3d(range(length), [0]*length, [0]*length, 0.5, 0.001, row) ax.set_ylim(-0.005, 0.005) plt.show() 的y值,则需要相应地更新限制。

示例:

{{1}}

Example