2013-08-05 112 views
1

我想为我的老板准备一些统计数据。 matplotlib条形图的平面样式会使它们看起来便宜于那些用于Excel图表的,尽管为了清楚起见,可能应该避免使用类似这样的样式。如何在matplotlib中绘制伪三维条形图?

我没那么远,但我不明白如何给条的右侧厚度:

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

+3

你尝试过什么?最近有一个关于酒吧的酒吧的问题。对Excel的好奇比较,我有完全相反的反应。 – tacaswell

+0

也许您可以使用[本网站](http://www.jkwchui.com/2010/03/3d-bar-histogram-in-python/)或[此更新/附加信息](http: //www.jkwchui.com/2010/04/3d-histogram-in-python-2/) – Schorsch

+0

Schorsch,谢谢,我一直在那里,但代码变得非常显示。 :( – MKesper

回答

3

条的厚度被设置在ax.bar3d中的dx, dy参数中,您的值为0.5, 0.001。这个问题,因为我相信你注意到,改变dy将改变酒吧的长度(在你的情况下,无标题的轴),但matplotlib有助于重新调整y轴,使数据填充它。这使得它看起来很奇怪(我假设这是问题,如果不是这样,对不起)。

要解决这个问题,你可以使用ax.set_ylim(0, 0.002)(基本上你的y值从0-> 0.001)来设置y限制。如果您更改dy或给出bar3d当前为0的y的值,则需要相应地更新限制。

例子:

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

Example

+0

非常感谢!我不得不做大量的猜测,让y蜱几乎看不见也没有帮助我;) – MKesper

相关问题