2015-10-05 33 views
1

在显示图表上的实际值时有疑问。我有一个印刷图表,需要显示每个堆积条的值。我如何显示这些值?使用matplotlib在每个堆积条上的Y值

我试过ax.text函数,但它没有给出想要的结果(见图)。因为图表被标准化为1,所以我需要显示每个堆积条的实际值(顶部是总数,它应该分成每个条 - 第一个条应该有1个数字7,第二个条应该有3个数字,其中数字41被每个彩条的大小分割)。是否有可能做到这一点?

我的代码,我怎么拿出多个堆叠条:

def autolabel(rects): 
    # attach some text labels 
    for rect in rects: 
     height = rect.get_height() 
     ax.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%d'%int(height), 
       ha='center', va='bottom') 

p = [] # list of bar properties 
def create_subplot(matrix, colors, axis): 
    bar_renderers = [] 
    ind = np.arange(matrix.shape[1]) 
    bottoms = np.cumsum(np.vstack((np.zeros(matrix.shape[1]), matrix)), axis=0)[:-1] 
    for i, row in enumerate(matrix): 
     print bottoms[i] 
     r = axis.bar(ind, row, width=0.5, color=colors[i], bottom=bottoms[i]) 
     bar_renderers.append(r) 
     autolabel(r) 
    #axis.set_title(title,fontsize=28) 
    return bar_renderers 

p.extend(create_subplot(nauja_matrica,spalvos, ax)) 

enter image description here

回答

2

可以显示与ax.text功能每个叠置条的值。对代码几乎没有任何更正可以获得理想的结果。其实,仅仅通过下面的代码替换autolabel功能:

def autolabel(rects): 
    # Attach some text labels. 
    for rect in rects: 
     ax.text(rect.get_x() + rect.get_width()/2., 
       rect.get_y() + rect.get_height()/2., 
       '%f'%rect.get_height(), 
       ha = 'center', 
       va = 'center') 

这将修正标签的垂直定位,并给予: Staked bars with their values

如果要更改标签,以获得unormalized值,则还有更多的工作要做。最简单的解决方案是将其他参数values(包含非标准化值)传递给autolabel函数。代码将是:

def autolabel(rects, values): 
    # Attach some text labels. 
    for (rect, value) in zip(rects, values): 
     ax.text(rect.get_x() + rect.get_width()/2., 
       rect.get_y() + rect.get_height()/2., 
       '%d'%value, 
       ha = 'center', 
       va = 'center') 

我希望这会帮助你。

+0

谢谢你非常感谢你!你是一个救星;) – orangutangas