2

我是 django 新手,对 python 知之甚少。我正在学习在 django 框架中绘制图表。我绘制了单个条形图,但是在 django 中使用我的项目的数据库 tele_db 绘制多个条形图时遇到问题。但是,在 wxPython 中,以下代码运行良好。你能弄清楚下面代码中的 django 是否有问题:

def graph(request):
    figName="figGraph.png"
    path="F:\MajorWorkspace\Visualisations\\"+figName
    if os.path.exists(path)==False:
        age_gr = []
        countm = []
        countf = []
        import MySQLdb
        db = MySQLdb.connect(host = "localhost",
                             user="root",
                             passwd = "",
                             db = "telecom_db")

        cursor1 = db.cursor()
        cursor2 = db.cursor()

        cursor1.execute("select count(card_no) from demo  where gender = 0 group by age_group")
        cursor2.execute("select count(card_no) from demo  where gender = 1 group by age_group")

        numrows1 = int(cursor1.rowcount)
        #numrows2 = int(cursor2.rowcount)
        sum_male=0
        sum_female=0

        for x in range(numrows1):
            row1 = cursor1.fetchone()
            age_gr.append(x)
            countm.append(row1[0])
            sum_male+=row1[0]
            row2 = cursor2.fetchone()
            countf.append(row2[0])
            sum_female+=row2[0]
        #    avg_call_group[x] =  row[1]    


        cursor1.close()
        cursor2.close()


        import numpy as np
        import matplotlib.pyplot as plt

        N = len(age_gr)

        ind = np.arange(N)  # the x locations for the groups

        width = 0.35       # the width of the bars

        fig = plt.figure()
        ax = fig.add_subplot(111)
        rects1 = ax.bar(ind, countf, width, color='b')

        rects2 = ax.bar(ind+width, countm, width, color='r')

        # add some
        ax.set_ylabel('Scores')
        ax.set_title('Age group and Gender-wise Subscriber Distribution')
        ax.set_xticks(ind+width)
        # \n0:under 16 \n 1:16-20 \n i(<-N):16+5i-20+5i (i<4) \n 5:35-40 \n 6:40-50 \n 7:50 over
        ax.set_xticklabels(('Under 16','16-20','21-25','26-30','31-35','36-40','40-50','Above 50'))
        ax.legend( (rects1[0], rects2[0]), ('male', 'female') )



        def autolabel(rects,sex):
            # attach some text labels
            hf=0
            hm=0
            iter=0
            for rect in rects:
                height = rect.get_height()
                if sex==0:
                    hf+=height
                    print 'Female'
                    print '\n Height='+str(height)+'\n Sum_female='+str(sum_female)
                    pf=(height*1.00/sum_female)*100.00
                    print pf
                    ax.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%1.1f%%'%float(pf), ha='center', va='bottom')
                    iter+=1
                else:
                    hm+=height
                    print 'Male'
                    print '\n Height='+str(height)+'\n Sum_male='+str(sum_male)
                    pm=(height*1.00/sum_male)*100.00
                    print pm
                    ax.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%1.1f%%'%float(pm), ha='center', va='bottom')





        autolabel(rects1,0)
        autolabel(rects2,1)
        fig.savefig(path)
    image_data = open(path, "rb").read()
    return HttpResponse(image_data, mimetype="image/png")
4

0 回答 0