def bookreport(): bar = Bar() bar.add_xaxis(['Last Day', 'Last 7 days', 'Last 30 days']) conn = connect_to_database() borrowedBookNums = [] returnedNums = [] days = [1, 7, 30] for day in days: sql = "select count(*) from BookBorrowed where (CURRENT_DATE - BorrowedDate) <= %s" % day cursor = conn.cursor() try: cursor.execute(sql) except Exception as e: print(e) conn.commit() res = cursor.fetchone() borrowedBookNums.append(res[0]) sql = "select count(*) from BookBorrowed where (CURRENT_DATE - ReturnedDate) <= %s" % day cursor = conn.cursor() try: cursor.execute(sql) except Exception as e: print(e) conn.commit() res = cursor.fetchone() returnedNums.append(res[0]) bar.add_yaxis('Borrowed Book', borrowedBookNums) bar.add_yaxis('Returned Book', returnedNums) return render_template('report.html', myechart=bar.render_embed())
def show(x: list, y: list, title: str = "键盘键入统计"): bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) bar.add_xaxis(x) bar.add_yaxis("", y, category_gap="60%") bar.set_series_opts( itemstyle_opts={ "normal": { "color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(0, 244, 255, 1)' }, { offset: 1, color: 'rgba(250, 177, 160, 1)' }], false)"""), "barBorderRadius": [30, 30, 30, 30], "shadowColor": "rgb(0, 160, 221)", } }) bar.set_global_opts( title_opts=opts.TitleOpts(title=title), datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], ) bar.load_javascript() bar.render_notebook() return Markup(bar.render_embed())
def score_dis(request): """获取教师所教学生的成绩分布""" nid = 't1' # 获取教师所授课程编号 course_number = sqlheper.get_list('select course_number from course where teacher_number=%s', [nid, ]) cn = [] for i in course_number: for key, value in i.items(): cn.append(value) # 在学生选课表中查找选择该课程的学生的成绩 student_mark = sqlheper.get_list('select mark from stu_c where course_number=%s', [cn, ]) mark_a, mark_b, mark_c, mark_d, mark_f = [], [], [], [], [] for i in student_mark: for key, values in i.items(): values = int(values) if values >= 90: mark_a.append(values) elif 80 <= values < 90: mark_b.append(values) elif 70 <= values < 80: mark_c.append(values) elif 60 <= values < 70: mark_d.append(values) else: mark_f.append(values) mark = [len(mark_a), len(mark_b), len(mark_c), len(mark_d), len(mark_d)] bar = Bar(init_opts=opts.InitOpts(width='800px', height='500px', theme=ThemeType.LIGHT)) bar.add_xaxis(['优秀', '良好', '中等', '及格', '不及格']) bar.add_yaxis('学生成绩', mark) return render(request, 'student_mark_ana.html', {'bar': bar.render_embed()})
def generate_top_bar_html(rows, title): xx1 = [] yy1 = [] for row in rows: xx1.append(row[0].replace('转债', '')) yy1.append(row[1]) bar = Bar(init_opts=opts.InitOpts( height='700px', width='1424px', theme=ThemeType.SHINE)) # 底部x轴 bar.add_xaxis(xx1) bar.add_yaxis( '价格(元)', yy1, bar_width=25, category_gap='1%', gap='1%', label_opts=opts.LabelOpts(position="top", ), ) bar.set_series_opts(itemstyle_opts=opts.ItemStyleOpts( color=JsCode("function(x){return x.data>0?'#c23531':'#1d953f'}"))) bar.set_global_opts( title_opts=opts.TitleOpts( title="=========" + title + "=========", pos_left='center', pos_top='-1px', ), tooltip_opts=opts.TooltipOpts(is_show=False), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts( # data=None, # type_='category', # name_gap=0, # name_rotate=90, axislabel_opts=opts.LabelOpts(rotate=-60, ), is_scale=True, name_location='middle', splitline_opts=opts.SplitLineOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_on_zero=True, # symbol=['none', 'arrow'] )), yaxis_opts=opts.AxisOpts( type_='value', name='价格(元)', # name_rotate=90, name_gap=40, name_location='middle', # min_=0, is_scale=True, # axislabel_opts=opts.LabelOpts(formatter='{value}%'), splitline_opts=opts.SplitLineOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_on_zero=False, # symbol=['none', 'arrow'] )), ) bar_html = bar.render_embed('template.html', html_utils.env) return bar_html
def bookreport(): bar = Bar() bar.add_xaxis([ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ]) bar.add_yaxis('Borrowed Book', [12, 15, 20, 10, 5, 8, 10]) bar.add_yaxis('Returned Book', [10, 18, 10, 7, 6, 6, 4]) return render_template('report.html', myechart=bar.render_embed())
def bar1() -> Bar: bar=Bar() # instantiation bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) bar.add_yaxis("商家B", [15, 25, 16, 55, 48, 8]) bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) bar.set_global_opts( title_opts=opts.TitleOpts( title="柱状图基本事例", subtitle="我是副标题")) return Markup(bar.render_embed())
def BarCharts(datas): bar = Bar(init_opts=opts.InitOpts(width="100%")) bar.add_xaxis(datas[1]) for data in datas[2]: bar.add_yaxis(data[0], data[1]) # .add_yaxis("商家B", [20, 10, 40, 30, 40, 50]) bar.set_global_opts( xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), title_opts=opts.TitleOpts(title=datas[0]), ) return bar.render_embed()
def demo(request): import store bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) #x = store.models.Product.objects.get(sortno=1) #y = store.models.Product.objects.get(sortno=2) bar.add_xaxis(["純色腮紅", "三色修容餅", "柔焦無瑕粉餅", "經典緞光唇膏", "精萃水亮唇膏"]) bar.add_yaxis("康是美", [100, 50, 45, 20, 50]) bar.add_yaxis("寶雅", [80, 40, 10, 100, 70]) bar.add_yaxis("屈臣氏", [20, 30, 45, 130, 80]) bar.set_global_opts(title_opts=opts.TitleOpts(title="品類需求量", subtitle="個")) return HttpResponse(bar.render_embed())
def trendresult(): word = request.form.get("word") begin = request.form.get("begin") end = request.form.get("end") if begin == "" and end == "": date_list = mp.Get_time_14() # 当前时间回溯14天 else: date_list = mp.Get_time_every(begin, end) # 当前时间段 [date_list_new, date_every_sentiment] = mp.get_sentiment(date_list, word) [date_list_new, date_every_num] = mp.draw_bar(date_list, word) [date_l, true_l, predict_l] = arima.arima_model(date_list_new, date_every_sentiment) bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS)) dictd = {} for i in range(len(date_every_sentiment)): if date_every_sentiment[i] < 0.2: dictd[date_list_new[i]] = "高度预警" elif date_every_sentiment[i] < 0.3: dictd[date_list_new[i]] = "中度预警" elif date_every_sentiment[i] < 0.4: dictd[date_list_new[i]] = "低度预警" # 统计趋势 c = (Line(init_opts=opts.InitOpts( theme=ThemeType.WESTEROS)).add_xaxis(date_l).add_yaxis( '实际值', true_l, is_connect_nones=True).add_yaxis( '预测值', predict_l, is_connect_nones=True).set_series_opts( label_opts=opts.LabelOpts(is_show=False))) # 统计数量 bar.add_xaxis(date_list_new) bar.add_yaxis("涉及的词条数量", date_every_num) # 预警 return render_template('trendresult.html', myechart1=c.render_embed(), myechart2=bar.render_embed(), begin=date_list[0], end=date_list[-1], data=dictd, length=len(dictd))
def bar(): cursor = connection.cursor() cursor.execute("""SELECT DATE_FORMAT( rev.create_time, '%Y-%m-%d' ) create_time, revt.`name`, count( * ) FROM resource_event rev LEFT JOIN resource_eventtype revt ON rev.event_type_id = revt.id GROUP BY create_time, event_type_id""") rows = cursor.fetchall() name_list = [] event_type_list = [] for row in rows: name = row[0] if name not in name_list: name_list.append(name) event_type = row[1] if event_type not in event_type_list: event_type_list.append(event_type) bar = Bar(init_opts=opts.InitOpts(height="350px")) bar.add_xaxis(name_list) for event_type in event_type_list: tmp_list = [0 for i in range(len(name_list))] for row in rows: if event_type == row[1]: index = name_list.index(row[0]) tmp_list[index] = row[2] bar.add_yaxis(event_type, tmp_list) bar.set_global_opts(title_opts=opts.TitleOpts(title="违章记录统计"), toolbox_opts=opts.ToolboxOpts(is_show=False, feature=opts.ToolBoxFeatureOpts( restore=None, data_zoom=None))) return bar.render_embed()
def ana(request): # 获取学生所有科目成绩,绘制柱状图 nid = '2017322001' course = [] mark = [] course_list = sqlheper.get_list( 'select course.course_name,mark from stu_c left join course on stu_c.course_number=course.course_number where student_id=%s', [ nid, ]) for i in course_list: for key, values in i.items(): if key == 'course_name': course.append(values) else: mark.append(values) print(course, mark) bar = Bar(init_opts=opts.InitOpts( width='800px', height='500px', theme=ThemeType.LIGHT)) bar.add_xaxis(course) bar.add_yaxis('学生成绩', mark) return render(request, 'student_mark_ana.html', {'bar': bar.render_embed()})
def detail(request): try: if request.session['username']==None: return HttpResponseRedirect('/login/') except KeyError: return HttpResponseRedirect('/login/') subject = request.GET.get('subject') taskid = request.GET.get('taskid') username = request.session['username'] r={} result = DoubanSubject.objects.get(subject=subject,taskid=taskid) bar=Bar() mychartname = result.name+"评分占比" bar.add_xaxis(["五星", "四星", "三星", "二星", "一星"]) bar.add_yaxis(mychartname, [float(result.star_five[:-1]), float(result.star_four[:-1]), float(result.star_three[:-1]), float(result.star_two[:-1]),float(result.star_one[:-1])]) bar.set_global_opts( title_opts=opts.TitleOpts(title=mychartname), toolbox_opts=opts.ToolboxOpts(), legend_opts=opts.LegendOpts(is_show=False), ) r['myechart'] = bar.render_embed() r['result']=result return render(request,'detail.html',r)
def admin_ana(request): """ 了解专业人数分布情况 1.获取所有专业名称 2.获取每个专业人数 """ major_list = sqlheper.get_list('select major_name from major', []) major = [] for i in major_list: for key, value in i.items(): major.append(value) major_num = [] for i in major: num = len( sqlheper.get_list('select * from student where major_name=%s', [i])) major_num.append(num) bar = Bar(init_opts=opts.InitOpts( width='1200px', height='500px', theme=ThemeType.LIGHT)) bar.set_global_opts(title_opts=opts.TitleOpts(title='不同专业人数分布情况')) bar.add_xaxis(major) bar.add_yaxis('人数', major_num, bar_max_width='40px') # 了解课程和成绩的相关性 course_list = sqlheper.get_list( 'select course_number,course_name from course order by id', []) print(course_list) course_name, course_num = [], [] for i in course_list: for key, value in i.items(): if key == 'course_name': course_name.append(value) else: course_num.append(value) print(course_num) course_h, course_m, course_l = [], [], [] for i in course_num: # 对每一门课程,分别计算高、中、低的成绩人数 high, med, low = 0, 0, 0 mark = sqlheper.get_list( 'select mark from stu_c where course_number=%s', [ i, ]) for j in mark: for key, value in j.items(): # 遍历所有选择该课程的学生成绩 value = int(value) if value > 85: high += 1 elif 60 < value <= 85: med += 1 elif value <= 60: low += 1 course_h.append(high) course_m.append(med) course_l.append(low) bar_c = Bar(init_opts=opts.InitOpts( width='1200px', height='500px', theme=ThemeType.LIGHT)) bar_c.set_global_opts(title_opts=opts.TitleOpts(title='课程和成绩的相关性')) print(course_name) bar_c.add_xaxis(course_name) bar_c.add_yaxis('高分段', course_h) bar_c.add_yaxis('中分段', course_m) bar_c.add_yaxis('低分段', course_l) stu_num = len(sqlheper.get_list('select * from student', [])) cou_num = len(sqlheper.get_list('select * from course', [])) tea_num = len(sqlheper.get_list('select * from teacher', [])) return render( request, 'admin_ana.html', { 'bar': bar.render_embed(), 'bar_c': bar_c.render_embed(), 'stu_num': stu_num, 'cou_num': cou_num, 'tea_num': tea_num, })
def generate_bar_html(rows, title): x = [] y = [] for row in rows: x.append(row[0]) y.append({'value': row[1], 'range': [row[2], row[3]]}) bar = Bar(init_opts=opts.InitOpts(height='700px', width='1424px', theme=ThemeType.SHINE, chart_id="cb_tree_map")) bar.add_xaxis(x) bar.add_yaxis( "个数", y, yaxis_index=0, bar_width=50, category_gap='1%', gap='1%', label_opts=opts.LabelOpts( position="top", formatter=JsCode("function(x){return x.data[0];}")), ) bar.set_series_opts(itemstyle_opts=opts.ItemStyleOpts(color=JsCode( "function(x){return x.data['range'][0]=='0'?'lightgray':(x.data['range'][0] < 0 ? 'lightgreen':'lightcoral')}" ))) bar.set_global_opts( title_opts=opts.TitleOpts( title="=========" + title + "=========", subtitle_textstyle_opts=opts.TextStyleOpts(font_weight='bold', font_size='15px'), pos_left='center', pos_top='-1px', ), tooltip_opts=opts.TooltipOpts(is_show=False), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts( # data=None, # type_='category', # name_gap=0, # name_rotate=90, # axislabel_opts=opts.LabelOpts( # rotate=-60, # ), name='价格涨跌区间', name_gap=35, is_scale=True, name_location='middle', splitline_opts=opts.SplitLineOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_on_zero=True, # symbol=['none', 'arrow'] )), yaxis_opts=opts.AxisOpts( type_='value', name='个数', # name_rotate=90, name_gap=35, name_location='middle', # min_=0, # max_=max_value, is_scale=True, axislabel_opts=opts.LabelOpts(formatter='{value}'), splitline_opts=opts.SplitLineOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_on_zero=False, # symbol=['none', 'arrow'] )), ) bar_html = bar.render_embed('template.html', html_utils.env) return bar_html
def analyze(request): try: if request.session['username']==None: return HttpResponseRedirect('/login/') except KeyError: return HttpResponseRedirect('/login/') r={} r['username'] = request.session['username'] taskid = request.GET.get('taskid') finshed = DoubanSubject.objects.filter(taskid=taskid) typelist=[] l=[] for i in finshed: m=i.type.split(' ') for k in m: if k not in typelist and k!='' : typelist.append(k) l.append(1) elif k!='': l[typelist.index(k)]=l[typelist.index(k)]+1 bar=Bar() bar.add_xaxis(typelist) print(typelist) print(l) bar.add_yaxis("数量",l) bar.set_global_opts( title_opts=opts.TitleOpts(title="类型数量"), toolbox_opts=opts.ToolboxOpts(), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), ) r['myechart'] = bar.render_embed() data_pair = [list(z) for z in zip(typelist, l)] data_pair.sort(key=lambda x: x[1]) pie=Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#DDDD77")) pie.add( series_name="类型占比", data_pair=data_pair, rosetype="radius", radius="55%", center=["50%", "50%"], label_opts=opts.LabelOpts(is_show=False, position="center"), ) pie.set_series_opts( tooltip_opts=opts.TooltipOpts( trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)" ), label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"), ) r['mypie']=pie.render_embed() namelist=[] scorelist=[] for i in finshed: score=i.score name=i.name namelist.append(name) scorelist.append(score) bar=Bar() bar.add_xaxis(namelist) print(typelist) print(l) bar.add_yaxis("评分",scorelist) bar.set_global_opts( title_opts=opts.TitleOpts(title="评分"), toolbox_opts=opts.ToolboxOpts(), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), ) bar.set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="min", name="最小值"), opts.MarkLineItem(type_="max", name="最大值"), opts.MarkLineItem(type_="average", name="平均值"), ] ), ) r['score'] = bar.render_embed() return render(request,'analyze.html',r)
def pyecharts(request): """dashboard view""" # 工单数量统计 chart_dao = ChartDao() data = chart_dao.workflow_by_date(30) today = date.today() one_month_before = today - relativedelta(days=+30) attr = chart_dao.get_date_list(one_month_before, today) _dict = {} for row in data['rows']: _dict[row[0]] = row[1] value = [_dict.get(day) if _dict.get(day) else 0 for day in attr] bar1 = Bar(init_opts=opts.InitOpts(width='600', height='380px')) bar1.add_xaxis(attr) bar1.add_yaxis("", value) # 工单按组统计 data = chart_dao.workflow_by_group(30) attr = [row[0] for row in data['rows']] value = [row[1] for row in data['rows']] pie1 = Pie(init_opts=opts.InitOpts(width='600', height='380px')) pie1.set_global_opts(title_opts=opts.TitleOpts(title=''), legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%", is_show=False)) pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie1.add("", [list(z) for z in zip(attr, value)]) # 工单按人统计 data = chart_dao.workflow_by_user(30) attr = [row[0] for row in data['rows']] value = [row[1] for row in data['rows']] bar2 = Bar(init_opts=opts.InitOpts(width='600', height='380px')) bar2.add_xaxis(attr) bar2.add_yaxis("", value) # SQL语句类型统计 data = chart_dao.syntax_type() attr = [row[0] for row in data['rows']] value = [row[1] for row in data['rows']] pie2 = Pie() pie2.set_global_opts(title_opts=opts.TitleOpts(title='SQL上线工单统计(类型)'), legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%")) pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie2.add("", [list(z) for z in zip(attr, value)]) # SQL查询统计(每日检索行数) attr = chart_dao.get_date_list(one_month_before, today) effect_data = chart_dao.querylog_effect_row_by_date(30) effect_dict = {} for row in effect_data['rows']: effect_dict[row[0]] = int(row[1]) effect_value = [ effect_dict.get(day) if effect_dict.get(day) else 0 for day in attr ] count_data = chart_dao.querylog_count_by_date(30) count_dict = {} for row in count_data['rows']: count_dict[row[0]] = int(row[1]) count_value = [ count_dict.get(day) if count_dict.get(day) else 0 for day in attr ] line1 = Line(init_opts=opts.InitOpts(width='600', height='380px')) line1.set_global_opts(title_opts=opts.TitleOpts(title=''), legend_opts=opts.LegendOpts(selected_mode='single')) line1.add_xaxis(attr) line1.add_yaxis("检索行数", effect_value, is_smooth=True, markpoint_opts=opts.MarkPointOpts( data=[opts.MarkPointItem(type_="average")])) line1.add_yaxis("检索次数", count_value, is_smooth=True, markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="max"), opts.MarkLineItem(type_="average") ])) # SQL查询统计(用户检索行数) data = chart_dao.querylog_effect_row_by_user(30) attr = [row[0] for row in data['rows']] value = [int(row[1]) for row in data['rows']] pie4 = Pie(init_opts=opts.InitOpts(width='600', height='380px')) pie4.set_global_opts(title_opts=opts.TitleOpts(title=''), legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%", is_show=False)) pie4.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) pie4.add("", [list(z) for z in zip(attr, value)]) # SQL查询统计(DB检索行数) data = chart_dao.querylog_effect_row_by_db(30) attr = [row[0] for row in data['rows']] value = [int(row[1]) for row in data['rows']] pie5 = Pie(init_opts=opts.InitOpts(width='600', height='380px')) pie5.set_global_opts(title_opts=opts.TitleOpts(title=''), legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%", is_show=False)) pie5.set_series_opts( label_opts=opts.LabelOpts(formatter="{b}: {c}", position="left")) pie5.add("", [list(z) for z in zip(attr, value)]) # 可视化展示页面 chart = { "bar1": bar1.render_embed(), "pie1": pie1.render_embed(), "bar2": bar2.render_embed(), "pie2": pie2.render_embed(), "line1": line1.render_embed(), "pie4": pie4.render_embed(), "pie5": pie5.render_embed(), } # 获取统计数据 dashboard_count_stats = { "sql_wf_cnt": SqlWorkflow.objects.count(), "query_wf_cnt": QueryPrivilegesApply.objects.count(), "user_cnt": Users.objects.count(), "ins_cnt": Instance.objects.count() } return render(request, "dashboard.html", { "chart": chart, "count_stats": dashboard_count_stats })
def generate_bar_html(rows, title): xx1 = [] xx2 = [] yy1 = [] yy2 = [] count = 0 for row in rows: count += 1 bond_code = row[0] bond_code = trade_utils.rebuild_bond_code(bond_code) if count <= 20: xx1.append(row[1].replace('转债', '')) yy1.append({'value': row[2], 'bond_code': bond_code, 'price': row[3], 'premium': row[4], 'name': row[1]}) else: xx2.append(row[1].replace('转债', '')) yy2.append({'value': row[2], 'bond_code': bond_code, 'price': row[3], 'premium': row[4], 'name': row[1]}) max_value = 0 size = len(yy1) for i in range(size): if yy1[i]['value'] + abs(yy2[i]['value']) > max_value: max_value = yy1[i]['value'] + abs(yy2[i]['value']) max_value = round(max_value * 1.1, 2) + 1 chart_id = str(abs(hash(title))) bar = Bar(init_opts=opts.InitOpts(height='700px', width='1424px', theme=ThemeType.SHINE, chart_id=chart_id)) view_utils.add_popwin_js_code(bar, chart_id) # 底部x轴 bar.add_xaxis(xx1) # 顶部x轴 bar.extend_axis( xaxis_data=xx2, xaxis=opts.AxisOpts( type_="category", position='top', axislabel_opts=opts.LabelOpts( rotate=-60, ) ), ) # 右侧y轴 bar.extend_axis( yaxis=opts.AxisOpts( type_="value", position="right", name='跌幅(%)', name_gap=45, name_location='middle', min_=-max_value, axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts( is_show=True, ) ), axislabel_opts=opts.LabelOpts(formatter="{value}%"), ) ) # 添加涨的柱状图 bar.add_yaxis("涨", yy1, bar_width=25, category_gap='1%', gap='1%', label_opts=opts.LabelOpts( position="top", formatter=JsCode( "function(x){return x.data['value'] +'%';}" ) ), ) # 添加跌的柱状图 bar.add_yaxis("跌", yy2, bar_width=25, yaxis_index=1, label_opts=opts.LabelOpts( position="bottom", formatter=JsCode( "function(x){return x.data['value'] +'%';}" ) ), ) # bar.reversal_axis() bar.set_series_opts( itemstyle_opts=opts.ItemStyleOpts( color=JsCode( "function(x){return x.data['value']>0?'#c23531':'#1d953f'}" ) ) ) bar.set_global_opts( title_opts=opts.TitleOpts( title="=========" + title + "=========", pos_left='center', pos_top='-1px', ), tooltip_opts=opts.TooltipOpts( is_show=True, formatter=JsCode("function (params){return '名 称: ' + params.data['name'] + '<br/>' + '价 格: ' + params.data['price'] + '元<br/>' + '溢价率: ' + params.data['premium']}") ), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts( # data=None, # type_='category', # name_gap=0, # name_rotate=90, axislabel_opts=opts.LabelOpts( rotate=-60, ), is_scale=True, name_location='middle', splitline_opts=opts.SplitLineOpts(is_show=False), axisline_opts=opts.AxisLineOpts( is_on_zero=True, # symbol=['none', 'arrow'] ) ), yaxis_opts=opts.AxisOpts( type_='value', name='涨幅(%)', # name_rotate=90, name_gap=35, name_location='middle', # min_=0, max_=max_value, is_scale=True, axislabel_opts=opts.LabelOpts(formatter='{value}%'), splitline_opts=opts.SplitLineOpts(is_show=False), axisline_opts=opts.AxisLineOpts( is_on_zero=False, # symbol=['none', 'arrow'] ) ), ) bar_html = bar.render_embed('template.html', html_utils.env) return bar_html