def line_markline(): obj_l = Line() obj_l.add_xaxis(Faker.choose()) obj_l.add_yaxis("商家A", Faker.values(), markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]), # 该参数设置在这里只对商家A起作用 label_opts=opts.LabelOpts(is_show=False) ) obj_l.add_yaxis("商家B", Faker.values(), markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]), ) obj_l.set_series_opts( # 该参数设置在这里对商家A,商家B都起作用 # 设置该参数,则x对应的y值会显示出来,该参数默认为True label_opts=opts.LabelOpts(is_show=False), ) obj_l.set_global_opts( title_opts=opts.TitleOpts(title="Line-MarkLine", subtitle="平均值的线"), xaxis_opts=opts.AxisOpts( name="x轴", # 坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样,可设置x轴刻度顶格 boundary_gap=True, # 类目轴中在 boundaryGap 为 true 的时候有效,可以保证刻度线和标签对齐。 axistick_opts=opts.AxisTickOpts(is_align_with_label=True) ), ) return obj_l
def setrose(): x1 = ['2016年', '2017年', '2018年', '2019年', '2020年'] y1 = ['文学', 350.0, 345.0, 345.0, 355.0, 355.0] y2 = ['理学', 285.0, 290.0, 280.0, 290.0, 288.0] c = (Line(init_opts=opts.InitOpts( width="1600px", height="800px")).add_xaxis(xaxis_data=x1).add_yaxis( series_name="文学", y_axis=y1, markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="最大值"), opts.MarkPointItem(type_="min", name="最小值"), ]), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average", name="平均值")]), ).add_yaxis( series_name="理学", y_axis=y2, markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="最大值"), opts.MarkPointItem(type_="min", name="最小值"), ]), markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="average", name="平均值"), opts.MarkLineItem(symbol="none", x="90%", y="max"), opts.MarkLineItem(symbol="circle", type_="max", name="最高点"), ]), ).set_global_opts( title_opts=opts.TitleOpts(title="近5年理学/文学国家线趋势"), tooltip_opts=opts.TooltipOpts(trigger="axis"), toolbox_opts=opts.ToolboxOpts(is_show=True), xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False), )) return c
def line_markline() -> Line: the_region = request.form["the_Race_selected"] yy1 = [] yy2 = [] times = [] for t in list(time): times.append(str(t)) for t in time: df5 = dfs[dfs.Year == t] yy1.append(sum(df5['Deaths'][(df['Sex'] == 'Female')])) yy2.append(sum(df5['Deaths'][(df['Sex'] == 'Male')])) c = ( Line() .add_xaxis(times) .add_yaxis( "女性", yy1, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]), ) .add_yaxis( "男性", yy2, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]), ) .set_global_opts(title_opts=opts.TitleOpts(title="1999-2017年{}的死亡人数".format(the_region))) ) return c
def draw_charts(product_name, case_name, total_secs, qps, latency): secs = range(0, int(total_secs), int(total_secs / 100)) secs.append(int(total_secs)) c = (Line( init_opts=opts.InitOpts(width="1600px", height="800px") ).add_xaxis(xaxis_data=secs).add_yaxis( series_name="QPS", y_axis=qps, markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="Max Value"), opts.MarkPointItem(type_="min", name="Min Value"), ]), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average", name="Average QPS")]), ).add_yaxis( series_name="Latency", y_axis=latency, markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average", name="Average Latency")]), ).set_global_opts( title_opts=opts.TitleOpts(title="QPS", subtitle="DML only"), tooltip_opts=opts.TooltipOpts(trigger="axis"), toolbox_opts=opts.ToolboxOpts(is_show=True), xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False), ).render("sysbench-" + product_name + '-' + case_name + ".html"))
def kline_base(mydate, data, name) -> Kline: kline = ( Kline() .add_xaxis(mydate) .add_yaxis("%s" % name, data, markpoint_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="max", value_dim="close")] ), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="max", value_dim="close")] ), itemstyle_opts=opts.ItemStyleOpts( color="#ec0000", color0="#00da3c", border_color="#8A0000", border_color0="#008F28", ), ) .set_global_opts( yaxis_opts=opts.AxisOpts(is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), xaxis_opts=opts.AxisOpts(is_scale=True, axislabel_opts=opts.LabelOpts(rotate=-30)), title_opts=opts.TitleOpts(title="股票走势"), datazoom_opts=[opts.DataZoomOpts()], toolbox_opts=opts.ToolboxOpts(is_show=True), ) ) return kline
def line_markline() -> Line: c = (Line().add_xaxis(Faker.choose()).add_yaxis( "商家A", Faker.values(), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average")]), ).add_yaxis( "商家B", Faker.values(), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average")]), ).set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkLine"))) return c
def line_markpoint() -> Line: c = ( Line().add_xaxis(Faker.choose()).add_yaxis( "商家A", Faker.values(), is_smooth=True, # linestyle_opts=opts.LineStyleOpts(width=3), markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="min"), opts.MarkLineItem(type_="max") ], label_opts=opts.LabelOpts( is_show=True, position="end", ), ), ).add_yaxis( "商家B", Faker.values(), is_smooth=True, # linestyle_opts=opts.LineStyleOpts(width=3), markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="min"), opts.MarkLineItem(type_="max") ], label_opts=opts.LabelOpts( is_show=True, position="end", ), ), ).set_series_opts( areastyle_opts=opts.AreaStyleOpts(opacity=0.5), label_opts=opts.LabelOpts(is_show=False), ).set_global_opts( title_opts=opts.TitleOpts( title="Line-面积图(紧贴 Y 轴)", pos_left="center", ), xaxis_opts=opts.AxisOpts( axistick_opts=opts.AxisTickOpts(is_align_with_label=True), is_scale=False, boundary_gap=False, ), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), )) return c
def barSpeed(data) -> Bar: """ -- 按列车类型统计运行速度 :param data:list:[[X轴-类型名称], [Y轴-速度]] :return: Bar """ speed_bar = ( Bar(init_opts=opts.InitOpts(width='1000px', height='500px')).add_xaxis(data[0]). add_yaxis("车次数量", data[1], color='#8c4356').set_global_opts( legend_opts=opts.LegendOpts(is_show=False), # 不显示图例 xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts( rotate=0)), # 横坐标标签倾斜 yaxis_opts=opts.AxisOpts(name='公里/小时'), title_opts=opts.TitleOpts( title='按列车类型统计运行速度', title_textstyle_opts=opts.TextStyleOpts( font_size=20))).set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts( symbol='circle', precision=0, data=[ opts.MarkLineItem(name='平均', type_='average') ]), # 平均值线 markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="Max"), opts.MarkPointItem(type_="min", name="Min") ]), )) return speed_bar
def barDistance(data) -> Bar: """ -- 按运行里程区间统计车次数量 :param data:list:[[X轴-里程区间], [Y轴-车次数量]] :return: Bar """ distance_bar = ( Bar(init_opts=opts.InitOpts(width='1000px', height='500px')).add_xaxis(data[0]). add_yaxis("车次数量", data[1], color='#425066').set_global_opts( legend_opts=opts.LegendOpts(is_show=False), # 不显示图例 xaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(rotate=30), name='公里'), # 横坐标标签倾斜 yaxis_opts=opts.AxisOpts(name='次'), title_opts=opts.TitleOpts( title='按运行里程区间统计车次数量', title_textstyle_opts=opts.TextStyleOpts( font_size=20))).set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts( symbol='circle', precision=0, data=[ opts.MarkLineItem(name='平均', type_='average') ]), # 平均值线 markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="Max"), opts.MarkPointItem(type_="min", name="Min") ]), )) return distance_bar
def genLine(self,x_list=None,y_orderdicts=None,title='线形示例',subtitle='副标题示例',is_smooth=True,average = None): ''' 折线图 平滑曲线 应用场景 趋势图 param x_list x轴的值 type list param y_dicts key是类别,value是y轴的值 type orderdict param title 图表的题目 type str param is_smooth 是否平滑 默认是 type bool param average 平均数的基准标记线 type number ''' x_list = x_list or Faker.choose() y_orderdicts = y_orderdicts or {i: Faker.values() for i in range(1, 3)} c = ( Line() .add_xaxis(x_list) .set_global_opts(title_opts=opts.TitleOpts(title=title,subtitle =subtitle)) ) for key, value in y_orderdicts.items(): if average: # c.add_yaxis(key, value,is_smooth=True,markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")])) c.add_yaxis(key, value,is_smooth=True,markline_opts=opts.MarkLineOpts(data=average)) else: c.add_yaxis(key, value,is_smooth=True) chart_name = f'static/chart{self.index}_line' make_snapshot(snapshot,c.render(f'{chart_name}.html'),f'{chart_name}.png',is_remove_html=True) self.index += 1
def get_line(x, y, y_name, x_name): print(y_name) new_bar = (Bar().add_xaxis(x)) for y_label in y: new_bar.add_yaxis( y_label, y[y_label], color="#409EFF", label_opts=opt.LabelOpts(), # is_smooth=True, markline_opts=opt.MarkLineOpts( data=[opt.MarkLineItem(type_="average")]), markpoint_opts=opt.MarkPointOpts( data=[opt.MarkPointItem(type_='max', name="最大值")])) new_bar.set_series_opts(areastyle_opts=opt.AreaStyleOpts(opacity=0.5), label_opts=opt.LabelOpts(is_show=False)) new_bar.set_global_opts( datazoom_opts=opt.DataZoomOpts(type_='inside'), legend_opts=opt.LegendOpts(is_show=True), yaxis_opts=opt.AxisOpts( name=y_name, name_textstyle_opts=opt.TextStyleOpts(color="black")), xaxis_opts=opt.AxisOpts( name=x_name, name_textstyle_opts=opt.TextStyleOpts(color="black"), type_="category", )), return new_bar.dump_options_with_quotes()
def report(request): """返回慢SQL历史趋势""" checksum = request.GET.get('checksum') cnt_data = ChartDao().slow_query_review_history_by_cnt(checksum) pct_data = ChartDao().slow_query_review_history_by_pct_95_time(checksum) cnt_x_data = [row[1] for row in cnt_data['rows']] cnt_y_data = [int(row[0]) for row in cnt_data['rows']] pct_y_data = [str(row[0]) for row in pct_data['rows']] line = Line(init_opts=opts.InitOpts(width='800', height='380px')) line.add_xaxis(cnt_x_data) line.add_yaxis("慢查次数", cnt_y_data, is_smooth=True, markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="max", name='最大值'), opts.MarkLineItem(type_="average", name='平均值') ])) line.add_yaxis("慢查时长(95%)", pct_y_data, is_smooth=True, is_symbol_show=False) line.set_series_opts(areastyle_opts=opts.AreaStyleOpts(opacity=0.5, )) line.set_global_opts( title_opts=opts.TitleOpts(title='SQL历史趋势'), legend_opts=opts.LegendOpts(selected_mode='single'), xaxis_opts=opts.AxisOpts( axistick_opts=opts.AxisTickOpts(is_align_with_label=True), is_scale=False, boundary_gap=False, ), ) result = {"status": 0, "msg": '', "data": line.render_embed()} return HttpResponse(json.dumps(result), content_type='application/json')
def show_bar(): bar = (Bar().add_xaxis(bar_city).add_yaxis( "Average Income", bar_income).add_yaxis("Employed People", bar_employ).add_yaxis( "Covid Pos", bar_co_p, stack="stack1").add_yaxis("Covid Neg", bar_co_n, stack="stack1").add_yaxis( "Crime Pos", bar_cr_p, stack="stack2"). add_yaxis("Crime Neg", bar_cr_n, stack="stack2").set_global_opts( title_opts=opts.TitleOpts(title="City Income"), yaxis_opts=opts.AxisOpts(name="Income(k)/Employ(10k)/PosVSNeg"), xaxis_opts=opts.AxisOpts(name="City"), datazoom_opts=opts.DataZoomOpts(orient="horizontal", range_start=0, range_end=100), toolbox_opts=opts.ToolboxOpts(), ).set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="average", name="Average Value"), ]), )) return bar
def develop_select() -> 'html': the_region = request.form["the_region_selected"] dfs_develop = df_develop.query("region=='{}'".format(the_region)) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE)) .add_xaxis(dfs_develop['年'].tolist()) .add_yaxis("", dfs_develop['count'].tolist()) .set_global_opts(title_opts=opts.TitleOpts(title=the_region, subtitle="")) .set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="average", name="平均值"), ] ), ) ) c.render("./static/tmp/echarts_develop.html") with open("./static/tmp/echarts_develop.html", encoding="utf8", mode="r") as f: plot_all = "".join(f.readlines()) data_str = dfs_develop.to_html() return render_template('pyecharts.html', myechart=plot_all, the_res=data_str, the_select_region=regions_available_develop, bottom_title="分析:柱状图", mark="develop", )
def line_base(self, date: list, price: list) -> Line: line = ( Line() .add_xaxis(xaxis_data=date) .add_yaxis( series_name="价格", y_axis=price, markpoint_opts=opts.MarkPointOpts( data=[ opts.MarkPointItem(type_="max", name="最大值"), opts.MarkPointItem(type_="min", name="最小值"), ] ), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average", name="平均值")] ), ) .set_global_opts( title_opts=opts.TitleOpts(title="历史价格记录"), tooltip_opts=opts.TooltipOpts(trigger="axis"), toolbox_opts=opts.ToolboxOpts(is_show=False), xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False), ) ) return line
def draw_balance_line(xaxis, yaxis, title="消费统计", markline=None, width=2000) -> Line: """ x = [月_日, 月_日, 月_日, ....] y = [(title1, [num1, num2, num3, num4, ...]), (title2, [num1, num2, num3, num4, ...])] :param xaxis: x轴 :param yaxis: y轴 :param title: 标题 :param markline: 标记辅助线 :param width: 宽 :return: Line """ line = Line() line.add_xaxis(xaxis) for name, axis in yaxis: line.add_yaxis(name, axis, is_symbol_show=True) line.set_global_opts(title_opts=opts.TitleOpts(title=title, ), datazoom_opts=[ opts.DataZoomOpts(range_start=0, range_end=100), opts.DataZoomOpts(type_="inside") ], tooltip_opts=opts.TooltipOpts( trigger='axis', axis_pointer_type='shadow')) line.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) if markline is not None: line.set_series_opts(markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(y=markline, name='预算')])) return line
def plot_one_y(df, title: str): df.index = pd.to_datetime(df['date']) df.sort_index(inplace=True) df = df.drop(['date'], axis=1) return (Line( init_opts=opts.InitOpts(width="1200px", height="400px")).add_xaxis( xaxis_data=df.index.strftime( '%Y-%m-%d').values.tolist()).add_yaxis( series_name=title.upper(), y_axis=np.round(df['r2'].values, 2).tolist(), is_smooth=True, label_opts=opts.LabelOpts(is_show=False), linestyle_opts=opts.LineStyleOpts(width=2), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average")]), ).set_global_opts( datazoom_opts=opts.DataZoomOpts(), legend_opts=opts.LegendOpts(pos_bottom="0%", pos_right='45%'), title_opts=opts.TitleOpts( title=title.upper(), pos_left='0%', ), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), toolbox_opts=opts.ToolboxOpts(is_show=True), xaxis_opts=opts.AxisOpts(boundary_gap=False), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(formatter="{value}"), splitline_opts=opts.SplitLineOpts(is_show=True), ), ).set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_='max', name='Max'), opts.MarkPointItem(type_='min', name='Min') ]), ))
def student_history_ranking(student_id: int) -> dict: result = {} result_chart = {} grades = StudentGrade.query.filter_by( student_ID=student_id, subject='理科').order_by(StudentGrade.test_time).all() test_names = [t.test_name for t in Test.query.order_by(Test.test_time).all()] print(test_names) for subject in Subject.li_all_subject(): result[subject] = [] for grade in grades: grade: StudentGrade result[subject].append(grade.__dict__[subject + '_ranking']) for subject in Subject.li_all_subject(): line = ( Line() .add_xaxis(test_names) .add_yaxis( '排名', result[subject], markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]), ) .set_global_opts( title_opts=opts.TitleOpts( title=Subject.en2cn(subject) + '科历次成绩走势', subtitle='虚线为平均排名' ), ) ) result_chart[subject] = line return result_chart
def displayECLine(request, t_inner_id): query_type, inner_code = t_inner_id[0], t_inner_id[1:] if query_type=='P': sql_query_1 = f'''SELECT mall_name, goods_name, prescription FROM pdd_rep_goods WHERE pdd_inner_code='{inner_code}';''' sql_query_2 = f'''SELECT update_time, price FROM pdd_rep_price WHERE pdd_inner_code='{inner_code}';''' else: sql_query_1 = f'''SELECT shop_name, goods_name, three_cat FROM jd_rep_goods WHERE jd_inner_code='{inner_code}';''' sql_query_2 = f'''SELECT update_time, price FROM jd_rep_price WHERE jd_inner_code='{inner_code}';''' supplier, mds_name, mds_spec = query_mysql_reptile(sql_query_1)[0] list_temp = DataFrame(list(query_mysql_reptile(sql_query_2))) date_list, pric_list = list_temp[0].tolist(), list_temp[1].tolist() c = ( Line() .add_xaxis(date_list) .add_yaxis(supplier, pric_list, linestyle_opts=opts.LineStyleOpts(color="#6699cc"), label_opts=opts.LabelOpts(is_show=True, position="bottom", color="#aabcfe", rotate = '-20'), markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="average", name="平均 Average") # opts.MarkLineItem(type_="min", name="最小 Min Value"), # opts.MarkLineItem(type_="max", name="最大 Max Value") ], linestyle_opts=opts.LineStyleOpts(type_='dashed', color="rgba(235,85,128,0.87)"), is_silent=True)) .set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-20)), title_opts=opts.TitleOpts(title='\n' + mds_name , pos_left='10%', subtitle=mds_spec) ) ) return HttpResponse(c.render_embed())
def displayAnaLine(request, gid): # 功能 获取信息显示在折线图上方 # 返回 supplier:供应商名称层 mds_name:商品名称 mds_spec:商品规格 sql_query_1 = f'''SELECT search_app_tb_supplier.supp_name, search_app_tb_goods.goods_name, search_app_tb_goods.goods_spec FROM (search_app_tb_supplier INNER JOIN search_app_tb_goods ON search_app_tb_supplier.supp_id = search_app_tb_goods.supp_id) WHERE search_app_tb_goods.goods_id={gid}''' supplier, mds_name, mds_spec = query_mysql_analyze(sql_query_1)[0] # 功能 获取折线图的 x轴数据(日期) y轴数据(价格) # 返回 日期列表 价格列表 sql_query_2 = f'''SELECT search_app_tb_price.update_time, search_app_tb_price.tax_cost FROM (search_app_tb_supplier INNER JOIN search_app_tb_price ON search_app_tb_supplier.supp_id = search_app_tb_price.supp_id) INNER JOIN search_app_tb_goods ON (search_app_tb_goods.goods_id = search_app_tb_price.goods_id) AND (search_app_tb_supplier.supp_id=search_app_tb_goods.supp_id) WHERE search_app_tb_goods.goods_id={gid} ORDER BY search_app_tb_price.update_time ASC''' list_temp = DataFrame(list(query_mysql_analyze(sql_query_2))) date_list, pric_list = list_temp[0].tolist(), list_temp[1].tolist() # 获取所有数据集 开始渲染 c = ( Line() .add_xaxis(date_list) .add_yaxis(supplier, pric_list, linestyle_opts=opts.LineStyleOpts(color="#6699cc"), label_opts=opts.LabelOpts(is_show=True, position="bottom", color="#aabcfe", rotate = '-20'), markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均 Average") # opts.MarkLineItem(type_="min", name="最小 Min Value"), # opts.MarkLineItem(type_="max", name="最大 Max Value") ], linestyle_opts=opts.LineStyleOpts(type_='dashed', color="rgba(235,85,128,0.87)"), is_silent=True)) .set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-20)), title_opts=opts.TitleOpts(title=mds_name , pos_left='80%', subtitle=mds_spec) ) ) return HttpResponse(c.render_embed())
def valuation_report(): """ 股票池估值报告 :return: """ df = db.read("valuation_report") x, y = df['name'].values.tolist(), df['rate'].values.tolist() series_name = "高估比例" title = "股票池估值报告" subtitle = datetime.now().strftime("%Y%m%d") bar = ( Bar(init_opts={"height": "700px", "bg_color": "white", "theme": ThemeType.LIGHT}) .add_xaxis(x) .add_yaxis(series_name, y) .set_series_opts( label_opts=opts.LabelOpts(position="right"), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(x=9, name=""), opts.MarkLineItem(x=-9, name="")], linestyle_opts={'color': 'rgb(220, 20, 60)'} ) ) .set_global_opts(title_opts=opts.TitleOpts(title=title, subtitle=subtitle)) .reversal_axis() ) # make_snapshot(snapshot, bar.render(), output_path) return bar
def account_article_num(): account = db.session.query(WechatArticle.account, func.count(WechatArticle.id)) \ .filter(extract('year', WechatArticle.publish_time) == '2019').group_by( WechatArticle.account).order_by(desc(func.count(WechatArticle.id))).all() keys = [] values = [] for key, value in account: keys.append(key) values.append(value) print('文章公众号总数', len(keys), sum(values), values) bar = (Bar({ "width": "1500px", "height": "700px" }).add_xaxis(keys).add_yaxis( series_name="文章数量(/篇)", yaxis_data=values, category_gap='10%').set_global_opts( title_opts=opts.TitleOpts(title="2019年公众号收录文章数", pos_top='10%', pos_left='43%'), xaxis_opts=opts.AxisOpts(name='公众号名称', name_rotate=-90, axislabel_opts={'rotate': -45}), yaxis_opts=opts.AxisOpts(name="文章数量(/篇)"), legend_opts=opts.LegendOpts(is_show=False), datazoom_opts=[opts.DataZoomOpts(type_="inside")], ).set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="average", name="平均值"), ]), )) # bar.render(path='./static/year/account_article_num.html') print('生成公众号收录文章数') return bar
def bar_select() -> 'html': # 获取用户输入的选项 the_region = request.form["the_region_selected"] # 根据用户输入选项提取 对应数据 dfs_bar = df_bar.query("region=='{}'".format(the_region)) # 创建图表对象并配置参数 c = ( Bar() .add_xaxis(dfs_bar['年'].tolist()) # 配置x轴数据 .add_yaxis(the_region, dfs_bar['count'].tolist())# 配置y轴数据 .set_global_opts(title_opts=opts.TitleOpts(title=the_region, subtitle=""))# 配置标题 .set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="average", name="平均值"), ] ), ) ) # 生成图表html文件 c.render("./static/tmp/echarts_bar.html") # 读取生成好的图表 with open("./static/tmp/echarts_bar.html", encoding="utf8", mode="r") as f: plot_all = "".join(f.readlines()) # 准备模板显示用的 表格数据 data_str = dfs_bar.to_html() return render_template('pyecharts.html', myechart=plot_all,# 图表 the_res=data_str, # 表格数据 the_select_region=regions_available_bar,#下拉框数据 bottom_title="分析:柱状图",# 图表下标题数据 mark="bar",# 用于给模板html识别显示柱状图对应的from标签 )
def createPlotLine(df, xAxisTitle, yAxisTitle, title=None): line = Line() line.add_xaxis(df[xAxisTitle].tolist()) line.add_yaxis(yAxisTitle, df[yAxisTitle].tolist()) if not title: title = "" line.set_global_opts( tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), title_opts=opts.TitleOpts(title=title) ) ptg75 = df[yAxisTitle].quantile(.75) ptg50 = df[yAxisTitle].quantile(.5) ptg25 = df[yAxisTitle].quantile(.25) line.set_series_opts( markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(y=ptg75, name="75%"), opts.MarkLineItem(y=ptg50, name="50%"), opts.MarkLineItem(y=ptg25, name="25%") ] ), ) return line
def line_pf() -> Line: c = (Line(opts.InitOpts( bg_color='#FFFFFF', width='800px', height='500px')).add_xaxis(arr).add_yaxis( "功率因数", val[13], color='LightSkyBlue', is_symbol_show=False, markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average")]), areastyle_opts=opts.AreaStyleOpts(opacity=0.4), markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max"), opts.MarkPointItem(type_="min") ])).add_yaxis( "下限(0.9)", paras[5], linestyle_opts=opts.LineStyleOpts(width=1.5, type_='dashed'), is_symbol_show=False).set_series_opts( label_opts=opts.LabelOpts(is_show=False)).set_global_opts( title_opts=opts.TitleOpts( title='功率因数趋势图', subtitle='日期:' + df.Date.iloc[0] + ' to ' + df.Date.iloc[-1], ))) return c
def barCompanyOut(data) -> Bar: # 全国民航机场进出港航班数量(TOP 15) company_out_bar = ( Bar(init_opts=opts.InitOpts(width='1000px', height='500px')).add_xaxis(data[0]). add_yaxis("航空公司", data[1], color='#574266').set_global_opts( legend_opts=opts.LegendOpts(is_show=False), # 不显示图例 datazoom_opts=[ opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside") ], # DataZoom类型 title_opts=opts.TitleOpts( title='本周航空公司出港航班数量统计', title_textstyle_opts=opts.TextStyleOpts( font_size=20), # 设置标题大小 subtitle='{}-{},本周发送航班最多的航空公司是:{},{},{}。[数据来源:ctrip.com]'. format( data[2], data[3], data[4], data[5], data[6]))).set_series_opts( label_opts=opts.LabelOpts(is_show=False), # 不显示标签值 markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="Max"), opts.MarkPointItem(type_="min", name="Min"), ]), # 最大值,最小值 markline_opts=opts.MarkLineOpts( symbol='circle', precision=0, data=[ opts.MarkLineItem(name='平均', type_='average') ]) # 平均值线 )) return company_out_bar
def Getline(dataX, dataY, n=[0], T=""): chinaLine = ( Line(init_opts=opts.InitOpts(theme=ThemeType.INFOGRAPHIC)) .add_xaxis(dataX) .set_global_opts( title_opts=opts.TitleOpts(title="{}月情感变化{}".format(n[0], T)), toolbox_opts=opts.ToolboxOpts(is_show=True), ) .set_series_opts( label_opts=opts.LabelOpts(is_show=False), ) ) for i in range(len(dataY)): chinaLine.add_yaxis('{}月情感变化'.format(n[i]), dataY[i], is_symbol_show=False, label_opts=opts.LabelOpts(is_show=True), markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="average", name="平均值"), opts.MarkLineItem(symbol="none", x="90%", y="max"), # opts.MarkLineItem(symbol="circle", type_="max", name="最高点"), ] ), markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max"), ]), is_smooth=True) # chinaLine.render() return chinaLine.render_embed()
def barAirPort(self, data) -> Bar: # 全国民航机场进出港航班数量(TOP 15) airport_bar = ( Bar(init_opts=opts.InitOpts( width='1000px', height='500px')).add_xaxis( data[0][0][:15]).add_yaxis("%s" % data[2], data[0][1][:15], color='#425066'). set_global_opts( legend_opts=opts.LegendOpts(is_show=False), # 不显示图例 xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts( rotate=30)), # 横坐标标签倾斜 title_opts=opts.TitleOpts( title='全国民航机场%s航班数量(TOP 15)' % data[2], title_textstyle_opts=opts.TextStyleOpts( font_size=20), # 设置标题大小 subtitle='{},全国共{}航班{}架次,{},{},{}是数量最多的三个。[数据来源:ctrip.com]' .format(self.today_ymd, data[2], data[1], data[0][0][0], data[0][0][1], data[0][0][2])) ).set_series_opts(markline_opts=opts.MarkLineOpts( symbol='circle', precision=0, data=[opts.MarkLineItem(name='平均', type_='average')]) # 平均值线 )) return airport_bar
def get_month_overlap_chart(month: int) -> Bar: bar = (Bar().add_xaxis(xaxis_data=name_list).add_yaxis( series_name="销量", y_axis=total_data[month], label_opts=opts.LabelOpts(is_show=True), ).set_global_opts( title_opts=opts.TitleOpts(title="2020年{}月各尺寸销量".format(month)), tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="shadow"), xaxis_opts=opts.AxisOpts(name='单位: 英寸'), yaxis_opts=opts.AxisOpts(name='销量: 台')).set_series_opts( label_opts=opts.LabelOpts(is_show=True), markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="average", name="平均值"), ]), )) pie = (Pie().add( series_name="销售占比", data_pair=[["小屏(<=38寸)", classified_data[month][0]], ["中等大小屏幕", classified_data[month][1]], ["大屏(>=65寸)", classified_data[month][2]]], center=["25%", "35%"], radius="28%", ).set_series_opts( tooltip_opts=opts.TooltipOpts(is_show=True, trigger="item"))) return bar.overlap(pie)
def barTime(self, data) -> Bar: # 进出港航班数量按小时统计 time_bar = ( Bar(init_opts=opts.InitOpts(width='1000px', height='500px')). add_xaxis(data[0][0]).add_yaxis( "{}航班数量".format(data[2]), data[0][1], color='#1685a9').set_series_opts( label_opts=opts.LabelOpts(is_show=False), markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="Max"), opts.MarkPointItem(type_="min", name="Min"), ]), markline_opts=opts.MarkLineOpts( symbol='circle', precision=0, data=[opts.MarkLineItem(name='平均', type_='average')])). set_global_opts( legend_opts=opts.LegendOpts(is_show=False), # 不显示图例 xaxis_opts=opts.AxisOpts(name_rotate=30), # 【【【X坐标轴标签倾斜,不好使】】】 title_opts=opts.TitleOpts( title='{}航班数量按小时统计'.format(data[2]), title_textstyle_opts=opts.TextStyleOpts( font_size=20), # 设置标题大小 subtitle='{},全国共{}航班{}架次。[数据来源:ctrip.com]'.format( self.today_ymd, data[2], data[1])))) return time_bar