def base_kline_grid_chart(df, signal_infos=[]): """ 最最最基础的 K 线图,传入的 df 只需要有 open high low close volume 即可绘制 """ # OHLC kline_chart = ohlc_kline_chart(df, signal_infos=signal_infos) # Volume volume_chart = volume_bar_chart(df) # 把 ohlc 和 volume 图组合起来 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="55%"), ) grid_chart.add( volume_chart, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="70%", height="15%"), ) return grid_chart
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 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 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 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 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_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 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 pie_base() -> 'html': df = pd.read_csv('data3.csv', encoding='utf8') bar = ( Bar() .add_xaxis(['不限', '3-5年', '1-3年', '5-10年', '无经验', '一年以下', '10年以上']) .add_yaxis("职位数量", [6183, 5164, 4842, 1516, 366, 111, 34]) .set_global_opts(title_opts=opts.TitleOpts(title="工作经验-职位分布数量")) ) line = ( Line() .add_xaxis(['本科', '大专', '不限', '硕士', '博士', '中专']) .add_yaxis("职位数量", [9954, 3704, 3205, 1137, 88, 31]) .set_global_opts( title_opts=opts.TitleOpts(title="最低要求学历-职位分布数量", pos_top="50%"), legend_opts=opts.LegendOpts(pos_top="50%"), ) ) grid = ( Grid() .add(bar, grid_opts=opts.GridOpts(pos_bottom="60%", pos_right="0", height="30%")) .add(line, grid_opts=opts.GridOpts(pos_top="60%", pos_right="0", height="30%")) ) bar,line,grid.render("./templates/pie_base.html") with open("./templates/pie_base.html", encoding="utf8", mode="r") as f: pie_base = "".join(f.readlines()) return render_template('python_pie_base.html', the_pie_base=pie_base, )
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_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 create_result_chart(data): instrulist = list(set(d.instrument for d in data)) # x = ["{} P{}".format(localtime(d.upload_time).strftime("%Y-%m-%d %X"), d.platenum) for d in data] x = ["{} P{}".format(d.upload_time.strftime("%Y-%m-%d %X"), d.platenum) for d in data] # 均值直方图 b = Bar(init_opts=opts.InitOpts(width='1900px')) b.add_xaxis(x) for instru in instrulist: mean = get_mean(data, instru) b.add_yaxis(instru, mean) b.set_global_opts(title_opts=opts.TitleOpts(title="结果mean图")) # sd折线图 l = Line(init_opts=opts.InitOpts(width='1900px')) l.add_xaxis(x) for instru in instrulist: sd = get_sd(data, instru) l.add_yaxis(instru, sd, is_connect_nones=True) l.set_global_opts(title_opts=opts.TitleOpts(title="结果sd图", pos_top='48%')) grid = Grid(init_opts=opts.InitOpts(width='1900px')) grid.add(b, grid_opts=opts.GridOpts(pos_bottom='60%')) grid.add(l, grid_opts=opts.GridOpts(pos_top='60%')) return grid
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_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 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 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 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 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 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 grid(factor, factor2, instrument): gridchart = Grid(init_opts=opts.InitOpts(width="100vw", height="50vh", animation_opts=opts.AnimationOpts( animation=True))) gridchart.add( #左边画最新数据 getplot(factor, factor2, kdata_part, nnv, new_p, instrument, xaxis_index=[0, 1]), grid_opts=opts.GridOpts(pos_left="5%", pos_right="68%")) gridchart.add( # 右边画全样本数据 getplot(factor, factor2, kdata_all, nv, new_a, instrument, xaxis_index=None), grid_opts=opts.GridOpts(pos_left="40%", pos_right="5%")) return gridchart
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 get_year_chart(time,data): map_chart=get_Map(time,data) bar_chart=get_Bar(time,data) g=( Grid(init_opts=opts.InitOpts(width='1440px',height='600px')) .add(bar_chart,grid_opts=opts.GridOpts(pos_left="10", pos_right="45%", pos_top="50%", pos_bottom="10")) .add(map_chart,grid_opts=opts.GridOpts()) ) return g
def grid_like(data,user_id): bar = draw_bar_like(data, user_id) pie = draw_pie_like(data, user_id) grid = ( Grid(init_opts=opts.InitOpts(width="1400px",height="500px")) .add(bar, grid_opts=opts.GridOpts(pos_left="55%")) .add(pie, grid_opts=opts.GridOpts(pos_right="55%")) ) return grid
def draw(): # 饼图 pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add( "疫情接口可视化", pageData).set_colors([ "blue", "green", "yellow", "red", "pink", "orange", "purple" ]).set_global_opts( visualmap_opts=opts.VisualMapOpts(is_show=True, min_=0, max_=2000)) ) map = (Map(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add( "疫情接口可视化", pageData, "china").set_global_opts( visualmap_opts=opts.VisualMapOpts(is_show=True, min_=0, max_=2000)) ) bar = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) # 只取省份 .add_xaxis([item[0] for item in pageData]) # 只取人数 .add_yaxis(series_name="", y_axis=[item[1] for item in pageData]) # 设置全局配置项 .set_global_opts( # 设置视觉配置项 visualmap_opts=opts.VisualMapOpts( is_show=True, min_=0, max_=10000, dimension=0, # 翻转坐标之后,视觉映射不生效可以添加dimension=0 # pos_right=10, # pos_top=0 ), # x坐标轴默认标注去除 xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts( is_show=True)), # y坐标轴默认标注去除 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts( is_show=True))) # 去除柱状图上的数字标注 .set_series_opts(label_opts=opts.LabelOpts( is_show=False)).reversal_axis() # x轴y轴 ) # grid = ( # # 初始化配置项,参考 `global_options.InitOpts` # Grid(init_opts=opts.InitOpts(theme=ThemeType.DARK)) # .add(pie, grid_opts=opts.GridOpts()) # .add(map, grid_opts=opts.GridOpts()) # .add(bar, grid_opts=opts.GridOpts()) # .render("疫情接口数据组合图形.html") # ) # 组合图形 grid = ( Grid(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add( bar, grid_opts=opts.GridOpts()) # 柱状图放在组合图形的第一个 .add(map, grid_opts=opts.GridOpts()).add( pie, grid_opts=opts.GridOpts()).render("全国疫情数据可视化组合图形展示.html"))
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 get_line_charts(): line_chart_1 = ( Line(init_opts=opts.InitOpts(width='500px', height='250px')) .add_xaxis(time_list) .add_yaxis(series_name="迁出指数", y_axis=hubei_out_data, # symbol="emptyCircle", is_symbol_show=True, is_smooth=True, ) .add_yaxis(series_name="迁入指数", y_axis=hubei_in_data, # symbol="emptyCircle", is_symbol_show=True, is_smooth=True, ) .set_global_opts( title_opts=opts.TitleOpts(title='01-01至03-10湖北省迁徙指数', pos_left='72%', pos_top='15%'), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type='shadow'), legend_opts=opts.LegendOpts(is_show=True ,orient='horizontal', pos_left='75%', pos_top='20%'), yaxis_opts=opts.AxisOpts( name='迁徙指数', type_='value', axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ) ) .set_series_opts(label_opts=opts.LabelOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=True)) ) wordcloud = ( WordCloud() .add(series_name="城市", data_pair=get_out_cities(), word_size_range=[10, 66], pos_left='-8%', pos_top='10%', shape='triangle-forward') .set_global_opts( title_opts=opts.TitleOpts( title="1-21湖北省迁出热门城市", pos_left='20%', pos_top='15%' ), tooltip_opts=opts.TooltipOpts(is_show=True), ) ) grid_chart = ( Grid(init_opts=opts.InitOpts(width='1500px', height='700px')) .add( line_chart_1, grid_opts=opts.GridOpts( pos_left='65%', pos_right='80', pos_top='30%', pos_bottom='30%' ) ) .add(wordcloud, grid_opts=opts.GridOpts(pos_left="20%", pos_top="10%")) ) return grid_chart
def plot_grid(): """ 使用Grid来绘制组合图 子图的宽高是自适应画板(Grid)的宽高 子图的位置用grid_opts中pos选项来调节: 当两个子图为pos_left与pos_right时,此时为左右排列 当两个子图为pos_top与pos_bottom时,此时为上下排列 :return: html """ # 1.首先绘制一个柱状图 # 初始化数据来源 x = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋"] y1 = [5, 20, 36, 10, 75] y2 = [10, 25, 8, 60, 20] # 初始化柱状图 bar = Bar(init_opts=opts.InitOpts(width='200px', height='100px')) # x轴数据 bar.add_xaxis(xaxis_data=x) # y轴数据 bar.add_yaxis(series_name="商家A", y_axis=y1) bar.add_yaxis(series_name="商家B", y_axis=y2) # 设置配置 bar.set_global_opts(title_opts=opts.TitleOpts(title='柱状图:商家货物销量')) # 2.绘制一个折线图 # 初始化数据来源 x = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋"] y1 = [5, 20, 36, 10, 75] y2 = [10, 25, 8, 60, 20] # 初始化折线图 line = Line(init_opts=opts.InitOpts(width="100px", height="100px")) # x轴数据 line.add_xaxis(xaxis_data=x) # y轴数据 line.add_yaxis(series_name='商家A', y_axis=y1) line.add_yaxis(series_name='商家B', y_axis=y2) # 设置配置 line.set_global_opts( title_opts=opts.TitleOpts(title='折线图:商家货物销量', pos_top='50%')) # 初始化组合图:Grid grid = Grid(init_opts=opts.InitOpts(width='600px', height='400px')) # 利用grid_bottom,grid_top,grid_left,grid_right四个参数控制子图的相对位置 grid.add(bar, grid_opts=opts.GridOpts(pos_right='60%')) grid.add(line, grid_opts=opts.GridOpts(pos_left='60%')) grid.render('组合图Grid示范图.html')
def draw_charts(): # #fn = get_dss() +'backtest/fut/m/' + 'm_01_05.csv' # fn = get_dss() +'backtest/fut/m/' + 'day_m.csv' # df1 = pd.read_csv(fn) # df1['datetime'] = df1['date'] + ' ' + df1['time'] # #print(df1.head()) # kline1 = gen_kline_one(df1) # # fn = get_dss() +'backtest/fut/y/' + 'day_y.csv' # df2 = pd.read_csv(fn) # df2['datetime'] = df2['date'] + ' ' + df2['time'] # #print(df1.head()) # kline2 = gen_kline_two(df2) #-------------------------------------------------------------------------- fn = 'bar_kamaresid_raw_duo_CF.csv' fn = 'bar_kamaresid_raw_duo_m.csv' df = pd.read_csv(fn) df.columns = ['date','time','close','q1','q2','resid'] df1 = df.loc[:,['date','time','close']] df2 = df.loc[:,['date','time','resid']] df2['close'] = df2['resid'] print(df1.head(3)) print(df2.head(3)) s1 = 'close' s2 = 'resid' line1 = gen_line_one(df1) line2 = 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%" ), ) fn = get_dss( )+ 'backtest/render/k_k_' + s1 + '_' + s2 + '.html' grid_chart.render(fn)
def ice_ga_shrinkage_chart(df): """ice ga shrinkage""" os_ma = pyecharts_float_values_data(df, 'os_ma', 6) # 信号信息 signal_infos = bolling_signals_data(df) # k 线 ohlc_chart = ohlc_kline_chart(df, x_axis_count=3, signal_infos=signal_infos) # os_ma os_ma_line = Line().add_xaxis( xaxis_data=pyecharts_time_data(df)).add_yaxis( y_axis=os_ma, series_name='os_ma', is_symbol_show=False, label_opts=None, is_smooth=True, ) # 资金曲线 equity_chart = equity_line_chart(df) grid_chart = Grid(init_opts=opts.InitOpts( width="1000px", height="600px", bg_color="#ffffff", animation_opts=opts.AnimationOpts(animation=False), )) grid_chart.add( ohlc_chart, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="5%", height="30%"), ) grid_chart.add( os_ma_line, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="40%", height="20%"), ) grid_chart.add( equity_chart, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="70%", height="18%"), ) return grid_chart
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")