2017-10-09 72 views
2

我怎样才能分开这些酒吧,我想每个4(指4种不同类型)之间的1宽度距离,并亲切地找到附加的图片参考我从这个代码得到的输出。如何分开条形图?

import numpy as np 
import matplotlib.pyplot as plt 

N = 10 
Google = (10, 15, 32, 29, 13, 35, 2, 20, 27, 29) 

ind = np.arange(N) # the x locations for the groups 
width = 0.35  # the width of the bars 

fig, ax = plt.subplots() 
rects1 = ax.bar(ind, Google, width, color='b') 

Voicebase = (2, 16, 19, 30, 22, 30, 33, 4, 14, 18) 

rects2 = ax.bar(ind + width, Voicebase, width, color='g') 

Watson = (7, 17, 14, 19, 28, 4, 4, 34, 9, 17) 
rects3 = ax.bar(ind + width*2, Watson, width, color='y') 

Remeeting = (12, 21, 19, 35, 24, 6, 22, 31, 19, 14) 
rects4 = ax.bar(ind + width*3, Remeeting, width, color='r') 

# add some text for labels, title and axes ticks 
ax.set_ylabel('Char edit distance') 
ax.set_xticks(ind + width/2) 
ax.set_xticklabels(('A1', 'A2', 'A3', 'A4', 'A5','B1', 'B2', 'B3', 'B4', 'C1')) 

ax.legend((rects1[0], rects2[0], rects3[0], rects4[0]), ('Google', 'Voicebase','Watson', 'Remeeting')) 

def autolabel(rects): 
    """ 
    Attach a text label above each bar displaying its height 
    """ 
    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') 

autolabel(rects1) 
autolabel(rects2) 
autolabel(rects3) 
autolabel(rects4) 
plt.show() 

enter image description here

回答

1

一种可能的方式做到这一点是增加所产生每4个号为您ind这样的间距。这将为您的所有酒吧留下空间。

import numpy as np 
import matplotlib.pyplot as plt 

Google = [10, 15, 32, 29, 13, 35, 2, 20, 27, 29] 
Voicebase = [2, 16, 19, 30, 22, 30, 33, 4, 14, 18] 
Watson = [7, 17, 14, 19, 28, 4, 4, 34, 9, 17] 
Remeeting = [12, 21, 19, 35, 24, 6, 22, 31, 19, 14] 

ind = np.arange(1,40,4) # the x locations for the groups 
width = 0.5  # the width of the bars 

fig, ax = plt.subplots() 

rects1 = ax.bar(ind, Google, width, color='b') 
rects2 = ax.bar(ind + width, Voicebase, width, color='g') 
rects3 = ax.bar(ind + width*2, Watson, width, color='y') 
rects4 = ax.bar(ind + width*3, Remeeting, width, color='r') 

# add some text for labels, title and axes ticks 
ax.set_ylabel('Char edit distance') 
ax.set_xticks(ind + width/2) 
ax.set_xticklabels(('A1', 'A2', 'A3', 'A4', 'A5','B1', 'B2', 'B3', 'B4', 'C1')) 

ax.legend((rects1[0], rects2[0], rects3[0], rects4[0]), ('Google', 'Voicebase','Watson', 'Remeeting')) 

def autolabel(rects): 
    """ 
    Attach a text label above each bar displaying its height 
    """ 
    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') 

autolabel(rects1) 
autolabel(rects2) 
autolabel(rects3) 
autolabel(rects4) 
plt.show() 

enter image description here

-1

我想添加另一种方式来解决这个问题(当尝试解决)是通过降低宽度的例如它假设值1为4个部分加上空白值一。因此,通过设置值width = 0.2例如,我们也会有一个不错的条形图。