为了使用Matplotlib创建水平条形图,我无意中发现了以下片段:

import matplotlib
from pylab import *

val = 3+10*rand(5)    # the bar lengths
pos = arange(5)+.5    # the bar centers on the y axis
print pos
figure(1)
barh(pos,val, align='center')
yticks(pos, ('Tom', 'Dick', 'Harry', 'Slim', 'Jim'))
xlabel('Performance')
title('horizontal bar chart using matplotlib')
grid(True)
show()

我想修改上面的脚本如下:
使绘制的条形图“较短”(即减少绘制的水平条形图的高度)
将负数和正数绘制为同一绘图上的水平条
帮助我进行上述修改的任何帮助(代码片段或链接)都将非常有用。
顺便说一句,如果我想制作堆积水平条(假设每个标签有三个堆积水平条),我如何修改上面的代码来绘制堆积水平条?
[编辑]]
是否有人可以发布两个简短的代码片段,说明如何:
在水平条的另一侧打印标签(例如,“负”条的标签出现在第一个Quarant中,“正”条的标签出现在第二个象限中
绘制多个(例如2或3)水平条(而不是一个)。很好的例子是first two images shown here

最佳答案

import matplotlib
from pylab import *

val = 3-6*rand(5)    # the bar lengths        # changed your data slightly
pos = arange(5)+.5    # the bar centers on the y axis
print pos
figure(1)
barh(pos,val, align='center',height=0.1)    # notice the 'height' argument
yticks(pos, ('Tom', 'Dick', 'Harry', 'Slim', 'Jim'))

gca().axvline(0,color='k',lw=3)   # poor man's zero level

xlabel('Performance')
title('horizontal bar chart using matplotlib')
grid(True)
show()

一般来说,我建议不要使用from pyplot import *。除非您处于交互模式,否则请使用面向对象的方法:
import matplotlib.pyplot as plt
from numpy.random import rand
from numpy import arange

val = 3-6*rand(5)    # the bar lengths
pos = arange(5)+.5    # the bar centers on the y axis
print pos

fig = plt.figure()
ax = fig.add_subplot(111)
ax.barh(pos,val, align='center',height=0.1)
ax.set_yticks(pos, ('Tom', 'Dick', 'Harry', 'Slim', 'Jim'))

ax.axvline(0,color='k',lw=3)   # poor man's zero level

ax.set_xlabel('Performance')
ax.set_title('horizontal bar chart using matplotlib')
ax.grid(True)
plt.show()

各种绘图的一个良好起点是matplotlib gallery

10-04 13:34