【问题标题】:How to separate the barchart?如何分离条形图?
【发布时间】:2017-10-09 09:33:20
【问题描述】:

如何分隔这些条,我希望每个 4 之间有 1 个宽度的距离(指 4 种不同的类型),并请找到附加的图像,指的是我从这段代码中获得的输出。

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

【问题讨论】:

    标签: python python-2.7 matplotlib


    【解决方案1】:

    一种可能的方法是增加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()
    

    【讨论】:

      【解决方案2】:

      我想添加另一种解决该问题的方法(在试验时解决)是通过降低宽度值,例如它假定 4 个部分的值是 1 加上空白部分。因此,例如通过设置值width = 0.2,我们也会有一个漂亮的条形图。

      【讨论】:

        猜你喜欢
        • 2020-03-25
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 2020-02-18
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多