def grid_graph(self, grid_graph=None): # 创建组合图表画布对象 self.grid_chart = Grid( init_opts=opts.InitOpts(width="1900px", height="900px")) bar_data = [[ row["open_price"], row["close_price"], row["low_price"], row["high_price"] ] for ix, row in self.bar_data.iterrows()] self.grid_chart.add_js_funcs("var barData = {}".format(bar_data)) self.grid_chart.add( chart=self.kline_chart, grid_index=0, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="10%", height="60%"), ) self.grid_chart.add( chart=grid_graph, grid_index=1, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="75%", height="20%"), ) return self.grid_chart
def test_liquid_grid(fake_writer): l1 = ( Liquid() .add("lq", [0.6, 0.7], center=["60%", "50%"]) .set_global_opts(title_opts=opts.TitleOpts(title="多个 Liquid 显示")) ) l2 = Liquid().add( "lq", [0.3254], center=["25%", "50%"], label_opts=opts.LabelOpts( font_size=50, formatter=JsCode( """function (param) { return (Math.floor(param.value * 10000) / 100) + '%'; }""" ), position="inside", ), ) c = Grid().add(l1, grid_opts=opts.GridOpts()).add(l2, grid_opts=opts.GridOpts()) c.render() _, content = fake_writer.call_args[0] assert_in("center", content)
def grid_graph(self, grid_graph_1=None, grid_graph_2=None): # 创建组合图表画布对象 self.grid_chart = Grid(init_opts=opts.InitOpts( width="1900px", height="900px", chart_id=self.chart_id)) if self.grid_quantity == 0: self.grid_chart.add(chart=self.kline_chart, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="10%", height="85%"), is_control_axis_index=True) return self.grid_chart elif self.grid_quantity == 1: self.grid_chart.add( chart=self.kline_chart, grid_index=0, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="10%", height="60%"), ) self.grid_chart.add( chart=grid_graph_1, grid_index=1, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="75%", height="20%"), ) return self.grid_chart elif self.grid_quantity == 2: self.grid_chart.add( chart=self.kline_chart, grid_index=0, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="10%", height="40%"), ) self.grid_chart.add( chart=grid_graph_1, grid_index=1, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="55%", height="17.5%"), ) self.grid_chart.add( chart=grid_graph_2, grid_index=2, grid_opts=opts.GridOpts(pos_left="5%", pos_right="5%", pos_top="77.5%", height="17.5%"), ) return self.grid_chart
def grid(self, data=[]): grid = Grid(init_opts=opts.InitOpts(**self.chart_opt)) for d in data: grid.add( d["chart"], grid_opts=opts.GridOpts(**d["setting"]), ) return grid
def test_grid_options(fake_writer): bar = _chart_for_grid() gc = Grid().add( bar, opts.GridOpts(pos_left="5%", pos_right="20%", is_contain_label=True)) gc.render() _, content = fake_writer.call_args[0] assert_in("containLabel", content)
def workarea_salary_chart(df): # 转换类型为浮点型 df.low_salary, df.high_salary = df.low_salary.astype( float), df.high_salary.astype(float) # 分别求各地区平均最高薪资, 平均最低薪资 salary = df.groupby('workarea', as_index=False)[['low_salary', 'high_salary' ]].mean() # 分别求各地区的岗位数量,并降序排列 print(salary) workarea = df.groupby('workarea', as_index=False)['name'].count().sort_values( 'name', ascending=False) print(workarea) workarea = pd.merge(workarea, salary, how='left', on='workarea') # 合并数据表 print(workarea) workarea = workarea.head(20) # 用前20名进行绘图 grid = Grid() bar = Bar() grid.theme = themes line = Line() line1 = Line() bar.add_xaxis(workarea.workarea.tolist()) bar.add_yaxis("岗位需求量", workarea.name.tolist()) bar.set_global_opts( title_opts=opts.TitleOpts( title="岗位需求量排名前20地区的平均薪资水平状况", title_link='./chart/workarea_salary_chart.html', title_target='blank', pos_left='left', ), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross", is_show=True), # 交叉指向工具 legend_opts=opts.LegendOpts(pos_left="80%", orient="vertical", pos_top="3%"), ) # bar.set_series_opts(is_show=True, position='rightTop') print((workarea.name).tolist()) print((round(workarea.high_salary * 1000)).tolist()) # 在bar上增加Y轴,在line图上选择对应的轴向 line.add_xaxis(workarea.workarea.tolist()) line.add_yaxis("平均最高薪资", (round(workarea.high_salary * 1000)).tolist(), yaxis_index=0) line1.add_xaxis(workarea.workarea.tolist()) line1.add_yaxis("平均最低薪资", (round(workarea.low_salary * 1000)).tolist(), yaxis_index=0) # 把line添加到bar上 bar.overlap(line) bar.overlap(line1) # 这里如果不需要grid也可以,直接设置bar的格式,然后显示bar即可 #bar.render_notebook() grid.add(chart=bar, grid_opts=opts.GridOpts(), is_control_axis_index=True) # grid.render("./chart/workarea_salary_chart.html") return grid
def to_single_html(self): if len(self.charts) == 0: self.generate_views() page = Page() self.page = Page() for chart in self.charts: grid = Grid() grid.add(chart, grid_opts=opts.GridOpts(pos_bottom='20%', pos_top='20%')) self.page.add(grid) self.page.render(self.charts_dir + self.name + '.html')
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 weak_user(title): all_day = parse_day(7) x_data = [str(i.day) + '日' for i in all_day] y_data = [get_long(i) for i in all_day] bar = (Bar(init_opts=opts.InitOpts( theme=ThemeType.DARK, width="1400px", height='1000px')).add_xaxis(x_data).add_yaxis( "增长用户", [i[1] for i in y_data], yaxis_index=0, color="#d14a61", ).extend_axis(yaxis=opts.AxisOpts( type_="value", name="活跃用户", min_=0, max_=max([i[0] for i in y_data]), position="left", axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts( color="#675bba")), axislabel_opts=opts.LabelOpts(formatter="{value} 人"), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)), )).set_global_opts( yaxis_opts=opts.AxisOpts( name="增长用户", type_="value", min_=0, max_=max([i[1] for i in y_data]), position="right", offset=80, axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#5793f3")), axislabel_opts=opts.LabelOpts(formatter="{value} 人"), ), title_opts=opts.TitleOpts(title=title), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), )) line = (Line(init_opts=opts.InitOpts( theme=ThemeType.DARK, width="1400px", height='1000px')).add_xaxis( x_data).add_yaxis( "活跃用户", [i[0] for i in y_data], yaxis_index=1, color="#675bba", label_opts=opts.LabelOpts(is_show=False), )) bar.overlap(line) grid = Grid(init_opts=opts.InitOpts( theme=ThemeType.DARK, width="1400px", height='1000px')) grid.add(bar, opts.GridOpts(), is_control_axis_index=True) return grid
def bolling_backtest_grid_chart(df): """完整布林线回测图,传入的 df 需要有 open high low close volume upper median lower signal equity_curve 即可绘制 """ # 布林线的 OHLC 图 kline_chart = bolling_kline_chart(df, 3) # 这里要控制3个轴同时缩放 # Volume volume_chart = volume_bar_chart(df) # 资金曲线 equity_chart = equity_line_chart(df) # 组合起来 grid_chart = Grid(init_opts=opts.InitOpts( width="1000px", height="800px", bg_color="#ffffff", animation_opts=opts.AnimationOpts(animation=False), )) grid_chart.add( kline_chart, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="40%"), ) grid_chart.add( volume_chart, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="55%", height="10%"), ) grid_chart.add( equity_chart, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="75%", height="10%"), ) return grid_chart
def draw(self, symbol, fn_render): fn = get_dss() +'fut/bar/day_' + symbol + '.csv' df = pd.read_csv(fn) df1 = df.loc[:,['date','time','close']] n = 30 close_list = df.apply(lambda record: float(record['close']), axis=1).tolist() close_list = np.array(close_list) ma_arr = talib.SMA(close_list, n) df['ma'] = ma_arr df['close'] = df['close'] - df['ma'] df2 = df.loc[:,['date','time','close']] line1 = self.gen_line_one(df1, symbol) line2 = self.gen_line_two(df2) grid_chart = Grid( init_opts=opts.InitOpts( width="1300px", height="700px", #animation_opts=opts.AnimationOpts(animation=False), ) ) grid_chart.add( line1, grid_opts=opts.GridOpts(pos_left="5%", pos_right="3%", height="39%"), ) grid_chart.add( line2, grid_opts=opts.GridOpts( pos_left="5%", pos_right="3%", pos_top="53%", height="39%" ), ) grid_chart.render(fn_render)
def draw_charts(fn1, fn2): df1 = pd.read_csv(fn1) df1['datetime'] = df1['date'] + ' ' + df1['time'] #print(df1.head()) kline1 = gen_kline_one(df1) df2 = pd.read_csv(fn2) df2['datetime'] = df2['date'] + ' ' + df2['time'] #print(df1.head()) kline2 = gen_kline_two(df2) grid_chart = Grid( init_opts=opts.InitOpts( width="1300px", height="700px", #animation_opts=opts.AnimationOpts(animation=False), ) ) grid_chart.add( kline1, grid_opts=opts.GridOpts(pos_left="5%", pos_right="3%", height="39%"), ) grid_chart.add( kline2, grid_opts=opts.GridOpts( pos_left="3%", pos_right="5%", pos_top="53%", height="39%" ), ) fn = get_dss( ) + 'backtest/render/bar2.html' grid_chart.render(fn)
def draw_charts(): vtSymbol = 'CF005' fn = get_dss() + 'fut/bar/min5_' + vtSymbol + '.csv' df1 = pd.read_csv(fn) df1 = df1[df1.date >= '2019-11-20'] df1['datetime'] = df1['date'] + ' ' + df1['time'] # print(df1.head()) fn = get_dss() + 'fut/engine/rsiboll/signal_rsiboll_duo_deal_CF.csv' df2 = pd.read_csv(fn) kline = gen_kline(df1) line_rsi = gen_rsi(df1) line_atr = gen_atr(df1) scatter_deal_one = gen_poit_one(df2) scatter_deal_two = gen_poit_two(df2) scatter_deal_three = gen_poit_three(df2) kline_scatter = kline.overlap(scatter_deal_one) kline_scatter = kline_scatter.overlap(scatter_deal_two) kline_scatter = kline_scatter.overlap(scatter_deal_three) grid_chart = Grid(init_opts=opts.InitOpts( width="1000px", height="700px", animation_opts=opts.AnimationOpts(animation=False), )) grid_chart.add( kline_scatter, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="45%"), ) grid_chart.add( line_rsi, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="57%", height="17%"), ) grid_chart.add( line_atr, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="76%", height="17%"), ) grid_chart.render("k_deal_rsi_atr.html")
def draw(self, symbol, fn_render): fn = get_dss() + 'fut/bar/day_' + symbol + '.csv' df1 = pd.read_csv(fn) # print(df1.head()) price_min = int(df1.close.min() * 0.99) price_max = df1.close.max() kline = self.gen_kline(df1, symbol) line_cci = self.gen_cci(df1, 100) grid_chart = Grid(init_opts=opts.InitOpts( width="1390px", height="700px", animation_opts=opts.AnimationOpts(animation=False), )) grid_chart.add( kline, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="60%"), ) grid_chart.add( line_cci, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="75%", height="17%"), ) grid_chart.render(fn_render)
def overlap_line_scatter(day_data, week_data) -> Bar: # 处理日数据 x_day = list(day_data[16:-7].index) for i in range(0, len(x_day)): x_day[i] = datetime.datetime.strftime(x_day[i], "%H:%M") Y_day = list(day_data[16:-7]) for i in range(0, len(Y_day)): Y_day[i] = round(Y_day[i]) # 处理周数据 print(week_data) x_week = list(week_data.index) Y_week = list(week_data['counts']) print(Y_week) bar = (Bar().add_xaxis(x_day).add_yaxis( "未来一天", Y_day).set_global_opts(title_opts=opts.TitleOpts(title="咨询量预测统计"))) line = (Line().add_xaxis(x_week).add_yaxis( "未来一周", Y_week, symbol="triangle", symbol_size=20).set_global_opts( legend_opts=opts.LegendOpts(pos_top="48%"))) grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).add( line, grid_opts=opts.GridOpts(pos_top="60%"))) return grid
def overlap_line_scatter(day_data) -> Bar: # 处理日数据 x_day = list(day_data[16:-7].index) for i in range(0, len(x_day)): x_day[i] = datetime.datetime.strftime(x_day[i], "%H:%M") Y_day = list(day_data[16:-7]) for i in range(0, len(Y_day)): Y_day[i] = round(Y_day[i]) # 处理周数据 # print(week_data) # x_week = list(week_data.index) # Y_week = list(week_data['counts']) # print(Y_week) bar = ( Bar().add_xaxis(x_day).add_yaxis("未来一天", Y_day) # .set_global_opts(title_opts=opts.TitleOpts(title="“及时倾听”半点客户量预测")) # .set_series_opts(width=900,height=200) ) # line = ( # Line() # .add_xaxis(x_week) # .add_yaxis("未来一周", Y_week, symbol="triangle", symbol_size=20) # .set_global_opts(legend_opts=opts.LegendOpts(pos_top="48%")) # ) grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="5%"))) return grid
def index_bar_every_4(): df2 = pd.read_csv(r'./static/data/house_price.csv') df = pd.read_csv(r'./static/data/divorce.csv') bar = (Bar().add_xaxis(df.province.values.tolist()).add_yaxis( "离婚年均增长率", df.dir.values.tolist()).set_global_opts( title_opts=opts.TitleOpts(title="中国分省离婚年均增长率情况"), xaxis_opts=opts.AxisOpts(name_rotate=60, name="省份", axislabel_opts={"rotate": 45}))) line = (Line().add_xaxis(df2.province.values.tolist()).add_yaxis( "房价年均增长率", df2.increase.values.tolist()).set_global_opts( title_opts=opts.TitleOpts(title="中国分省住宅商品房价格年均增长率情况", pos_top="48%"), legend_opts=opts.LegendOpts(pos_top="48%"), xaxis_opts=opts.AxisOpts(name_rotate=60, name="省份", axislabel_opts={"rotate": 45}))) grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).add( line, grid_opts=opts.GridOpts(pos_top="60%"))) return render_template('index.html', myechart=grid.render_embed(), text1='''离婚年均增长率相对较低的省份:北京、上海、新疆、黑龙江、吉林、内蒙古; 但其实,北京、上海的房价年均增长率是非常高的,且新疆、黑龙江这些省份的房价年均增长率也是处于中游水平; 可以很明显地从整个图中看出,离婚年均增长率和房价年均增长率之间的关联性不大。''')
def index_bar_every_1_tp(): ted = pd.read_csv("./static/data/ted_main.csv") ted['film_date'] = ted['film_date'].apply( lambda x: datetime.datetime.fromtimestamp(int(x)).strftime('%d-%m-%Y')) ted['published_date'] = ted['published_date'].apply( lambda x: datetime.datetime.fromtimestamp(int(x)).strftime('%d-%m-%Y')) views_ted = ted[[ 'main_speaker', 'title', 'published_date', 'views', 'comments', 'tags', 'speaker_occupation', 'num_speaker' ]].sort_values(by='views', ascending=False) views_ted_1 = ted[[ 'main_speaker', 'title', 'published_date', 'views', 'comments', 'tags', 'speaker_occupation', 'num_speaker' ]].sort_values(by='comments', ascending=False) bar = (Bar().add_xaxis( views_ted.head(10).main_speaker.values.tolist()).add_yaxis( "top10", views_ted.head(10).views.values.tolist()).set_global_opts( title_opts=opts.TitleOpts( title="浏览量和评论数TOP10视频")).set_series_opts( label_opts=opts.LabelOpts(is_show=True), )) bar1 = (Bar().add_xaxis( views_ted_1.head(10).main_speaker.values.tolist()).add_yaxis( "top10", views_ted_1.head(10).comments.values.tolist()).set_global_opts( title_opts=opts.TitleOpts( title="浏览量和评论数TOP10视频")).set_series_opts( label_opts=opts.LabelOpts(is_show=True), )) grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).add( bar1, grid_opts=opts.GridOpts(pos_top="60%"))) return render_template('index.html', myechart=grid.render_embed(), select=list(res.keys()))
def grid_chart(dataframe) -> Grid: grid = ( Grid(init_opts=opts.InitOpts( width="1200px", height="800px", #设置动画 animation_opts=opts.AnimationOpts(animation_delay=1000, animation_easing="elasticOut"), )).add( line_datazoom_CO2(dataframe), # 图表实例,仅 `Chart` 类或者其子类 # grid 组件离容器右侧的距离。 # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。 grid_opts=opts.GridOpts(pos_top="4%", height="24%")). add( line_datazoom_temp(dataframe), # 图表实例,仅 `Chart` 类或者其子类 # grid 组件离容器右侧的距离。 # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。 grid_opts=opts.GridOpts(pos_bottom="39%", height="24%") ).add( bar_datazoom_rh(dataframe), # 图表实例,仅 `Chart` 类或者其子类 # grid 组件离容器右侧的距离。 # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。 grid_opts=opts.GridOpts(pos_bottom="6%", height="24%")).dump_options_with_quotes()) return grid
def get_chart_of_date(date): # 一个只标注出对应年份,其他是空字符串的list date_mark = [0] * len(date_list) date_mark[date_list.index(date)] = dayly_count_list[date_list.index(date)] # print(date_mark) line_chart = (Line().add_xaxis(date_list).add_yaxis( "", dayly_count_list, linestyle_opts=opts.LineStyleOpts(width=3)).add_yaxis( "", date_mark, markpoint_opts=opts.MarkPointOpts( data=[opts.MarkPointItem(type_='max')])).set_series_opts( label_opts=opts.LabelOpts(is_show=False)).set_global_opts( title_opts=opts.TitleOpts( title='2017年海口市5至10月正常天气滴滴每日出行总量', pos_top='50%'))) bar_chart = (Bar().add_xaxis(xaxis_data=hour_24_list).add_yaxis( series_name='', yaxis_data=hourly_count_list[date_list.index(date)], label_opts=opts.LabelOpts(is_show=True, position='top', formatter='{c}'), ).set_global_opts( xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=True)), yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=True)), title_opts=opts.TitleOpts(title=date + '各时段出行量 天气:' + weather_list[date_list.index(date)] + ', ' + weekday_list[date_list.index(date)]))) grid = (Grid().add(bar_chart, grid_opts=opts.GridOpts(pos_bottom="60%")).add( line_chart, grid_opts=opts.GridOpts(pos_top="60%"))) return grid
def index_bar_every_X(): ted = pd.read_csv("./static/data/ted_main.csv") ted['film_date'] = ted['film_date'].apply( lambda x: datetime.datetime.fromtimestamp(int(x)).strftime('%d-%m-%Y')) ted['published_date'] = ted['published_date'].apply( lambda x: datetime.datetime.fromtimestamp(int(x)).strftime('%d-%m-%Y')) month_order = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] # day_order = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] ted['month'] = ted['film_date'].apply( lambda x: month_order[int(x.split('-')[1]) - 1]) month_df = pd.DataFrame(ted['month'].value_counts()).reset_index() month_df.columns = ['month', 'talk_times'] ted['years'] = ted['published_date'].apply(lambda x: x.split('-')[2]) year_df = pd.DataFrame(ted['years'].value_counts().reset_index()) year_df.columns = ['years', 'times'] bar = (Bar().add_xaxis(month_df.month.values.tolist()).add_yaxis( "", month_df.talk_times.values.tolist()).set_global_opts( title_opts=opts.TitleOpts()).set_series_opts( label_opts=opts.LabelOpts(is_show=True), )) bar1 = (Line().add_xaxis(year_df.years.values.tolist()[::-1]).add_yaxis( "", year_df.times.values.tolist()[::-1]).set_global_opts( title_opts=opts.TitleOpts()).set_series_opts( label_opts=opts.LabelOpts(is_show=True), )) grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).add( bar1, grid_opts=opts.GridOpts(pos_top="60%"))) return render_template('index.html', myechart=grid.render_embed(), select=list(res.keys()))
def get_date_chart(date: str): grid_chart = ( Grid() .add( get_provinces_daily_bar_chart(date), grid_opts=opts.GridOpts( pos_left="10", pos_right="45%", pos_top="50%", pos_bottom="5" ), ) .add( get_China_sum_line_chart(date), grid_opts=opts.GridOpts( pos_left="65%", pos_right="80", pos_top="5%", pos_bottom="65%" ), ) .add( get_provinces_daily_pie_chart(date), grid_opts=opts.GridOpts( pos_left="45%", pos_top="65%" ) ) .add( get_provinces_daily_map_chart(date), grid_opts=opts.GridOpts( pos_left='10' ) ) ) return grid_chart
def create_grid_bar_and_bar(title, x_list, data_list, data_list_2, data_unit_list): # 1.先生成上方的柱状图 bar1 = Bar() bar1.add_xaxis(x_list) for key in data_list.keys(): bar1.add_yaxis(key, data_list[key]) bar1.set_global_opts(title_opts=opts.TitleOpts(title=title), legend_opts=opts.LegendOpts(pos_left="25%", pos_top="5%"), yaxis_opts=opts.AxisOpts(name="单位:" + data_unit_list[0] , is_scale=True)) # 2.下方柱状图 bar2 = Bar() bar2.add_xaxis(x_list) for key in data_list_2.keys(): bar2.add_yaxis(key, data_list_2[key]) bar2.set_global_opts(title_opts=opts.TitleOpts(title=title), legend_opts=opts.LegendOpts(pos_left="25%", pos_top="55%"), yaxis_opts=opts.AxisOpts(name="单位:" + data_unit_list[1], is_scale=True)) # 3.生成最终的组合图 c = ( Grid(init_opts=opts.InitOpts(theme=THEME_TYPE,height="700px")) .add(bar1, grid_opts=opts.GridOpts(pos_bottom="60%")) .add(bar2, grid_opts=opts.GridOpts(pos_top="60%")) ) src_path = "./指标-年度-图片生成/" html_file_name = src_path + title + ".html" img_file_name = src_path + title + ".png" make_snapshot(snapshot, c.render(html_file_name), img_file_name) print(img_file_name+"生成完毕...")
def grid_mutil_yaxis() -> Grid: x_data = ["{}月".format(i) for i in range(1, 13)] bar = (Bar().add_xaxis(x_data).add_yaxis( "蒸发量", [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], yaxis_index=0, color="#d14a61", ).add_yaxis( "降水量", [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], yaxis_index=1, color="#5793f3", ).extend_axis(yaxis=opts.AxisOpts( name="蒸发量", type_="value", min_=0, max_=250, position="right", axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts( color="#d14a61")), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), )).extend_axis(yaxis=opts.AxisOpts( type_="value", name="温度", min_=0, max_=25, position="left", axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts( color="#675bba")), axislabel_opts=opts.LabelOpts(formatter="{value} °C"), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)), )).set_global_opts( yaxis_opts=opts.AxisOpts( name="降水量", min_=0, max_=250, position="right", offset=80, axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts( color="#5793f3")), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ), title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), )) line = (Line().add_xaxis(x_data).add_yaxis( "平均温度", [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2], yaxis_index=2, color="#675bba", label_opts=opts.LabelOpts(is_show=False), )) bar.overlap(line) return Grid().add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
def grid_liquid_favorate_rate() -> Grid: l1 = (Liquid().add( "好评率", [favorate_rate], center=["60%", "50%"], label_opts=opts.LabelOpts( font_size=50, formatter=JsCode("""function (param) { return (Math.floor(param.value * 10000) / 100) + '%'; }"""), position="inside", ), ).set_global_opts(title_opts=opts.TitleOpts(title="好评率和差评率"))) l2 = (Liquid().add( "差评率", [poor_rate], center=["25%", "50%"], label_opts=opts.LabelOpts( font_size=50, formatter=JsCode("""function (param) { return (Math.floor(param.value * 10000) / 100) + '%'; }"""), position="inside", ), )) grid = Grid().add(l2, grid_opts=opts.GridOpts()).add(l1, grid_opts=opts.GridOpts()) return grid
def grid_vertical(): bar = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar")) ) line = ( Line() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts( title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"), legend_opts=opts.LegendOpts(pos_top="48%"), ) ) grid = ( Grid() .add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")) .add(line, grid_opts=opts.GridOpts(pos_top="60%")) ) return grid
def grid_horizontal(): scatter = ( Scatter() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts( toolbox_opts=opts.ToolboxOpts(is_show=True), title_opts=opts.TitleOpts(title="Grid-Scatter"), legend_opts=opts.LegendOpts(pos_left="20%"), ) ) line = ( Line() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts( toolbox_opts=opts.ToolboxOpts(is_show=True), title_opts=opts.TitleOpts(title="Grid-Line", pos_right="5%"), legend_opts=opts.LegendOpts(pos_right="20%"), ) ) grid = ( Grid() .add(scatter, grid_opts=opts.GridOpts(pos_left="55%")) .add(line, grid_opts=opts.GridOpts(pos_right="55%"))) return grid
def test_grid_control_axis_index(): bar = _chart_for_grid() gc = Grid().add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True) expected_idx = (0, 1, 2) for idx, series in enumerate(gc.options.get("series")): assert_equal(series.get("yAxisIndex"), expected_idx[idx])
def draw_charts(): pz = 'CF' vtSymbol = 'CF' fn = get_dss() + 'backtest/fut/' + pz + '/day_' + vtSymbol + '.csv' df1 = pd.read_csv(fn) # df1 = df1[df1.date >= '2019-01-20'] #df1['datetime'] = df1['date'] + ' ' + df1['time'] df1['datetime'] = df1['date'] price_min = int(df1.close.min() * 0.99) price_max = df1.close.max() #fn = get_dss( )+ 'fut/engine/aberration_raw/signal_aberration_raw_duo_deal_CF.csv' #fn = get_dss( )+ 'fut/engine/aberration_raw/signal_aberration_raw_kong_deal_CF.csv' fn = get_dss( ) + 'fut/engine/aberration_enhance/signal_aberration_enhance_duo_deal_CF.csv' #fn = get_dss( )+ 'fut/engine/aberration_enhance/signal_aberration_enhance_kong_deal_CF.csv' df2 = pd.read_csv(fn) dt_list = df2['datetime'].tolist() dt_list = [dt[:10] for dt in dt_list] # print(dt_list) df2['datetime'] = dt_list line = gen_line(df1, vtSymbol, price_min, price_max) line_atr = gen_atr(df1, 10) line_boll = gen_boll(df1, 10, 2) line = line.overlap(line_boll) scatter_open = gen_poit_open(df2) scatter_close = gen_poit_close(df2) line = line.overlap(scatter_open) line = line.overlap(scatter_close) grid_chart = Grid(init_opts=opts.InitOpts( width="1300px", height="700px", animation_opts=opts.AnimationOpts(animation=False), )) grid_chart.add( line, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="60%"), ) grid_chart.add( line_atr, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="76%", height="17%"), ) fn = get_dss() + 'backtest/render/k_deal_aberration_' + vtSymbol + '.html' grid_chart.render(fn)
def show_score_top(): # 查找上映年份集合 showtime = select_showtime() # 生成时间轴的图 timeline = Timeline( init_opts=opts.InitOpts(page_title="豆瓣电影TOP250-评分TOP10的电影", )) for year in showtime: film_tuple = select_film(year) date_list = select_data(year) timeline.add_schema(is_auto_play=True, play_interval=1000) # 柱状图初始化 bar = Bar() # 横坐标 bar.add_xaxis(film_tuple[0]) # 纵坐标 bar.add_yaxis( "", date_list, # 数据靠右显示 label_opts=opts.LabelOpts(is_show=True, position='right')) # 横纵坐标翻转 bar.reversal_axis() # 全局配置 bar.set_global_opts( # 标题 title_opts=opts.TitleOpts( title="豆瓣电影TOP250-第{}年评分TOP10的电影".format(year), pos_left='center'), # 横坐标隐藏 xaxis_opts=opts.AxisOpts(is_show=False, max_=select_film(year)[2], min_=(float(select_film(year)[3]) - 0.1), split_number=10), # 纵坐标 yaxis_opts=opts.AxisOpts( max_=9, # 字体大小 axislabel_opts=opts.LabelOpts(font_size=10), # 隐藏坐标轴 axisline_opts=opts.AxisLineOpts(is_show=False), # 隐藏刻度 axistick_opts=opts.AxisTickOpts(is_show=False))) # 组合组件 grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_top='8%', pos_bottom='12%', pos_left='25%'))) timeline.add(grid, "{}年".format(year)) timeline.add_schema(is_auto_play=True, play_interval=1000, is_loop_play=False, width='820px', pos_left='60px') # 生成HTML html = "pages/iframes/score_top.html" timeline.render("./templates/" + html) return html