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