Exemplo n.º 1
0
def bookreport():
    bar = Bar()
    bar.add_xaxis(['Last Day', 'Last 7 days', 'Last 30 days'])
    conn = connect_to_database()
    borrowedBookNums = []
    returnedNums = []
    days = [1, 7, 30]
    for day in days:
        sql = "select count(*) from BookBorrowed where (CURRENT_DATE  - BorrowedDate) <= %s" % day
        cursor = conn.cursor()
        try:
            cursor.execute(sql)
        except Exception as e:
            print(e)
        conn.commit()
        res = cursor.fetchone()
        borrowedBookNums.append(res[0])

        sql = "select count(*) from BookBorrowed where (CURRENT_DATE  - ReturnedDate) <= %s" % day
        cursor = conn.cursor()
        try:
            cursor.execute(sql)
        except Exception as e:
            print(e)
        conn.commit()
        res = cursor.fetchone()
        returnedNums.append(res[0])
    bar.add_yaxis('Borrowed Book', borrowedBookNums)
    bar.add_yaxis('Returned Book', returnedNums)
    return render_template('report.html', myechart=bar.render_embed())
Exemplo n.º 2
0
def show(x: list, y: list, title: str = "键盘键入统计"):
    bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND))
    bar.add_xaxis(x)
    bar.add_yaxis("", y, category_gap="60%")
    bar.set_series_opts(
        itemstyle_opts={
            "normal": {
                "color":
                JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                offset: 0,
                color: 'rgba(0, 244, 255, 1)'
            }, {
                offset: 1,
                color: 'rgba(250, 177, 160, 1)'
            }], false)"""),
                "barBorderRadius": [30, 30, 30, 30],
                "shadowColor":
                "rgb(0, 160, 221)",
            }
        })
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title=title),
        datazoom_opts=[opts.DataZoomOpts(),
                       opts.DataZoomOpts(type_="inside")],
    )

    bar.load_javascript()
    bar.render_notebook()

    return Markup(bar.render_embed())
Exemplo n.º 3
0
def score_dis(request):
    """获取教师所教学生的成绩分布"""
    nid = 't1'
    # 获取教师所授课程编号
    course_number = sqlheper.get_list('select course_number from course where teacher_number=%s', [nid, ])
    cn = []
    for i in course_number:
        for key, value in i.items():
            cn.append(value)
    # 在学生选课表中查找选择该课程的学生的成绩
    student_mark = sqlheper.get_list('select mark from stu_c where course_number=%s', [cn, ])
    mark_a, mark_b, mark_c, mark_d, mark_f = [], [], [], [], []
    for i in student_mark:
        for key, values in i.items():
            values = int(values)
            if values >= 90:
                mark_a.append(values)
            elif 80 <= values < 90:
                mark_b.append(values)
            elif 70 <= values < 80:
                mark_c.append(values)
            elif 60 <= values < 70:
                mark_d.append(values)
            else:
                mark_f.append(values)
    mark = [len(mark_a), len(mark_b), len(mark_c), len(mark_d), len(mark_d)]
    bar = Bar(init_opts=opts.InitOpts(width='800px', height='500px', theme=ThemeType.LIGHT))
    bar.add_xaxis(['优秀', '良好', '中等', '及格', '不及格'])
    bar.add_yaxis('学生成绩', mark)
    return render(request, 'student_mark_ana.html', {'bar': bar.render_embed()})
Exemplo n.º 4
0
def generate_top_bar_html(rows, title):
    xx1 = []
    yy1 = []

    for row in rows:
        xx1.append(row[0].replace('转债', ''))
        yy1.append(row[1])

    bar = Bar(init_opts=opts.InitOpts(
        height='700px', width='1424px', theme=ThemeType.SHINE))
    # 底部x轴
    bar.add_xaxis(xx1)
    bar.add_yaxis(
        '价格(元)',
        yy1,
        bar_width=25,
        category_gap='1%',
        gap='1%',
        label_opts=opts.LabelOpts(position="top", ),
    )
    bar.set_series_opts(itemstyle_opts=opts.ItemStyleOpts(
        color=JsCode("function(x){return x.data>0?'#c23531':'#1d953f'}")))
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
            title="=========" + title + "=========",
            pos_left='center',
            pos_top='-1px',
        ),
        tooltip_opts=opts.TooltipOpts(is_show=False),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(
            # data=None,
            # type_='category',
            # name_gap=0,
            # name_rotate=90,
            axislabel_opts=opts.LabelOpts(rotate=-60, ),
            is_scale=True,
            name_location='middle',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=True,
                                            # symbol=['none', 'arrow']
                                            )),
        yaxis_opts=opts.AxisOpts(
            type_='value',
            name='价格(元)',
            # name_rotate=90,
            name_gap=40,
            name_location='middle',
            # min_=0,
            is_scale=True,
            # axislabel_opts=opts.LabelOpts(formatter='{value}%'),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            # symbol=['none', 'arrow']
                                            )),
    )

    bar_html = bar.render_embed('template.html', html_utils.env)
    return bar_html
Exemplo n.º 5
0
def bookreport():
    bar = Bar()
    bar.add_xaxis([
        'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
        'Saturday'
    ])
    bar.add_yaxis('Borrowed Book', [12, 15, 20, 10, 5, 8, 10])
    bar.add_yaxis('Returned Book', [10, 18, 10, 7, 6, 6, 4])
    return render_template('report.html', myechart=bar.render_embed())
Exemplo n.º 6
0
def bar1() -> Bar:
    bar=Bar()  # instantiation
    bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
    bar.add_yaxis("商家B", [15, 25, 16, 55, 48, 8])
    bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
        title="柱状图基本事例",
        subtitle="我是副标题"))

    return Markup(bar.render_embed())
Exemplo n.º 7
0
def BarCharts(datas):
    bar = Bar(init_opts=opts.InitOpts(width="100%"))
    bar.add_xaxis(datas[1])
    for data in datas[2]:
        bar.add_yaxis(data[0], data[1])
    # .add_yaxis("商家B", [20, 10, 40, 30, 40, 50])
    bar.set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts=opts.TitleOpts(title=datas[0]),
    )
    return bar.render_embed()
Exemplo n.º 8
0
def demo(request):
    import store
    bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))

    #x = store.models.Product.objects.get(sortno=1)
    #y = store.models.Product.objects.get(sortno=2)

    bar.add_xaxis(["純色腮紅", "三色修容餅", "柔焦無瑕粉餅", "經典緞光唇膏", "精萃水亮唇膏"])
    bar.add_yaxis("康是美", [100, 50, 45, 20, 50])
    bar.add_yaxis("寶雅", [80, 40, 10, 100, 70])
    bar.add_yaxis("屈臣氏", [20, 30, 45, 130, 80])

    bar.set_global_opts(title_opts=opts.TitleOpts(title="品類需求量", subtitle="個"))

    return HttpResponse(bar.render_embed())
Exemplo n.º 9
0
def trendresult():
    word = request.form.get("word")
    begin = request.form.get("begin")
    end = request.form.get("end")
    if begin == "" and end == "":
        date_list = mp.Get_time_14()  # 当前时间回溯14天
    else:
        date_list = mp.Get_time_every(begin, end)  # 当前时间段
    [date_list_new, date_every_sentiment] = mp.get_sentiment(date_list, word)
    [date_list_new, date_every_num] = mp.draw_bar(date_list, word)
    [date_l, true_l, predict_l] = arima.arima_model(date_list_new,
                                                    date_every_sentiment)
    bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS))
    dictd = {}
    for i in range(len(date_every_sentiment)):
        if date_every_sentiment[i] < 0.2:
            dictd[date_list_new[i]] = "高度预警"
        elif date_every_sentiment[i] < 0.3:
            dictd[date_list_new[i]] = "中度预警"
        elif date_every_sentiment[i] < 0.4:
            dictd[date_list_new[i]] = "低度预警"
    # 统计趋势
    c = (Line(init_opts=opts.InitOpts(
        theme=ThemeType.WESTEROS)).add_xaxis(date_l).add_yaxis(
            '实际值', true_l, is_connect_nones=True).add_yaxis(
                '预测值', predict_l, is_connect_nones=True).set_series_opts(
                    label_opts=opts.LabelOpts(is_show=False)))
    # 统计数量
    bar.add_xaxis(date_list_new)
    bar.add_yaxis("涉及的词条数量", date_every_num)
    # 预警
    return render_template('trendresult.html',
                           myechart1=c.render_embed(),
                           myechart2=bar.render_embed(),
                           begin=date_list[0],
                           end=date_list[-1],
                           data=dictd,
                           length=len(dictd))
Exemplo n.º 10
0
def bar():
    cursor = connection.cursor()
    cursor.execute("""SELECT
            DATE_FORMAT( rev.create_time, '%Y-%m-%d' ) create_time,
            revt.`name`,
            count( * ) 
        FROM
            resource_event rev
            LEFT JOIN resource_eventtype revt ON rev.event_type_id = revt.id 
        GROUP BY
            create_time,
            event_type_id""")
    rows = cursor.fetchall()
    name_list = []
    event_type_list = []
    for row in rows:
        name = row[0]
        if name not in name_list:
            name_list.append(name)
        event_type = row[1]
        if event_type not in event_type_list:
            event_type_list.append(event_type)

    bar = Bar(init_opts=opts.InitOpts(height="350px"))
    bar.add_xaxis(name_list)
    for event_type in event_type_list:
        tmp_list = [0 for i in range(len(name_list))]
        for row in rows:
            if event_type == row[1]:
                index = name_list.index(row[0])
                tmp_list[index] = row[2]

        bar.add_yaxis(event_type, tmp_list)
    bar.set_global_opts(title_opts=opts.TitleOpts(title="违章记录统计"), toolbox_opts=opts.ToolboxOpts(is_show=False,
                                                                                                 feature=opts.ToolBoxFeatureOpts(
                                                                                                     restore=None,
                                                                                                     data_zoom=None)))
    return bar.render_embed()
Exemplo n.º 11
0
def ana(request):
    # 获取学生所有科目成绩,绘制柱状图
    nid = '2017322001'
    course = []
    mark = []
    course_list = sqlheper.get_list(
        'select course.course_name,mark from stu_c left join course on stu_c.course_number=course.course_number where student_id=%s',
        [
            nid,
        ])
    for i in course_list:
        for key, values in i.items():
            if key == 'course_name':
                course.append(values)
            else:
                mark.append(values)
    print(course, mark)
    bar = Bar(init_opts=opts.InitOpts(
        width='800px', height='500px', theme=ThemeType.LIGHT))
    bar.add_xaxis(course)
    bar.add_yaxis('学生成绩', mark)
    return render(request, 'student_mark_ana.html',
                  {'bar': bar.render_embed()})
Exemplo n.º 12
0
def detail(request):
    try:
        if request.session['username']==None:
            return HttpResponseRedirect('/login/')
    except KeyError:
        return HttpResponseRedirect('/login/')
    subject = request.GET.get('subject')
    taskid = request.GET.get('taskid')
    username = request.session['username']
    r={}
    result = DoubanSubject.objects.get(subject=subject,taskid=taskid)
    bar=Bar()
    mychartname = result.name+"评分占比"
    bar.add_xaxis(["五星", "四星", "三星", "二星", "一星"])
    bar.add_yaxis(mychartname,  [float(result.star_five[:-1]),  float(result.star_four[:-1]), float(result.star_three[:-1]), float(result.star_two[:-1]),float(result.star_one[:-1])])
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title=mychartname),
        toolbox_opts=opts.ToolboxOpts(),
        legend_opts=opts.LegendOpts(is_show=False),
    )
    r['myechart'] = bar.render_embed()
    r['result']=result

    return render(request,'detail.html',r)
Exemplo n.º 13
0
def admin_ana(request):
    """
    了解专业人数分布情况
    1.获取所有专业名称
    2.获取每个专业人数
    """
    major_list = sqlheper.get_list('select major_name from major', [])
    major = []
    for i in major_list:
        for key, value in i.items():
            major.append(value)
    major_num = []
    for i in major:
        num = len(
            sqlheper.get_list('select * from student where major_name=%s',
                              [i]))
        major_num.append(num)
    bar = Bar(init_opts=opts.InitOpts(
        width='1200px', height='500px', theme=ThemeType.LIGHT))
    bar.set_global_opts(title_opts=opts.TitleOpts(title='不同专业人数分布情况'))
    bar.add_xaxis(major)
    bar.add_yaxis('人数', major_num, bar_max_width='40px')

    # 了解课程和成绩的相关性
    course_list = sqlheper.get_list(
        'select course_number,course_name from course order by id', [])
    print(course_list)
    course_name, course_num = [], []
    for i in course_list:
        for key, value in i.items():
            if key == 'course_name':
                course_name.append(value)
            else:
                course_num.append(value)
    print(course_num)
    course_h, course_m, course_l = [], [], []

    for i in course_num:
        # 对每一门课程,分别计算高、中、低的成绩人数
        high, med, low = 0, 0, 0
        mark = sqlheper.get_list(
            'select mark from stu_c where course_number=%s', [
                i,
            ])
        for j in mark:
            for key, value in j.items():
                # 遍历所有选择该课程的学生成绩
                value = int(value)
                if value > 85:
                    high += 1
                elif 60 < value <= 85:
                    med += 1
                elif value <= 60:
                    low += 1

        course_h.append(high)
        course_m.append(med)
        course_l.append(low)
    bar_c = Bar(init_opts=opts.InitOpts(
        width='1200px', height='500px', theme=ThemeType.LIGHT))
    bar_c.set_global_opts(title_opts=opts.TitleOpts(title='课程和成绩的相关性'))
    print(course_name)
    bar_c.add_xaxis(course_name)
    bar_c.add_yaxis('高分段', course_h)
    bar_c.add_yaxis('中分段', course_m)
    bar_c.add_yaxis('低分段', course_l)

    stu_num = len(sqlheper.get_list('select * from student', []))
    cou_num = len(sqlheper.get_list('select * from course', []))
    tea_num = len(sqlheper.get_list('select * from teacher', []))
    return render(
        request, 'admin_ana.html', {
            'bar': bar.render_embed(),
            'bar_c': bar_c.render_embed(),
            'stu_num': stu_num,
            'cou_num': cou_num,
            'tea_num': tea_num,
        })
Exemplo n.º 14
0
def generate_bar_html(rows, title):
    x = []
    y = []
    for row in rows:
        x.append(row[0])
        y.append({'value': row[1], 'range': [row[2], row[3]]})

    bar = Bar(init_opts=opts.InitOpts(height='700px',
                                      width='1424px',
                                      theme=ThemeType.SHINE,
                                      chart_id="cb_tree_map"))
    bar.add_xaxis(x)
    bar.add_yaxis(
        "个数",
        y,
        yaxis_index=0,
        bar_width=50,
        category_gap='1%',
        gap='1%',
        label_opts=opts.LabelOpts(
            position="top",
            formatter=JsCode("function(x){return x.data[0];}")),
    )
    bar.set_series_opts(itemstyle_opts=opts.ItemStyleOpts(color=JsCode(
        "function(x){return x.data['range'][0]=='0'?'lightgray':(x.data['range'][0] < 0 ? 'lightgreen':'lightcoral')}"
    )))
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
            title="=========" + title + "=========",
            subtitle_textstyle_opts=opts.TextStyleOpts(font_weight='bold',
                                                       font_size='15px'),
            pos_left='center',
            pos_top='-1px',
        ),
        tooltip_opts=opts.TooltipOpts(is_show=False),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(
            # data=None,
            # type_='category',
            # name_gap=0,
            # name_rotate=90,
            # axislabel_opts=opts.LabelOpts(
            #     rotate=-60,
            # ),
            name='价格涨跌区间',
            name_gap=35,
            is_scale=True,
            name_location='middle',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=True,
                                            # symbol=['none', 'arrow']
                                            )),
        yaxis_opts=opts.AxisOpts(
            type_='value',
            name='个数',
            # name_rotate=90,
            name_gap=35,
            name_location='middle',
            # min_=0,
            # max_=max_value,
            is_scale=True,
            axislabel_opts=opts.LabelOpts(formatter='{value}'),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            # symbol=['none', 'arrow']
                                            )),
    )

    bar_html = bar.render_embed('template.html', html_utils.env)
    return bar_html
Exemplo n.º 15
0
def analyze(request):
    try:
        if request.session['username']==None:
            return HttpResponseRedirect('/login/')
    except KeyError:
        return HttpResponseRedirect('/login/')
    r={}
    r['username'] = request.session['username']
    taskid = request.GET.get('taskid')
    finshed = DoubanSubject.objects.filter(taskid=taskid)
    typelist=[]
    l=[]
    for i in finshed:
        m=i.type.split(' ')
        for k in m:
            if k not in typelist and k!='' :
                typelist.append(k)
                l.append(1)
            elif k!='':
                l[typelist.index(k)]=l[typelist.index(k)]+1
    bar=Bar()
    bar.add_xaxis(typelist)
    print(typelist)
    print(l)
    bar.add_yaxis("数量",l)
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title="类型数量"),
        toolbox_opts=opts.ToolboxOpts(),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    )
    r['myechart'] = bar.render_embed()
    
    data_pair = [list(z) for z in zip(typelist, l)]
    data_pair.sort(key=lambda x: x[1])
    pie=Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#DDDD77"))
    pie.add(
        series_name="类型占比",
        data_pair=data_pair,
        rosetype="radius",
        radius="55%",
        center=["50%", "50%"],
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    )
    pie.set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        ),
        label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
    )

    r['mypie']=pie.render_embed()
    namelist=[]
    scorelist=[]
    for i in finshed:
        score=i.score
        name=i.name
        namelist.append(name)
        scorelist.append(score)
            
               
    bar=Bar()
    bar.add_xaxis(namelist)
    print(typelist)
    print(l)
    bar.add_yaxis("评分",scorelist)
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title="评分"),
        toolbox_opts=opts.ToolboxOpts(),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    )
    bar.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        ),
    )
    r['score'] = bar.render_embed()
    return render(request,'analyze.html',r)
Exemplo n.º 16
0
def pyecharts(request):
    """dashboard view"""
    # 工单数量统计
    chart_dao = ChartDao()
    data = chart_dao.workflow_by_date(30)
    today = date.today()
    one_month_before = today - relativedelta(days=+30)
    attr = chart_dao.get_date_list(one_month_before, today)
    _dict = {}
    for row in data['rows']:
        _dict[row[0]] = row[1]
    value = [_dict.get(day) if _dict.get(day) else 0 for day in attr]
    bar1 = Bar(init_opts=opts.InitOpts(width='600', height='380px'))
    bar1.add_xaxis(attr)
    bar1.add_yaxis("", value)

    # 工单按组统计
    data = chart_dao.workflow_by_group(30)
    attr = [row[0] for row in data['rows']]
    value = [row[1] for row in data['rows']]
    pie1 = Pie(init_opts=opts.InitOpts(width='600', height='380px'))
    pie1.set_global_opts(title_opts=opts.TitleOpts(title=''),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%",
                                                     is_show=False))
    pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    pie1.add("", [list(z) for z in zip(attr, value)])

    # 工单按人统计
    data = chart_dao.workflow_by_user(30)
    attr = [row[0] for row in data['rows']]
    value = [row[1] for row in data['rows']]
    bar2 = Bar(init_opts=opts.InitOpts(width='600', height='380px'))
    bar2.add_xaxis(attr)
    bar2.add_yaxis("", value)

    # SQL语句类型统计
    data = chart_dao.syntax_type()
    attr = [row[0] for row in data['rows']]
    value = [row[1] for row in data['rows']]
    pie2 = Pie()
    pie2.set_global_opts(title_opts=opts.TitleOpts(title='SQL上线工单统计(类型)'),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%"))
    pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    pie2.add("", [list(z) for z in zip(attr, value)])

    # SQL查询统计(每日检索行数)
    attr = chart_dao.get_date_list(one_month_before, today)
    effect_data = chart_dao.querylog_effect_row_by_date(30)
    effect_dict = {}
    for row in effect_data['rows']:
        effect_dict[row[0]] = int(row[1])
    effect_value = [
        effect_dict.get(day) if effect_dict.get(day) else 0 for day in attr
    ]
    count_data = chart_dao.querylog_count_by_date(30)
    count_dict = {}
    for row in count_data['rows']:
        count_dict[row[0]] = int(row[1])
    count_value = [
        count_dict.get(day) if count_dict.get(day) else 0 for day in attr
    ]
    line1 = Line(init_opts=opts.InitOpts(width='600', height='380px'))
    line1.set_global_opts(title_opts=opts.TitleOpts(title=''),
                          legend_opts=opts.LegendOpts(selected_mode='single'))
    line1.add_xaxis(attr)
    line1.add_yaxis("检索行数",
                    effect_value,
                    is_smooth=True,
                    markpoint_opts=opts.MarkPointOpts(
                        data=[opts.MarkPointItem(type_="average")]))
    line1.add_yaxis("检索次数",
                    count_value,
                    is_smooth=True,
                    markline_opts=opts.MarkLineOpts(data=[
                        opts.MarkLineItem(type_="max"),
                        opts.MarkLineItem(type_="average")
                    ]))

    # SQL查询统计(用户检索行数)
    data = chart_dao.querylog_effect_row_by_user(30)
    attr = [row[0] for row in data['rows']]
    value = [int(row[1]) for row in data['rows']]
    pie4 = Pie(init_opts=opts.InitOpts(width='600', height='380px'))
    pie4.set_global_opts(title_opts=opts.TitleOpts(title=''),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%",
                                                     is_show=False))
    pie4.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    pie4.add("", [list(z) for z in zip(attr, value)])

    # SQL查询统计(DB检索行数)
    data = chart_dao.querylog_effect_row_by_db(30)
    attr = [row[0] for row in data['rows']]
    value = [int(row[1]) for row in data['rows']]
    pie5 = Pie(init_opts=opts.InitOpts(width='600', height='380px'))
    pie5.set_global_opts(title_opts=opts.TitleOpts(title=''),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%",
                                                     is_show=False))
    pie5.set_series_opts(
        label_opts=opts.LabelOpts(formatter="{b}: {c}", position="left"))
    pie5.add("", [list(z) for z in zip(attr, value)])

    # 可视化展示页面
    chart = {
        "bar1": bar1.render_embed(),
        "pie1": pie1.render_embed(),
        "bar2": bar2.render_embed(),
        "pie2": pie2.render_embed(),
        "line1": line1.render_embed(),
        "pie4": pie4.render_embed(),
        "pie5": pie5.render_embed(),
    }

    # 获取统计数据
    dashboard_count_stats = {
        "sql_wf_cnt": SqlWorkflow.objects.count(),
        "query_wf_cnt": QueryPrivilegesApply.objects.count(),
        "user_cnt": Users.objects.count(),
        "ins_cnt": Instance.objects.count()
    }

    return render(request, "dashboard.html", {
        "chart": chart,
        "count_stats": dashboard_count_stats
    })
Exemplo n.º 17
0
def generate_bar_html(rows, title):
    xx1 = []
    xx2 = []
    yy1 = []
    yy2 = []

    count = 0
    for row in rows:
        count += 1
        bond_code = row[0]
        bond_code = trade_utils.rebuild_bond_code(bond_code)
        if count <= 20:
            xx1.append(row[1].replace('转债', ''))
            yy1.append({'value': row[2], 'bond_code': bond_code, 'price': row[3], 'premium': row[4], 'name': row[1]})
        else:
            xx2.append(row[1].replace('转债', ''))
            yy2.append({'value': row[2], 'bond_code': bond_code, 'price': row[3], 'premium': row[4], 'name': row[1]})
    max_value = 0
    size = len(yy1)

    for i in range(size):
        if yy1[i]['value'] + abs(yy2[i]['value']) > max_value:
            max_value = yy1[i]['value'] + abs(yy2[i]['value'])

    max_value = round(max_value * 1.1, 2) + 1

    chart_id = str(abs(hash(title)))
    bar = Bar(init_opts=opts.InitOpts(height='700px', width='1424px', theme=ThemeType.SHINE, chart_id=chart_id))
    view_utils.add_popwin_js_code(bar, chart_id)
    # 底部x轴
    bar.add_xaxis(xx1)
    # 顶部x轴
    bar.extend_axis(
        xaxis_data=xx2,
        xaxis=opts.AxisOpts(
            type_="category",
            position='top',
            axislabel_opts=opts.LabelOpts(
                rotate=-60,
            )
        ),
    )
    # 右侧y轴
    bar.extend_axis(
        yaxis=opts.AxisOpts(
            type_="value",
            position="right",
            name='跌幅(%)',
            name_gap=45,
            name_location='middle',
            min_=-max_value,
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(
                    is_show=True,

                )
            ),
            axislabel_opts=opts.LabelOpts(formatter="{value}%"),
        )
    )
    # 添加涨的柱状图
    bar.add_yaxis("涨", yy1,
                  bar_width=25,
                  category_gap='1%',
                  gap='1%',
                  label_opts=opts.LabelOpts(
                      position="top",
                      formatter=JsCode(
                          "function(x){return x.data['value'] +'%';}"
                      )
                  ),
                  )
    # 添加跌的柱状图
    bar.add_yaxis("跌",
                  yy2,
                  bar_width=25,
                  yaxis_index=1,
                  label_opts=opts.LabelOpts(
                      position="bottom",
                      formatter=JsCode(
                          "function(x){return x.data['value'] +'%';}"
                      )
                  ),
                  )
    # bar.reversal_axis()
    bar.set_series_opts(
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode(
                "function(x){return x.data['value']>0?'#c23531':'#1d953f'}"
            )
        )
    )
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
            title="=========" + title + "=========",
            pos_left='center',
            pos_top='-1px',
        ),
        tooltip_opts=opts.TooltipOpts(
            is_show=True,
            formatter=JsCode("function (params){return '名&nbsp;&nbsp;&nbsp;称: ' + params.data['name'] + '<br/>' + '价&nbsp;&nbsp;&nbsp;格: ' + params.data['price'] + '元<br/>' + '溢价率: ' + params.data['premium']}")
        ),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(
            # data=None,
            # type_='category',
            # name_gap=0,
            # name_rotate=90,
            axislabel_opts=opts.LabelOpts(
                rotate=-60,
            ),
            is_scale=True,
            name_location='middle',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(
                is_on_zero=True,
                # symbol=['none', 'arrow']
            )
        ),
        yaxis_opts=opts.AxisOpts(
            type_='value',
            name='涨幅(%)',
            # name_rotate=90,
            name_gap=35,
            name_location='middle',
            # min_=0,
            max_=max_value,
            is_scale=True,
            axislabel_opts=opts.LabelOpts(formatter='{value}%'),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(
                is_on_zero=False,
                # symbol=['none', 'arrow']
            )
        ),
    )

    bar_html = bar.render_embed('template.html', html_utils.env)
    return bar_html