示例#1
0
    def bar_base(self) -> Bar:
        start = datetime.datetime.now()

        dispose_unit = []
        done = []
        undo = []
        count_dispose_unit = 30

        event_counts = Event.objects.filter(Q(achieve=1)).values('dispose_unit').annotate(count=Count('dispose_unit')).values('dispose_unit', 'count').order_by('-count')
        event_counts = list(event_counts)
        sum_of_done = 0
        sum_of_undo = 0
        # print(len(event_counts))
        # print(event_counts)
        for i in range(0,count_dispose_unit):
            undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit = event_counts[i]['dispose_unit']))
            undo_event_num = len(undo_event)
            dispose_unit_name = DisposeUnit.objects.filter(id=event_counts[i]['dispose_unit']).values("name")[0]['name']
            dispose_unit.append(dispose_unit_name)
            done.append(event_counts[i]['count'])
            undo.append(undo_event_num)
        for i in range(count_dispose_unit,len(event_counts)):
            undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit=event_counts[i]['dispose_unit']))
            undo_event_num = len(undo_event)
            sum_of_done = sum_of_done + event_counts[i]['count']
            sum_of_undo = sum_of_undo + undo_event_num
        other_unit_num = len(event_counts) - count_dispose_unit
        dispose_unit.append("其他"+str(other_unit_num)+"个部门总和")
        done.append(sum_of_done)
        undo.append(sum_of_undo)
        c = (
            Bar()
                .add_xaxis(dispose_unit)
                .add_yaxis("按期完成", done, stack="stack1",category_gap="60%")
                .add_yaxis("逾期完成", undo, stack="stack1",category_gap="60%")
                .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
                .set_global_opts(
                xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
                title_opts=opts.TitleOpts(title="处理事件最多的部门"),
                datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],

                )
        )

        grid = Grid()

        grid.add(c, grid_opts=opts.GridOpts(pos_bottom="20%"))

        c = grid.dump_options_with_quotes()

        end = datetime.datetime.now()
        print("Bar: " + str(end - start))
        return c
示例#2
0
def liquid_1() -> Grid:
    l1 = (
        Liquid().add(
            "lq",
            [0.8],
            shape=
            "path:// M1986.296938 695.425728H1276.48679l-200.162853-0.316945h-55.904193c-146.135949 0-183.632961-130.48375-183.632961-275.912669v-62.29185c0-145.136354 37.789576-275.937049 183.632961-275.937049h965.877194c146.16033 0 183.632961 130.800695 183.632961 276.229614v62.31623c0 145.428918-37.472632 275.912669-183.632961 275.912669zM1719.405006 37.692055c0-20.893979 15.237732-37.692055 34.327564-37.692055h206.184805c19.065451 0 34.327564 16.798076 34.327564 37.692055v26.135759H1719.405006V37.692055z m-353.320349 0c0-20.893979 15.262113-37.692055 34.327564-37.692055h206.209185c19.065451 0 34.303183 16.798076 34.303183 37.692055v26.135759H1366.084657V37.692055z m-353.612914 0c0-20.893979 15.262113-37.692055 34.327564-37.692055h206.209185c19.04107 0 34.303183 16.798076 34.303183 37.692055v26.135759H1012.471743V37.692055z m230.662698 684.820266h924.893789v130.508131h-75.262208c0.926454 6.631461 1.560344 13.360444 1.560343 20.235709 0 83.161449-68.630747 150.402514-153.474441 150.402514-84.819314 0-153.450061-67.241066-153.45006-150.402514a145.867765 145.867765 0 0 1 1.487202-20.235709h-34.546987c0.950835 6.728983 1.584724 13.555487 1.584725 20.552653 0 83.161449-68.923311 150.402514-153.450061 150.402515-84.819314 0-153.450061-67.241066-153.450061-150.402515 0-6.997167 0.65827-13.823671 1.584724-20.552653H701.426958v-0.316945H438.972255c0.950835 6.728983 1.609105 13.555487 1.609104 20.552654 0 81.601105-66.412133 148.549606-149.963667 150.402514h-2.535559c-84.819314 0-153.474441-67.241066-153.474441-150.402514 0-6.997167 0.65827-13.823671 1.609105-20.552654H37.208106S1.295819 811.915145 0.028039 761.447775c-0.316945-15.554677 23.844004-28.646937 23.502679-46.395848-0.63389-83.478393-8.874455-285.274732 9.21578-329.183781 13.360444-31.767625 37.692055-62.608795 37.692055-62.608795L326.213035 31.767625h465.128735v690.744696h451.792671zM665.831615 146.282231h-172.613033c-54.465751 0-98.618604 43.665246-98.618604 97.521488v195.042975h271.231637V146.282231z",
            center=["70%", "50%"],
            # outline_itemstyle_opts=opts.ItemStyleOpts(color="#74b9f0"),
            is_outline_show=False,
            label_opts=opts.LabelOpts(font_size=15,
                                      formatter='{@score}m³/h',
                                      position="insideRight",
                                      distance=50,
                                      color="#74b9f0"),
        )
        # .set_global_opts(title_opts=opts.TitleOpts(title="多个 Liquid 显示"))
    )

    l2 = Liquid().add(
        "流量",
        [0.67],
        shape=
        "path:// M1247.085714 916.450743H1126.4v-161.792h80.457143c44.266057 0 80.457143-88.970971 80.457143-202.225372 0-113.225143-36.191086-202.196114-80.457143-202.196114H1126.4V228.907886c0-24.283429-16.091429-40.462629-40.228571-40.462629s-40.228571 16.1792-40.228572 40.462629v40.433371h-120.685714V204.624457l28.145371-28.320914c8.045714-8.074971 12.0832-16.149943 12.0832-28.291657V107.549257c24.137143 0 40.228571-16.149943 40.228572-40.433371 0-24.283429-16.091429-40.433371-40.228572-40.433372H643.657143c-24.137143 0-40.228571 16.1792-40.228572 40.433372 0 24.283429 16.091429 40.433371 40.228572 40.433371V148.041143c0 12.141714 4.008229 20.216686 12.0832 28.291657l28.145371 28.320914v64.7168H563.2V148.011886c0-24.283429-88.502857-40.462629-201.142857-40.462629S160.914286 123.757714 160.914286 148.041143v121.329371H80.457143C36.220343 269.341257 0 394.678857 0 552.433371c0 157.754514 36.220343 283.121371 80.457143 283.121372H160.914286v80.896H40.228571C16.091429 916.450743 0 932.600686 0 956.884114c0 24.283429 16.091429 40.433371 40.228571 40.433372h1206.857143c24.137143 0 40.228571-16.1792 40.228572-40.433372 0-24.283429-16.091429-40.433371-40.228572-40.433371zM965.485714 754.658743h-80.457143v-161.792H965.485714v161.792z m-241.371428 0v-161.792h80.457143v161.792h-80.457143z m-80.457143 0h-80.457143v-161.792H643.657143v161.792z m-80.457143 80.896h482.742857v80.896h-482.742857v-80.896z",
        center=["25%", "50%"],
        is_outline_show=False,
        label_opts=opts.LabelOpts(font_size=15,
                                  formatter='{@score}m³/h',
                                  position="inside",
                                  color="#74b9f0"),
    )

    grid = Grid().add(l1,
                      grid_opts=opts.GridOpts()).add(l2,
                                                     grid_opts=opts.GridOpts())
    ch = grid.dump_options_with_quotes()
    return ch
示例#3
0
def liquid() -> Grid:
    l1 = (
        Liquid().add(
            "lq",
            [0.8],
            shape=
            "path:// M128 938.666667v-47.530667h381.866667V863.573333a165.802667 165.802667 0 0 1-142.144-163.648V321.706667h-23.978667v-19.456h-50.069333a42.432 42.432 0 0 0-42.304 42.304V488.810667a93.290667 93.290667 0 0 1 66.666666 89.130666v194.474667a93.12 93.12 0 0 1-68.544 89.6v28.224h-46.933333v-27.733333a93.290667 93.290667 0 0 1-70.4-90.154667v-194.325333a93.290667 93.290667 0 0 1 62.805333-87.893334v-145.493333a98.432 98.432 0 0 1 29.76-70.570667 98.389333 98.389333 0 0 1 68.885334-28.053333h50.069333v-19.2h25.706667a165.802667 165.802667 0 0 1 163.541333-141.312 165.696 165.696 0 0 1 165.269333 165.269333v379.221334h24.96v23.701333h46.4V430.165333a83.456 83.456 0 0 1 83.2-83.2 83.456 83.456 0 0 1 83.2 83.2V784.426667a83.754667 83.754667 0 0 1-70.805333 82.261333v24.64h68.544v47.530667z m714.005333-47.530667v-24.405333a83.498667 83.498667 0 0 1-72.341333-82.496v-84.330667H723.2v24.256h-26.752a165.994667 165.994667 0 0 1-139.648 139.306667v27.733333z",
            center=["70%", "50%"],
            # outline_itemstyle_opts=opts.ItemStyleOpts(color="#74b9f0"),
            is_outline_show=False,
            label_opts=opts.LabelOpts(font_size=15,
                                      formatter='{@score}m³/h',
                                      position="inside",
                                      color="#74b9f0"),
        )
        # .set_global_opts(title_opts=opts.TitleOpts(title="多个 Liquid 显示"))
    )

    l2 = Liquid().add(
        "流量",
        [0.67],
        shape=
        "path:// M1050.615743 622.950934a234.158635 234.158635 0 0 1-5.952372-134.696418c10.336646-68.708294 22.657416-152.713545-84.677292-201.996625 7.072442-26.209638 6.784424-56.48353-15.008938-66.980186l-128.008-62.659916c-27.905744-13.696856-100.838302-10.816676-109.318833 7.20045s-32.002 55.619476 27.745734 69.572348 115.2072 85.157322 115.207201 85.157322a99.2062 99.2062 0 0 0 61.027814 32.002c71.652478 25.6016 67.84424 55.619476 56.931558 125.767861a307.219201 307.219201 0 0 0 11.904744 178.507157c38.658416 88.32552 41.058566 228.590287 7.52047 261.872367a101.190324 101.190324 0 0 1-131.2082 4.48028c-47.170948-32.002-48.003-179.467217-43.746734-272.657041a446.71592 446.71592 0 0 0-10.336646-154.153635 154.057629 154.057629 0 0 0-143.336959-104.454528h-46.466904V39.04244a38.850428 38.850428 0 0 0-38.4024-39.04244H115.229282a38.946434 38.946434 0 0 0-38.4024 39.04244v906.87268H38.424482a37.794362 37.794362 0 0 0-38.402401 39.04244v39.04244h689.579099v-39.04244a38.050378 38.050378 0 0 0-38.4024-39.04244h-38.4024V467.645228h46.018876a77.060816 77.060816 0 0 1 71.108444 51.587224 381.879867 381.879867 0 0 1 6.4004 125.479843c-4.256266 91.04569-8.928558 282.609663 78.020877 341.237327a196.268267 196.268267 0 0 0 109.60685 35.2022 164.394275 164.394275 0 0 0 117.831364-48.995062c85.989374-85.317332 29.793862-301.202825 8.832552-349.205826z m-174.474904-323.220201a19.52122 19.52122 0 1 1 19.2012-19.585224 19.2012 19.2012 0 0 1-19.233202 19.68123zM153.43967 116.903306a38.850428 38.850428 0 0 1 38.4024-39.04244h306.483155a38.946434 38.946434 0 0 1 38.4024 39.04244v233.838615a38.946434 38.946434 0 0 1-38.4024 39.042441H191.84207a38.754422 38.754422 0 0 1-38.4024-39.042441z",
        center=["25%", "50%"],
        is_outline_show=False,
        label_opts=opts.LabelOpts(font_size=15,
                                  formatter='{@score}m³/h',
                                  position="insideLeft",
                                  distance=60,
                                  color="#74b9f0"),
    )

    grid = Grid().add(l1,
                      grid_opts=opts.GridOpts()).add(l2,
                                                     grid_opts=opts.GridOpts())
    ch = grid.dump_options_with_quotes()
    return ch
示例#4
0
    def bar_base(self) -> Bar:
        # start = datetime.datetime.now()
        #
        # dispose_unit = []
        # done = []
        # undo = []
        # count_dispose_unit = 30
        #
        # event_counts = Event.objects.all().values('dispose_unit').annotate(count=Count('dispose_unit')).values('dispose_unit', 'count').order_by('-count')
        # print(event_counts)
        # event_counts = list(event_counts)
        # sum_of_done = 0
        # sum_of_undo = 0
        # # print(len(event_counts))
        # # print(event_counts)
        # for i in range(0,count_dispose_unit):
        #     undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit=event_counts[i]['dispose_unit']))
        #     undo_event_num = len(undo_event)
        #     dispose_unit_name = DisposeUnit.objects.filter(id=event_counts[i]['dispose_unit']).values("name")[0]['name']
        #     dispose_unit.append(dispose_unit_name)
        #     done.append(event_counts[i]['count'])
        #     undo.append(undo_event_num)
        # for i in range(count_dispose_unit,len(event_counts)):
        #     undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit=event_counts[i]['dispose_unit']))
        #     undo_event_num = len(undo_event)
        #     sum_of_done = sum_of_done + event_counts[i]['count']
        #     sum_of_undo = sum_of_undo + undo_event_num
        # other_unit_num = len(event_counts) - count_dispose_unit
        # dispose_unit.append("其他"+str(other_unit_num)+"个部门总和")
        # done.append(sum_of_done)
        # undo.append(sum_of_undo)
        # c = (
        #     Bar()
        #         .add_xaxis(dispose_unit)
        #         .add_yaxis("按期完成", done, stack="stack1",category_gap="60%")
        #         .add_yaxis("逾期完成", undo, stack="stack1",category_gap="60%")
        #         .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        #         .set_global_opts(
        #         xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        #         # title_opts=opts.TitleOpts(title="处理事件最多的部门"),
        #         datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
        #
        #         )
        # )
        #
        # grid = Grid()
        #
        # grid.add(c, grid_opts=opts.GridOpts(pos_bottom="20%"))
        #
        # c = grid.dump_options_with_quotes()
        #
        # end = datetime.datetime.now()
        # print("Bar: " + str(end - start))

        start = datetime.date(2016, 6, 6)
        end = datetime.date(2019, 6, 6)
        y_lists = []
        x_list = []
        b = Bar()

        event_counts = DisposeUnit.objects.all().values(
            'name', 'number').order_by('-number')
        for achieve in achieves:
            new_list = [achieve.name]
            limit = 0
            for dispose_unit_node in event_counts:
                dispose_unit = DisposeUnit.objects.get(
                    name=dispose_unit_node['name'])
                if limit < 30:
                    new_len = len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(achieve=achieve)))
                    new_list.append(new_len)
                    new_len = 0
                else:
                    new_len += len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(achieve=achieve)))
                limit += 1
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for dispose_unit_node in event_counts:
            if limit >= 30:
                break
            x_list.append(dispose_unit_node['name'])
            limit += 1
        x_list.append("其他")

        b.add_xaxis(x_list)
        for y_list in y_lists:
            b.add_yaxis(y_list[0],
                        y_list[1:],
                        stack="stack1",
                        category_gap="60%")
        b.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) \
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
            # title_opts=opts.TitleOpts(title="处理事件最多的部门"),
            datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], )
        c = (b)

        grid = Grid()

        grid.add(c, grid_opts=opts.GridOpts(pos_bottom="20%"))

        c = grid.dump_options_with_quotes()

        return c
示例#5
0
def find_proportion_render(x, y, z, part_name, main_name, query, table_path,
                           answer):
    x = list(map(str, x))
    y = list(map(float, y))
    z = list(map(float, z))
    colorList = ['#f36c6c', '#e6cf4e', '#20d180', '#0093ff']
    y_part = []
    y_main = []
    for i in range(len(y)):
        percentage = y[i] / z[i] * 100
        percentage = str(percentage).split('.')[0] + '.' + str(
            percentage).split('.')[1][:2]
        y_part.append(
            opts.BarItem(
                name=x[i],
                value=y[i],
                label_opts=opts.LabelOpts(position="insideTop",
                                          formatter=str(percentage) + "%"),
                itemstyle_opts=opts.ItemStyleOpts(color=colorList[2])))
        y_main.append(opts.BarItem(
            name=x[i],
            value=z[i] - y[i],
        ))
    bar = Bar()
    bar.add_xaxis(x)
    bar.add_yaxis('',
                  y_axis=y_part,
                  stack='stack1',
                  label_opts=opts.LabelOpts(position="insideTop"),
                  itemstyle_opts=opts.ItemStyleOpts(color=colorList[2]),
                  tooltip_opts=opts.TooltipOpts(formatter=part_name + ':{c}')),
    bar.add_yaxis('',
                  y_axis=y_main,
                  stack='stack1',
                  label_opts=opts.LabelOpts(is_show=False),
                  color="gray",
                  tooltip_opts=opts.TooltipOpts(formatter=main_name + ':{c}'))
    bar.set_global_opts(
        datazoom_opts=[
            opts.DataZoomOpts(range_start=10, range_end=90),
            opts.DataZoomOpts(type_="inside")
        ],
        legend_opts=opts.LegendOpts(is_show=False),
        graphic_opts=[
            opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=[
                        '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer
                    ],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333")))
        ])
    bar.render("aggregation.html")
    grid = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG,
    ))
    grid.add(bar, grid_opts={'left': '20%', 'bottom': '34%'})
    option1 = grid.dump_options_with_quotes()
    option1 = json.loads(option1)
    option = {"option": [option1], "query": query}
    return option
示例#6
0
def find_extremum_render(x,y,x_name,y_name,query,operator,answer):
    x=list(map(str,x))
    y=list(map(float,y))
    makepoint=[]
    makeline=[]
    if operator=="MAX":
        makepoint.append(opts.MarkPointItem(type_="max",value="max",itemstyle_opts=opts.ItemStyleOpts(opacity=0.6)))
        makeline.append(opts.MarkPointItem(type_="max", value="max"))
    else:
        makepoint.append(opts.MarkPointItem(type_="min", value="min", itemstyle_opts=opts.ItemStyleOpts(opacity=0.6)))
        makeline.append(opts.MarkPointItem(type_="min", value="min"))
    line=Line()
    line.add_xaxis(x)
    line.add_yaxis(
        y_name,
        y_axis=y,
        label_opts=opts.LabelOpts(is_show=False),
        symbol_size='100%',
        markpoint_opts=opts.MarkPointOpts(
            data=makepoint,
            symbol_size=50,
            label_opts=opts.LabelOpts(formatter=operator)
        ),
        markline_opts=opts.MarkLineOpts(
            data=makeline,
            label_opts=opts.LabelOpts(formatter=operator+":{c}")
        )
    )

    line.set_global_opts(
        datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90),
                       opts.DataZoomOpts(type_="inside")],
        yaxis_opts=opts.AxisOpts(min_=int(min(y)-(max(y)-min(y))/10),name=y_name,axislabel_opts=opts.LabelOpts(font_size="100%"),name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=40,font_size='100%'),name=x_name,name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
        graphic_opts=[opts.GraphicText(
            graphic_item=opts.GraphicItem(
                left="center",
                top="bottom",
                z=100,
            ),
            graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                # 可以通过jsCode添加js代码,也可以直接用字符串
                text=['\n' + "Q:" + ' ' + query + '\n' +"\n"+ 'A:' + ' ' + answer],
                font="14px Microsoft YaHei",
                graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                    fill="#333"
                )
            )
        )]
    )
    grid = Grid( init_opts=opts.InitOpts(
        width="100%",
        height="100%",
                            renderer= globals.RenderType.SVG,
                            ))
    grid.add(line,  grid_opts={'left':'20%','bottom':'34%'})
    # grid1=Grid()
    # grid1.add(line,  grid_opts={'left':'20%','bottom':'34%'})
    # grid1.render("MAX.html")
    option1=grid.dump_options_with_quotes()
    option1=json.loads(option1)
    option={"option":[option1],"query":query}
    return option
示例#7
0
文件: Trend.py 项目: jiangqicd/DT2VIS
def TREND_render(x,y,z,y_up,y_down,max_index,min_index,x_name,y_name,query,answer):
    x=list(map(str,x))
    y=list(map(float,y))
    bar = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="increase_value",
            y_axis=y_up,
            markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(type_='max')]
            ),

        )
        #     .add_yaxis(series_name="increase", yaxis_data=y_up, stack="GDP",markpoint_opts=opts.MarkPointOpts(
        #     data=[opts.MarkPointItem(name=x[max_index], coord=[x[max_index], y[max_index]+y_up[max_index]+z[max_index]], value="Max")]
        # ),)
            .add_yaxis(series_name="decrease_value", y_axis=y_down, stack="GDP",markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(type_='max')]
        ),)
            .set_global_opts(
            datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90),
                           opts.DataZoomOpts(type_="inside")],
            yaxis_opts=opts.AxisOpts(
                name=y_name,
                type_="value",
                axislabel_opts=opts.LabelOpts(formatter="{value}"),
                axistick_opts=opts.AxisTickOpts(is_show=True),
                splitline_opts=opts.SplitLineOpts(is_show=True),
            ),
            xaxis_opts=opts.AxisOpts(name=x_name),
            graphic_opts=[opts.GraphicText(
            graphic_item=opts.GraphicItem(
              left="center",
              top="bottom",

        ),
          graphic_textstyle_opts=opts.GraphicTextStyleOpts(
            # 可以通过jsCode添加js代码,也可以直接用字符串
            text=['\n'+"Q:"+' '+query+'\n'+"\n"+'A:'+' '+answer],
            font="14px Microsoft YaHei",
            graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                fill="#333"
            )
        )
    )]
        )
    )

    line = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name='food',
            yaxis_index=0,
            y_axis=y,
            label_opts=opts.LabelOpts(is_show=True),
            # markpoint_opts=opts.MarkPointOpts(
            #     data=[opts.MarkPointItem(type_='max', value='Max'),opts.MarkPointItem(type_='min',value='Max')],
            # ),
        )

        .set_global_opts(legend_opts=opts.LegendOpts(is_show=False),  )
    )
    # line.overlap(bar).render("TREND.html")
    grid = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG, ))
    grid.add(bar.overlap(line), grid_opts={'left': '20%', 'bottom': '34%'})
    option1 = grid.dump_options_with_quotes()
    option1 = json.loads(option1)
    option = {"option": [option1], "query": query}
    return option
示例#8
0
def find_distribution_render(x,Y,x_name,query,table_path,answer):
    Max=0
    y=[]
    data=[]
    label=[]
    boxplot = Boxplot()
    boxplot.add_xaxis(xaxis_data=label)
    for i in range(len(Y)):
        data.append(Y[i][1])
        label.append(Y[i][0])
        # boxplot.add_yaxis(series_name=Y[i][0],y_axis=boxplot.prepare_data(data))
        for j in Y[i][1]:
            y.append(j)
    boxplot.add_yaxis(series_name="", y_axis=boxplot.prepare_data(data))
    boxplot.set_global_opts(
        yaxis_opts=opts.AxisOpts(name="Distribution",axislabel_opts=opts.LabelOpts(font_size="100%"),name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=40,interval=0,font_size='100%'),name="Category",name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
        graphic_opts=[opts.GraphicText(
            graphic_item=opts.GraphicItem(
                left="center",
                top="bottom",
                z=100,
            ),
            graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                # 可以通过jsCode添加js代码,也可以直接用字符串
                text=['\n' + "Q:" + ' ' + query + '\n'+"\n" + 'A:' + ' ' + answer],
                font="14px Microsoft YaHei",
                graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                    fill="#333"
                )
            )
        )]
    )

    bar=Bar({"theme": ThemeType.MACARONS})
    bar.add_xaxis(xaxis_data=x)
    for i in range(len(Y)):
        max_index, max_number = max(enumerate(Y[i][1]), key=operator.itemgetter(1))
        min_index, min_number = min(enumerate(Y[i][1]), key=operator.itemgetter(1))
        if max_number>Max:
            Max=max_number
        bar.add_yaxis(Y[i][0],label_opts=opts.LabelOpts(is_show=False),y_axis=Y[i][1],markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(coord=[max_index,max_number*1.01],value="MAX",name="最大值",itemstyle_opts=opts.ItemStyleOpts(opacity=0.6)),opts.MarkPointItem(coord=[min_index,min_number*1.05],value="MIN",name="最小值",itemstyle_opts=opts.ItemStyleOpts(opacity=0.6))]
        ),
                      markline_opts=opts.MarkLineOpts(
                          data=[opts.MarkLineItem(type_="average",name="平均值")]
                      ))
    bar.set_global_opts(
        datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90),
                       opts.DataZoomOpts(type_="inside")],
        yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(font_size="100%"),
                                 name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=40, interval=0, font_size='100%'),
                                 name=x_name, name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
        graphic_opts=[opts.GraphicText(
            graphic_item=opts.GraphicItem(
                left="center",
                top="bottom",

            ),
            graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                # 可以通过jsCode添加js代码,也可以直接用字符串
                text=['\n' + "Q:" + ' ' + query + '\n' + "\n"+'A:' + ' ' + answer],
                font="14px Microsoft YaHei",
                graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                    fill="#333"
                )
            )
        )]
    )
    grid = Grid( init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer= globals.RenderType.SVG,))
    grid.add(boxplot,  grid_opts={'left':'20%','bottom':'34%'})
    grid1 = Grid( init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer= globals.RenderType.SVG,))
    grid1.add(bar,grid_opts={'left':'20%','bottom':'34%'})
    option1=grid.dump_options_with_quotes()
    option1=json.loads(option1)
    option2=grid1.dump_options_with_quotes()
    option2=json.loads(option2)
    option={"option":[option1,option2],"query":query}
    return option
示例#9
0
def find_aggregation_render(x, y, flag, query, table_path, answer, y_name):
    colorList = ['#f36c6c', '#e6cf4e', '#20d180', '#0093ff']
    x_sum = ["Sum"]
    Sum = []
    Sum.append(sum(y))
    mean = np.mean(y)
    y1 = []
    y2 = []
    for i in range(len(y)):
        if y[i] >= mean:
            y1.append(round(mean, 2))
            y2.append(
                opts.BarItem(name=x[i],
                             value=round(y[i] - mean, 2),
                             label_opts=opts.LabelOpts(formatter="+{c}"),
                             itemstyle_opts=opts.ItemStyleOpts(color="red")))
        else:
            y1.append(round(y[i], 2))
            y2.append(
                opts.BarItem(name=x[i],
                             value=round(mean - y[i], 2),
                             label_opts=opts.LabelOpts(formatter="-{c}"),
                             itemstyle_opts=opts.ItemStyleOpts(color="green",
                                                               opacity=0.3)))
    if flag == "mean":
        bar = Bar()
        bar.add_xaxis(x)
        bar.add_yaxis(
            '',
            y_axis=y1,
            stack='stack1',
            label_opts=opts.LabelOpts(is_show=False),
            color="white",
            markline_opts=opts.MarkLineOpts(
                data=[opts.MarkLineItem(name="mean:", y=round(mean, 2))],
                label_opts=opts.LabelOpts(formatter="Mean:{c}", color="black"),
                linestyle_opts=opts.LineStyleOpts(color="gray")),
        )
        bar.add_yaxis('', y_axis=y2, stack='stack1')
        bar.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(rotate=40, font_size='100%'),
                name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
            yaxis_opts=opts.AxisOpts(
                min_=int(min(y) - (max(y) - min(y)) / 10),
                name=y_name,
                axislabel_opts=opts.LabelOpts(font_size="100%"),
                name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + "\n" + 'A:' +
                            ' ' + answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        bar.render("aggregation.html")
        grid = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid.add(bar, grid_opts={'left': '15%', 'bottom': '34%'})
        grid1 = Grid()
        grid1.add(bar, grid_opts={'left': '15%', 'bottom': '34%'})
        grid1.render("mean.html")
        option1 = grid.dump_options_with_quotes()
        option1 = json.loads(option1)
        option = {"option": [option1], "query": query}
        return option
    elif flag == "sum":
        bar = Bar()
        bar.add_xaxis(x_sum)
        bar.add_yaxis('',
                      Sum,
                      label_opts=opts.LabelOpts(position="inside",
                                                formatter="Sum:{c}"),
                      color=colorList[0])
        for i in range(len(y)):
            Y = []
            Y.append(y[i])
            r = str(x[i])
            bar.add_yaxis('',
                          Y,
                          stack='stack1',
                          label_opts=opts.LabelOpts(position="inside",
                                                    formatter=r + ":{c}"),
                          tooltip_opts=opts.TooltipOpts(is_show=False))
        bar.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10,
                                  range_end=90,
                                  orient="vertical"),
                opts.DataZoomOpts(type_="inside")
            ],
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        grid = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid.add(bar, grid_opts={'left': '15%', 'bottom': '34%'})
        option1 = grid.dump_options_with_quotes()
        option1 = json.loads(option1)
        option = {"option": [option1], "query": query}
        return option
示例#10
0
def find_correlation_render(attributes, data, pearsonr, query, table_path,
                            answer):
    dimensions = len(attributes)
    if dimensions == 2:
        data[0] = list(map(str, data[0]))
        data[1] = list(map(float, data[0]))
        l1_1 = Scatter()
        l1_1.add_xaxis(data[0])
        l1_1.add_yaxis("", data[1])
        l1_1.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(name=attributes[0]),
            yaxis_opts=opts.AxisOpts(name=attributes[1]),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        grid = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid.add(l1_1, grid_opts={'left': '15%', 'bottom': '34%'})
        option1 = grid.dump_options_with_quotes()
        option1 = json.loads(option1)
        option = {"option": [option1], "query": query}
        return option
    elif dimensions == 3:
        l1_1 = Scatter()
        data[0] = list(map(str, data[0]))
        data[1] = list(map(float, data[1]))
        data[2] = list(map(float, data[2]))
        l1_1.add_xaxis(data[0])
        l1_1.add_yaxis("", data[1])
        l1_1.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(
                name=attributes[0],
                axislabel_opts=opts.LabelOpts(rotate=50, interval=0),
                grid_index=0,
            ),
            yaxis_opts=opts.AxisOpts(
                name=attributes[1],
                grid_index=0,
            ),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        l1_2 = Scatter()
        l1_2.add_xaxis(data[0])
        l1_2.add_yaxis("", data[2])
        l1_2.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(
                name=attributes[0],
                axislabel_opts=opts.LabelOpts(rotate=50, interval=0),
                grid_index=1,
            ),
            yaxis_opts=opts.AxisOpts(name=attributes[2], grid_index=1),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                        z=100,
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        data[1] = list(map(str, data[1]))
        l2_1 = Scatter()
        l2_1.add_xaxis(data[1])
        l2_1.add_yaxis("", data[2])
        l2_1.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(name=attributes[0],
                                     axislabel_opts=opts.LabelOpts(rotate=50,
                                                                   interval=0),
                                     grid_index=2),
            yaxis_opts=opts.AxisOpts(name=attributes[1], grid_index=2),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        grid = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid.add(
            chart=l1_1,
            grid_opts=opts.GridOpts(pos_right="57%",
                                    pos_bottom="20%",
                                    pos_top="40%"),
            grid_index=0,
        )
        grid.add(
            chart=l1_2,
            grid_opts=opts.GridOpts(pos_left="57%",
                                    pos_bottom="20%",
                                    pos_top="40%"),
            grid_index=1,
        )
        grid.add(
            chart=l2_1,
            grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="60%"),
            grid_index=2,
        )
        option1 = grid.dump_options_with_quotes()
        option1 = json.loads(option1)
        option = {"option": [option1], "query": query}
        return option
    elif dimensions == 4:
        data[0] = list(map(str, data[0]))
        data[1] = list(map(float, data[1]))
        data[2] = list(map(float, data[2]))
        data[3] = list(map(float, data[3]))
        l1_1 = Scatter()
        l1_1.add_xaxis(data[0])
        l1_1.add_yaxis("", data[1])
        l1_1.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(
                name=attributes[0],
                axislabel_opts=opts.LabelOpts(rotate=50, interval=0),
                grid_index=0,
            ),
            yaxis_opts=opts.AxisOpts(
                name=attributes[1],
                grid_index=0,
            ),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        l1_2 = Scatter()
        l1_2.add_xaxis(data[0])
        l1_2.add_yaxis("", data[2])
        l1_2.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(
                name=attributes[0],
                axislabel_opts=opts.LabelOpts(rotate=50, interval=0),
                grid_index=1,
            ),
            yaxis_opts=opts.AxisOpts(name=attributes[2], grid_index=1),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        l2_1 = Scatter()
        l2_1.add_xaxis(data[0])
        l2_1.add_yaxis("", data[3])
        l2_1.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(name=attributes[0],
                                     axislabel_opts=opts.LabelOpts(rotate=50,
                                                                   interval=0),
                                     grid_index=2),
            yaxis_opts=opts.AxisOpts(name=attributes[3], grid_index=2),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        data[1] = list(map(str, data[1]))
        l2_2 = Scatter()
        l2_2.add_xaxis(data[1])
        l2_2.add_yaxis("", data[2])
        l2_2.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(name=attributes[1],
                                     axislabel_opts=opts.LabelOpts(rotate=50,
                                                                   interval=0),
                                     grid_index=3),
            yaxis_opts=opts.AxisOpts(name=attributes[2], grid_index=3),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        grid = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid.add(
            chart=l1_1,
            grid_opts=opts.GridOpts(pos_right="57%",
                                    pos_bottom="20%",
                                    pos_top="40%"),
            grid_index=0,
        )
        grid.add(
            chart=l1_2,
            grid_opts=opts.GridOpts(pos_left="57%",
                                    pos_bottom="20%",
                                    pos_top="40%"),
            grid_index=1,
        )
        grid.add(
            chart=l2_1,
            grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="60%"),
            grid_index=2,
        )
        grid.add(
            chart=l2_2,
            grid_opts=opts.GridOpts(pos_left="57%", pos_bottom="60%"),
            grid_index=3,
        )
        r1_1 = Scatter()
        r1_1.add_xaxis(data[1])
        r1_1.add_yaxis("", data[3])
        r1_1.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(name=attributes[1],
                                     axislabel_opts=opts.LabelOpts(rotate=50,
                                                                   interval=0),
                                     grid_index=0),
            yaxis_opts=opts.AxisOpts(name=attributes[3], grid_index=0),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        data[2] = list(map(str, data[2]))
        r1_2 = Scatter()
        r1_2.add_xaxis(data[2])
        r1_2.add_yaxis("", data[3])
        r1_2.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(name=attributes[2],
                                     axislabel_opts=opts.LabelOpts(rotate=50,
                                                                   interval=0),
                                     grid_index=1),
            yaxis_opts=opts.AxisOpts(name=attributes[3], grid_index=1),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' +
                            answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        grid1 = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid1.add(
            chart=r1_1,
            grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="30%"),
            grid_index=0,
        )
        grid1.add(
            chart=r1_2,
            grid_opts=opts.GridOpts(pos_left="57%", pos_bottom="30%"),
            grid_index=1,
        )
        option1 = grid.dump_options_with_quotes()
        option1 = json.loads(option1)
        option2 = grid1.dump_options_with_quotes()
        option2 = json.loads(option2)
        option = {"option": [option1, option2], "query": query}
        return option
示例#11
0
def find_value_render(query_filter, x_label, x, result, Data, query,
                      table_path, answer):

    colorList = ['#f36c6c', '#e6cf4e', '#20d180', '#0093ff']
    # x = ['GDP', 'Industry', 'Architecture', 'Service']
    # y = [990865, 317109, 70904, 534233]
    # x1 = ["周一"]
    # y1 = [11]

    Y = []
    # for i in range(len(y)):
    #     if i==0:
    #         Y.append(
    #             opts.BarItem(
    #                 name=x[i],
    #                 value=round(y[i], 2),
    #                 label_opts=opts.LabelOpts(position="insideTop"),
    #                 itemstyle_opts={
    #                     "normal": {
    #                         "color": colorList[0],
    #                         "barBorderRadius": [30, 30, 30, 30],
    #                     }
    #                 }
    #         ))
    #     else:
    #         Y.append(
    #             opts.BarItem(
    #                 name=x[i],
    #                 value=round(y[i], 2),
    #                 label_opts=opts.LabelOpts(position="insideTop"),
    #                 itemstyle_opts={
    #                     "normal": {
    #                         "color": "blue",
    #                         "barBorderRadius": [30, 30, 30, 30],
    #                     }
    #                 }
    #             ))
    bar1 = Bar()
    bar1.add_xaxis(x)
    bar1.add_yaxis(result[0][0],
                   y_axis=result[0][1],
                   label_opts=opts.LabelOpts(position="insideTop"))
    bar1.set_global_opts(
        yaxis_opts=opts.AxisOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(
            axisline_opts=opts.AxisLineOpts(is_show=False),
            axispointer_opts=opts.AxisPointerOpts(is_show=False),
            axistick_opts=opts.AxisTickOpts(is_show=False)),
        title_opts=opts.TitleOpts(subtitle="When the search condition is " +
                                  query_filter,
                                  pos_left='center'),
        graphic_opts=[
            opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",
                    z=100,
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=[
                        '\n' + "Q:" + ' ' + query + '\n' + "\n" + 'A:' + ' ' +
                        answer
                    ],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333")))
        ])
    bar2 = Bar()
    bar2.add_xaxis(x)
    for i in range(len(result)):
        bar2.add_yaxis(result[i][0], y_axis=result[i][1])
    bar2.set_global_opts(
        yaxis_opts=opts.AxisOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(
            axisline_opts=opts.AxisLineOpts(is_show=False),
            axispointer_opts=opts.AxisPointerOpts(is_show=False),
            axistick_opts=opts.AxisTickOpts(is_show=False)),
        graphic_opts=[
            opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",
                    z=100,
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=[
                        '\n' + "\n" + "Q:" + ' ' + query + '\n' + "\n" + 'A:' +
                        ' ' + answer
                    ],
                    font="16px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333")))
        ])

    Label = []
    data = []
    for i in range(len(Data)):
        Label.append(str(Data[i][0]))
        data.append(Data[i][1])
    data = list(map(list, zip(*data)))
    parallel = Parallel()
    parallel_axis = []
    for i in range(len(Label)):
        parallel_axis.append({"dim": i, "name": Label[i]})
    parallel.add_schema(schema=parallel_axis)
    parallel.add("", data, is_smooth=True)
    parallel.set_global_opts(graphic_opts=[
        opts.GraphicText(
            graphic_item=opts.GraphicItem(
                left="center",
                top="bottom",
                z=100,
            ),
            graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                # 可以通过jsCode添加js代码,也可以直接用字符串
                text=['\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer],
                font="14px Microsoft YaHei",
                graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                    fill="#333")))
    ])
    grid0 = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG,
    ))
    grid0.add(bar1, grid_opts={'left': '20%', 'bottom': '34%'})
    option0 = grid0.dump_options_with_quotes()
    option0 = json.loads(option0)
    grid = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG,
    ))
    grid.add(bar2, grid_opts={'left': '15%', 'bottom': '50%'})
    option1 = grid.dump_options_with_quotes()
    option1 = json.loads(option1)
    grid1 = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG,
    ))
    grid1.add(parallel, grid_opts={'left': '30%', 'bottom': '34%'})
    option2 = grid1.dump_options_with_quotes()
    option2 = json.loads(option2)

    option = {"option": [option1, option2], "query": query}
    return option
示例#12
0
def get_bar_data(request):
    x_field = request.GET.get('x_choice')
    y_field = request.GET.get('y_choice')
    print(request.GET.get('begin_date'))
    start_date = request.GET.get('begin_date').split('-')
    end_date = request.GET.get('end_date').split('-')
    start = datetime.date(int(start_date[0]), int(start_date[1]),
                          int(start_date[2]))
    end = datetime.date(int(end_date[0]), int(end_date[1]), int(end_date[2]))
    y_lists = []
    x_list = []
    b = Bar()
    if x_field == 'street' and y_field == 'property':
        event_counts = Street.objects.all().values(
            'name', 'number').order_by('-number')
        for property in properties:
            new_list = [property.name]
            for street_node in event_counts:
                new_len = 0
                street = Street.objects.get(name=street_node['name'])
                for community in Community.objects.filter(street=street):
                    new_len += len(
                        Event.objects.filter(community=community,
                                             property=property,
                                             create_time__range=(start, end)))
                new_list.append(new_len)
                # print(new_list)
            y_lists.append(new_list)
        for street_node in event_counts:
            x_list.append(street_node['name'])

    elif x_field == 'community' and y_field == 'property':
        event_counts = Community.objects.all().values(
            'name', 'number').order_by('-number')
        for property in properties:
            new_list = [property.name]
            for street_node in event_counts:
                community = Community.objects.get(name=street_node['name'])
                new_len = len(
                    Event.objects.filter(
                        Q(create_time__range=(start, end))
                        & Q(community=community) & Q(property=property)))
                new_list.append(new_len)
                # print(new_list)
            y_lists.append(new_list)
        for community_node in event_counts:
            x_list.append(community_node['name'])

    elif x_field == 'dispose_unit' and y_field == 'property':
        event_counts = DisposeUnit.objects.all().values(
            'name', 'number').order_by('-number')
        for property in properties:
            new_list = [property.name]
            limit = 0
            for dispose_unit_node in event_counts:
                dispose_unit = DisposeUnit.objects.get(
                    name=dispose_unit_node['name'])
                if limit < 30:
                    new_len = len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(property=property)))
                    new_list.append(new_len)
                    new_len = 0
                else:
                    new_len += len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(property=property)))
                limit += 1
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for dispose_unit_node in event_counts:
            if limit >= 30:
                break
            x_list.append(dispose_unit_node['name'])
            limit += 1
        x_list.append("其他")

    elif x_field == 'main_type' and y_field == 'property':
        event_counts = MainType.objects.all().values(
            'name', 'number').order_by('-number')
        for property in properties:
            new_list = [property.name]
            limit = 0
            new_len = 0
            for main_type_node in event_counts:
                main_type = MainType.objects.get(name=main_type_node['name'])
                for sub_type in SubType.objects.filter(main_type=main_type):
                    new_len += len(
                        Event.objects.filter(sub_type=sub_type,
                                             property=property,
                                             create_time__range=(start, end)))
                if limit < 30:
                    limit += 1
                    new_list.append(new_len)
                    new_len = 0
                # print(new_list)
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for main_type_node in event_counts:
            if limit >= 30:
                break
            x_list.append(main_type_node['name'])
            limit += 1
        x_list.append('其他')

    elif x_field == 'sub_type' and y_field == 'property':
        event_counts = SubType.objects.all().values(
            'name', 'number').order_by('-number')
        for property in properties:
            new_list = [property.name]
            limit = 0
            new_len = 0
            for sub_type_node in event_counts:
                sub_type = SubType.objects.get(name=sub_type_node['name'])
                new_len += len(
                    Event.objects.filter(
                        Q(create_time__range=(start, end))
                        & Q(property=property) & Q(sub_type=sub_type)))
                if limit < 60:
                    limit += 1
                    new_list.append(new_len)
                    new_len = 0
                # print(new_list)
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for sub_type_node in event_counts:
            if limit >= 60:
                break
            x_list.append(sub_type_node['name'])
            limit += 1
        x_list.append('其他')

    elif x_field == 'street' and y_field == 'achieve':
        event_counts = Street.objects.all().values(
            'name', 'number').order_by('-number')
        for achieve in achieves:
            new_list = [achieve.name]
            for street_node in event_counts:
                new_len = 0
                street = Street.objects.get(name=street_node['name'])
                for community in Community.objects.filter(street=street):
                    new_len += len(
                        Event.objects.filter(community=community,
                                             achieve=achieve,
                                             create_time__range=(start, end)))
                new_list.append(new_len)
                # print(new_list)
            y_lists.append(new_list)
        for street_node in event_counts:
            x_list.append(street_node['name'])

    elif x_field == 'community' and y_field == 'achieve':
        event_counts = Community.objects.all().values(
            'name', 'number').order_by('-number')
        for achieve in achieves:
            new_list = [achieve.name]
            for street_node in event_counts:
                community = Community.objects.get(name=street_node['name'])
                new_len = len(
                    Event.objects.filter(
                        Q(create_time__range=(start, end))
                        & Q(community=community) & Q(achieve=achieve)))
                new_list.append(new_len)
                # print(new_list)
            y_lists.append(new_list)
        for community_node in event_counts:
            x_list.append(community_node['name'])

    elif x_field == 'dispose_unit' and y_field == 'achieve':
        event_counts = DisposeUnit.objects.all().values(
            'name', 'number').order_by('-number')
        for achieve in achieves:
            new_list = [achieve.name]
            limit = 0
            for dispose_unit_node in event_counts:
                dispose_unit = DisposeUnit.objects.get(
                    name=dispose_unit_node['name'])
                if limit < 30:
                    new_len = len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(achieve=achieve)))
                    new_list.append(new_len)
                    new_len = 0
                else:
                    new_len += len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(achieve=achieve)))
                limit += 1
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for dispose_unit_node in event_counts:
            if limit >= 30:
                break
            x_list.append(dispose_unit_node['name'])
            limit += 1
        x_list.append("其他")

    elif x_field == 'main_type' and y_field == 'achieve':
        event_counts = MainType.objects.all().values(
            'name', 'number').order_by('-number')
        for achieve in achieves:
            new_list = [achieve.name]
            limit = 0
            new_len = 0
            for main_type_node in event_counts:
                main_type = MainType.objects.get(name=main_type_node['name'])
                for sub_type in SubType.objects.filter(main_type=main_type):
                    new_len += len(
                        Event.objects.filter(sub_type=sub_type,
                                             achieve=achieve,
                                             create_time__range=(start, end)))
                if limit < 30:
                    limit += 1
                    new_list.append(new_len)
                    new_len = 0
                # print(new_list)
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for main_type_node in event_counts:
            if limit >= 30:
                break
            x_list.append(main_type_node['name'])
            limit += 1
        x_list.append('其他')

    elif x_field == 'sub_type' and y_field == 'achieve':
        event_counts = SubType.objects.all().values(
            'name', 'number').order_by('-number')
        for achieve in achieves:
            new_list = [achieve.name]
            limit = 0
            new_len = 0
            for sub_type_node in event_counts:
                sub_type = SubType.objects.get(name=sub_type_node['name'])
                new_len += len(
                    Event.objects.filter(
                        Q(create_time__range=(start, end)) & Q(achieve=achieve)
                        & Q(sub_type=sub_type)))
                if limit < 60:
                    limit += 1
                    new_list.append(new_len)
                    new_len = 0
                # print(new_list)
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for sub_type_node in event_counts:
            if limit >= 60:
                break
            x_list.append(sub_type_node['name'])
            limit += 1
        x_list.append('其他')

    b.add_xaxis(x_list)
    for y_list in y_lists:
        b.add_yaxis(y_list[0], y_list[1:], stack="stack1", category_gap="60%")
    b.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) \
        .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        # title_opts=opts.TitleOpts(title="处理事件最多的部门"),
        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], )
    c = (b)

    grid = Grid()

    grid.add(c, grid_opts=opts.GridOpts(pos_bottom="20%"))

    c = grid.dump_options_with_quotes()
    return HttpResponse(c, content_type='application/json')
示例#13
0
def temp_line() -> Grid:
    """
    数据处理折线图绘制
    :return:
    """
    (time_list_res, value_list_res) = data_reader(1)
    x_data = time_list_res
    y_data = value_list_res
    # print(x_data)
    # print(y_data)
    # y_data1 = value_list1

    c = (
        Line(init_opts=opts.InitOpts()).set_global_opts(
            # title_opts=opts.TitleOpts(title="实时温度", title_textstyle_opts=opts.TextStyleOpts(color="#36404e"),
            #                           pos_top=0, pos_left=8,),
            tooltip_opts=opts.TooltipOpts(is_show=True,
                                          trigger="axis",
                                          axis_pointer_type="cross"),
            legend_opts=opts.LegendOpts(
                is_show=True,
                selected_mode=False,
                item_height=15,
                pos_top=0,
                textstyle_opts=opts.TextStyleOpts(color="#74b9f0")),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                axistick_opts=opts.AxisTickOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(
                        width=3,
                        color="#74b9f0",
                    )),
            ),
            # datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=100)],
            toolbox_opts=opts.ToolboxOpts(is_show=False),
            yaxis_opts=opts.AxisOpts(
                type_="value",
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=True),
                name="℃",
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(width=3,
                                                      color="#74b9f0"))),
        ).add_xaxis(xaxis_data=x_data).add_yaxis(
            series_name="温度传感器TS01",
            y_axis=y_data,
            symbol="emptyCircle",
            is_symbol_show=False,
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=False),
            linestyle_opts=opts.LineStyleOpts(width=3, color="#fce3a8"),
            # markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(y=15, name="温度上限")],
            #                                 linestyle_opts=opts.LineStyleOpts(color="#f9a9af", type_="dashed")),
            # color="orange",
            areastyle_opts=opts.AreaStyleOpts(opacity=0.3, color="#fce3a8"),
        )
        #     .add_yaxis(
        #     series_name="温度传感器TS02",
        #     y_axis=y_data1,
        #     symbol="emptyCircle",
        #     is_symbol_show=True,
        #     is_smooth=True,
        #     label_opts=opts.LabelOpts(is_show=False),
        #     linestyle_opts=opts.LineStyleOpts(width=3, color="blue"),
        #     # color="pink",
        #     areastyle_opts=opts.AreaStyleOpts(opacity=0.1, color="blue"),
        # )
        .set_colors(["#fce3a8"])

        # .dump_options_with_quotes()
    )
    # print("Line done >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
    grid = Grid()
    grid.add(c,
             grid_opts=opts.GridOpts(pos_left='3%',
                                     pos_right='3%',
                                     pos_bottom='6%'))
    ch = grid.dump_options_with_quotes()
    return ch
示例#14
0
def find_difference_render(data,X,query,table_path,answer):
    colorList = ['#f36c6c', '#e6cf4e', '#20d180', '#0093ff',"#ca8622","#726930",]
    if len(data)==2:
        bar1=Bar()
        bar1.add_xaxis(X[1])
        bar1.add_yaxis("",data[0][1],label_opts=opts.LabelOpts(position="insideLeft"))
        bar1.reversal_axis()
        bar1.set_global_opts(
            datazoom_opts=[opts.DataZoomOpts(range_start=10,range_end=90,orient="vertical"), opts.DataZoomOpts(type_="inside")],
            xaxis_opts=opts.AxisOpts(
                position="top"
            ),
            yaxis_opts=opts.AxisOpts(
                is_inverse=True
            ),
            graphic_opts=[opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",

                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=['\n' + "Q:" + ' ' + query + '\n' +"\n"+ 'A:' + ' ' + answer],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333"
                    )
                )
            )]
        )
        bar2=Bar()
        bar2.add_xaxis(X[1])
        bar2.add_yaxis("",data[1][1],label_opts=opts.LabelOpts(position="insideRight"))
        bar2.reversal_axis()
        bar2.set_global_opts(
            datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90, orient="vertical"),
                           opts.DataZoomOpts(type_="inside")],
            xaxis_opts=opts.AxisOpts(
                position="top",
                is_inverse=True
            ),
            yaxis_opts=opts.AxisOpts(
                is_inverse=True,
                position="right"
            ),
            graphic_opts=[opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",

                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=['\n' + "Q:" + ' ' + query + '\n' +"\n"+ 'A:' + ' ' + answer],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333"
                    )
                )
            )]
        )
        grid1 = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG, ) )
        grid1.add(bar1, grid_opts=opts.GridOpts(
            pos_left="60%",pos_bottom="30%"
        ))
        grid1.add(bar2, grid_opts=opts.GridOpts(
            pos_right="60%",pos_bottom="30%"
        ))
        grid1.render("a.html")
        option1 = grid1.dump_options_with_quotes()
        option1 = json.loads(option1)
        lable=[]
        for i in range(len(X[1])):
            lable.append(opts.RadarIndicatorItem(name=X[1][i]))
        # r_data=[]
        # for record in data:
        #     r_data.append(record[1])
        radar=Radar(init_opts=opts.InitOpts(bg_color="#CCCCCC"))
        radar.add_schema(
            schema=lable,
            splitarea_opt=opts.SplitAreaOpts(
               is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
             ),
            textstyle_opts=opts.TextStyleOpts(color="#fff"),
        )
        for i in range(len(data)):
            radar.add(
                series_name=data[i][0],
                label_opts=opts.LabelOpts(is_show=False),
                data=[data[i][1]],
                linestyle_opts=opts.LineStyleOpts(
                    color=colorList[i],
                    width=3

                )
            )
        radar.set_global_opts(
            graphic_opts=[opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",
                    z=100,
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=['\n' + "Q:" + ' ' + query + '\n'+"\n" + 'A:' + ' ' + answer],
                    font="10px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333"
                    )
                )
            )]
        )
        grid2 = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG, ))
        grid2.add(radar, grid_opts={'left': '20%', 'bottom': '40%',"top":"1%"})
        option2 = grid2.dump_options_with_quotes()
        option2 = json.loads(option2)
        bar3=Bar()
        bar3.add_xaxis(X[1])
        for i in range(len(data)):
            bar3.add_yaxis(data[i][0],data[i][1],label_opts=opts.LabelOpts(is_show=False))
        bar3.set_global_opts(
            datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90),
                           opts.DataZoomOpts(type_="inside")],
            xaxis_opts=opts.AxisOpts(
                name=X[0]
            ),
            graphic_opts=[opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=['\n' + "Q:" + ' ' + query + '\n' +"\n"+ 'A:' + ' ' + answer],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333"
                    )
                )
            )]
        )
        grid3 = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG, ))
        grid3.add(bar3, grid_opts={'left': '20%', 'bottom': '30%'})
        option3 = grid3.dump_options_with_quotes()
        option3 = json.loads(option3)
        option = {"option": [option1,option2,option3], "query": query}
        return option

    elif len(data)>2 and len(data[0][1])>1:
        lable=[]
        for i in range(len(X[1])):
            lable.append(opts.RadarIndicatorItem(name=X[1][i]))
        # r_data=[]
        # for record in data:
        #     r_data.append(record[1])
        radar=Radar(init_opts=opts.InitOpts(bg_color="#CCCCCC"))
        radar.add_schema(
            schema=lable,
            splitarea_opt=opts.SplitAreaOpts(
               is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
             ),
            textstyle_opts=opts.TextStyleOpts(color="#fff"),
        )
        radar.set_global_opts(
            graphic_opts=[opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",

                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=['\n' + "Q:" + ' ' + query + '\n' +"\n"+ 'A:' + ' ' + answer],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333"
                    )
                )
            )]
        )
        for i in range(len(data)):
            radar.add(
                series_name=data[i][0],
                label_opts=opts.LabelOpts(is_show=False),
                data=[data[i][1]],
                linestyle_opts=opts.LineStyleOpts(
                    color=colorList[i],
                    width=3

                )
            )

        grid1 = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG, ))
        grid1.add(radar, grid_opts={'left': '20%', 'bottom': '30%'})
        option1 = grid1.dump_options_with_quotes()
        option1 = json.loads(option1)
        bar = Bar()
        bar.add_xaxis(X[1])
        for i in range(len(data)):
          bar.add_yaxis(data[i][0], data[i][1],label_opts=opts.LabelOpts(is_show=False))
        bar.set_global_opts(
            datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90),
                           opts.DataZoomOpts(type_="inside")],
          xaxis_opts=opts.AxisOpts(
            name=X[0]
          ),
            graphic_opts=[opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",

                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=['\n' + "Q:" + ' ' + query + '\n' +"\n"+ 'A:' + ' ' + answer],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333"
                    )
                )
            )]
        )
        grid2 = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG, ))
        grid2.add(bar, grid_opts={'left': '20%', 'bottom': '30%'})
        option2 = grid2.dump_options_with_quotes()
        option2 = json.loads(option2)
        option = {"option": [option1,option2], "query": query}
        return option
    elif len(data)>2 and len(data[0][1])==1:
        bar = Bar()
        bar.add_xaxis(X[1])
        for i in range(len(data)):
          bar.add_yaxis(data[i][0], data[i][1],label_opts=opts.LabelOpts(is_show=False))
        bar.set_global_opts(
            datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90),
                           opts.DataZoomOpts(type_="inside")],
          xaxis_opts=opts.AxisOpts(
            name=X[0]
          ),
            graphic_opts=[opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=['\n' + "Q:" + ' ' + query + '\n' +"\n"+ 'A:' + ' ' + answer],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333"
                    )
                )
            )]
        )
        grid2 = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG, ))
        grid2.add(bar, grid_opts={'left': '20%', 'bottom': '34%'})
        option2 = grid2.dump_options_with_quotes()
        option2 = json.loads(option2)
        option = {"option": [option2], "query": query}
        return option