如何分开条形图?

时间:2017-10-09 09:33:21

标签: python python-2.7 matplotlib

如何分隔这些条形图,我希望每个条形图之间的距离为1(指4种不同类型),并根据我从此代码中获得的输出找到附加的图像。< / p>

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

2 个答案:

答案 0 :(得分:1)

一种可能的方法是增加ind的间距,以便生成每第4个数字。这将为您的所有四个酒吧留出空间。

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,我们也会有一个不错的条形图。