在matlib中制作条形图

时间:2015-10-08 05:52:58

标签: python graph

这是我第一次使用matlib,我们需要根据给定的数据集创建条形图。我一直在研究这个问题大约一个小时,我想知道是否有人能让我朝着正确的方向前进。

    def plotBarChart(u, p, g):
        bar1 = pyplot.bar(u[0], u[1], width=1, color='blue', align='center')
        bar2 = pyplot.bar(u[0], u[2], width=1, color='red', align='center')
        bar3 = pyplot.bar(u[0], u[3], width=1, color='green',     align='center')

        bar4 = pyplot.bar(p[0], p[1], width=1, color='blue', align='center')
        bar5 = pyplot.bar(p[0], p[2], width=1, color='red', align='center')
        bar6 = pyplot.bar(p[0], p[3], width=1, color='green', align='center')

        bar7 = pyplot.bar(g[0], g[1], width=1, color='blue', align='center')
        bar8 = pyplot.bar(g[0], g[2], width=1, color='red', align='center')
        bar9 = pyplot.bar(g[0], g[3], width=1, color='green', align='center')

        pyplot.legend((bar1, bar2, bar3, bar4, bar5, bar6, bar7, bar8, bar9), ('2012', '2013', '2014'), loc=1)
        pyplot.xticks(pos3, names)

        pyplot.ylabel('Amount of Students Enrolled')
        pyplot.setp(pyplot.xticks()[1], rotation=15)
        pyplot.axis([u[0], g[0], 0, 35000])
        pyplot.show()

    def main():
        u = ['Undergraduate', 30147, 29440, 29255]
        p = ['Professional', 946, 941, 947]
        g = ['Graduate', 8163, 8407, 8568]
        plotBarChart(u, p, g)
    main()

程序应该运行main并获取给定数据并根据所述数据创建条形图。我知道条形图也可以通过循环完成,但我不想进入那个,如果我不必。他们给了我们一个样本输出图像,其中有三组三个条,一个标记为本科,由u数据组成,一个标记为专业,由p数据组成,一个标记为毕业,具有g数据。 y轴从0-35000延伸,x轴是“本科,专业,毕业”我只需要知道我哪里出错了,因为它不断给我一个错误,即条形高度必须小于13或缩放。

1 个答案:

答案 0 :(得分:0)

这应该有效。它使用来自numpy的数组函数而不是for循环。

import numpy as np
import matplotlib.pyplot as plt

def plotBarChart(u, p, g):

    # set bar index array and select a width for each bar
    bar_index = np.array([1, 2, 3])
    bar_width = 0.25

    # plot all bars for each index
    bars1 = plt.bar(bar_index, u, bar_width, color = 'b', label = 'Undergrad')
    bars2 = plt.bar(bar_index + bar_width, p, bar_width, color = 'r', label = 'Professional')
    bars3 = plt.bar(bar_index + 2 * bar_width, g, bar_width, color = 'g', label = 'Grad')

    # set labels and display plot
    plt.title('')
    plt.xlabel('')
    plt.ylabel('')
    plt.xticks(bar_index + 1.5 * bar_width, ['2012', '2013', '2014'])
    plt.legend()
    plt.show()

def main():
    # plot data
    undergrad = [30147, 29440, 29255]
    prof = [946, 941, 947]
    grad = [8163, 8407, 8568]
    plotBarChart(undergrad, prof, grad)

main()

希望这有帮助!