def scatter_render_air(self): c = Scatter() c.add_xaxis(self.x_value) c.add_yaxis( series_name=self.y_name, y_axis=self.inner_data_pair, label_opts=opts.LabelOpts( is_show=self.is_show, formatter=JsCode( "function(params){return params.value[2] +' : '+ params.value[1];}" ))) c.set_global_opts( title_opts=opts.TitleOpts(title=self.title, subtitle=self.subtitle), # tooltip_opts=opts.TooltipOpts( # formatter=JsCode( # "function (params) {return params.name + ' : ' + params.value[2];}" # ) # ), visualmap_opts=opts.VisualMapOpts(type_="color", max_=150, min_=20, dimension=1), legend_opts=opts.LegendOpts(pos_left=self.pos_left, legend_icon=self.legend_icon)) return c
def gen_poit_three(df2): df = df2[df2.offset=='平'] if len(df) > 0: dt_list = list(df['datetime']) price_list = df.apply(lambda record: float(record['price']), axis=1).tolist() price_list = np.array(price_list) else: dt_list = [] price_list = [] c = Scatter() c.add_xaxis(dt_list) c.add_yaxis('', price_list) return c
def gen_poit_close(df2): df = df2[df2.offset=='平'] if len(df) > 0: dt_list = list(df['datetime']) price_list = df.apply(lambda record: float(record['price']), axis=1).tolist() price_list = np.array(price_list) else: dt_list = [] price_list = [] c = Scatter() c.add_xaxis(dt_list) c.add_yaxis('', price_list, label_opts=opts.LabelOpts(position='bottom')) return c
def echarts_scatter(df): # x = df.iloc[:, 0] # y = df.iloc[:, 1] # n = 100 / np.log(df.shape[0]) # 动态散点大小 n = 10 # 静态散点大小 if df.empty is False: scatter = Scatter(init_opts=opts.InitOpts()) for index, row in df.iterrows(): x = int(row[0]) y = int(row[1]) scatter.add_xaxis(xaxis_data=[x]) scatter.add_yaxis( series_name=index, y_axis=[y], symbol_size=n, label_opts=opts.LabelOpts(is_show=False), ) scatter.set_series_opts() scatter.set_global_opts( xaxis_opts=opts.AxisOpts( type_="value", name="销售", splitline_opts=opts.SplitLineOpts(is_show=True), ), yaxis_opts=opts.AxisOpts( name="同比净增长", type_="value", axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), tooltip_opts=opts.TooltipOpts( is_show=True, trigger="item", formatter="{a} <br/>{b}: {c}" ), # toolbox_opts=opts.ToolboxOpts(is_show=True), legend_opts=opts.LegendOpts(is_show=False), ) else: scatter = Scatter() return scatter
def scatter_base() -> Scatter: if len(names) == 0: pass elif len(names) >= 1: c = Scatter() c.add_xaxis(X) c.set_global_opts( toolbox_opts=opts.ToolboxOpts(), title_opts=opts.TitleOpts(title="ScatterChart"), yaxis_opts=opts.AxisOpts(name="Data"), xaxis_opts=opts.AxisOpts(name="Date"), datazoom_opts=[ opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside") ], ) for i in range(0, len(names)): c.add_yaxis(names[i], Y[i]) return c
# 繪製每年與每月作品數量柱狀圖 # show every year and every month counts of anime bar chart x, y = transfer_form(group_year), transfer_form(group_year_count) bar = bar(x, y, '數量(單位:部)', '年份(單位:年)') bar.render() x, y = transfer_form(group_month), transfer_form(group_month_count) bar = bar(x, y, '數量(單位:部)', '月份(單位:月)') bar.render() # 觀察評分與觀看數的關係 # show points-views relation in scatter print(max(df['views']), min(df['views'])) fig = opts.InitOpts(width='1200px', height='600px') scatter = Scatter(init_opts=fig) scatter.add_xaxis(xaxis_data=df['views']) scatter.add_yaxis( series_name='', y_axis=df['score'], # 設計數據值是否展示 label_opts=opts.LabelOpts(is_show=False)) scatter.set_global_opts(title_opts=opts.TitleOpts(title='觀看量-評分關係圖', pos_left='center', pos_top='20'), xaxis_opts=opts.AxisOpts(split_number=25, name='觀看量(單位:萬)'), yaxis_opts=opts.AxisOpts(split_number=20, name='分')) scatter.render() # 動漫每天平均觀看量 # show avg views per day bar char
def kline_pro(kline: List[dict], ma: List[dict], macd: List[dict], fx: List[dict] = None, bi: List[dict] = None, xd: List[dict] = None, bs: List[dict] = None, title: str = "缠中说禅K线分析", width: str = "1200px", height: str = '680px') -> Grid: """绘制缠中说禅K线分析结果 :param kline: K线 :param ma: 均线 :param macd: MACD :param fx: 分型识别结果 :param bi: 笔识别结果 :param xd: 线段识别结果 :param bs: 买卖点 :param title: 图表标题 :param width: 图表宽度 :param height: 图表高度 :return: 用Grid组合好的图表 """ # 配置项设置 # ------------------------------------------------------------------------------------------------------------------ bg_color = "#1f212d" # 背景 up_color = "#F9293E" down_color = "#00aa3b" init_opts = opts.InitOpts(bg_color=bg_color, width=width, height=height, animation_opts=opts.AnimationOpts(False)) title_opts = opts.TitleOpts( title=title, pos_top="1%", title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20), subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color, font_size=12)) label_not_show_opts = opts.LabelOpts(is_show=False) legend_not_show_opts = opts.LegendOpts(is_show=False) red_item_style = opts.ItemStyleOpts(color=up_color) green_item_style = opts.ItemStyleOpts(color=down_color) k_style_opts = opts.ItemStyleOpts(color=up_color, color0=down_color, border_color=up_color, border_color0=down_color, opacity=0.8) legend_opts = opts.LegendOpts(is_show=True, pos_top="1%", pos_left="30%", item_width=14, item_height=8, textstyle_opts=opts.TextStyleOpts( font_size=12, color="#0e99e2")) brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"], x_axis_index="all", brush_link="all", out_of_brush={"colorAlpha": 0.1}, brush_type="lineX") axis_pointer_opts = opts.AxisPointerOpts(is_show=True, link=[{ "xAxisIndex": "all" }]) dz_inside = opts.DataZoomOpts(False, "inside", xaxis_index=[0, 1, 2]) dz_slider = opts.DataZoomOpts(True, "slider", xaxis_index=[0, 1, 2], pos_top="96%", pos_bottom="0%") yaxis_opts = opts.AxisOpts(is_scale=True, axislabel_opts=opts.LabelOpts( color="#c7c7c7", font_size=8, position="inside")) grid0_xaxis_opts = opts.AxisOpts( type_="category", grid_index=0, axislabel_opts=label_not_show_opts, split_number=20, min_="dataMin", max_="dataMax", is_scale=True, boundary_gap=False, axisline_opts=opts.AxisLineOpts(is_on_zero=False)) tool_tip_opts = opts.TooltipOpts( trigger="axis", axis_pointer_type="cross", background_color="rgba(245, 245, 245, 0.8)", border_width=1, border_color="#ccc", position=JsCode(""" function (pos, params, el, elRect, size) { var obj = {top: 10}; obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30; return obj; } """), textstyle_opts=opts.TextStyleOpts(color="#000"), ) # 数据预处理 # ------------------------------------------------------------------------------------------------------------------ dts = [x['dt'] for x in kline] k_data = [[x['open'], x['close'], x['low'], x['high']] for x in kline] vol = [] for row in kline: item_style = red_item_style if row['close'] > row[ 'open'] else green_item_style bar = opts.BarItem(value=row['vol'], itemstyle_opts=item_style, label_opts=label_not_show_opts) vol.append(bar) macd_bar = [] for row in macd: item_style = red_item_style if row['macd'] > 0 else green_item_style bar = opts.BarItem(value=round(row['macd'], 4), itemstyle_opts=item_style, label_opts=label_not_show_opts) macd_bar.append(bar) diff = [round(x['diff'], 4) for x in macd] dea = [round(x['dea'], 4) for x in macd] # K 线主图 # ------------------------------------------------------------------------------------------------------------------ chart_k = Kline() chart_k.add_xaxis(xaxis_data=dts) chart_k.add_yaxis(series_name="Kline", y_axis=k_data, itemstyle_opts=k_style_opts) chart_k.set_global_opts(legend_opts=legend_opts, datazoom_opts=[dz_inside, dz_slider], yaxis_opts=yaxis_opts, tooltip_opts=tool_tip_opts, axispointer_opts=axis_pointer_opts, brush_opts=brush_opts, title_opts=title_opts, xaxis_opts=grid0_xaxis_opts) # 均线图 # ------------------------------------------------------------------------------------------------------------------ chart_ma = Line() chart_ma.add_xaxis(xaxis_data=dts) ma_keys = [x for x in ma[0].keys() if "ma" in x][:3] ma_colors = ["#39afe6", "#da6ee8", "#00940b"] for i, k in enumerate(ma_keys): y_data = [x[k] for x in ma] chart_ma.add_yaxis(series_name=k.upper(), y_axis=y_data, is_smooth=True, is_selected=False, symbol_size=0, label_opts=label_not_show_opts, linestyle_opts=opts.LineStyleOpts( opacity=0.8, width=1.0, color=ma_colors[i])) chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_ma) # 缠论结果 # ------------------------------------------------------------------------------------------------------------------ if fx: fx_dts = [x['dt'] for x in fx] fx_val = [x['fx'] for x in fx] chart_fx = Scatter() chart_fx.add_xaxis(fx_dts) chart_fx.add_yaxis(series_name="FX", y_axis=fx_val, is_selected=False, symbol="circle", symbol_size=6, label_opts=label_not_show_opts, itemstyle_opts=opts.ItemStyleOpts( color="rgba(152, 147, 193, 1.0)", )) chart_fx.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_fx) if bi: bi_dts = [x['dt'] for x in bi] bi_val = [x['bi'] for x in bi] chart_bi = Scatter() chart_bi.add_xaxis(bi_dts) chart_bi.add_yaxis(series_name="BI", y_axis=bi_val, is_selected=True, symbol="diamond", symbol_size=10, label_opts=label_not_show_opts, itemstyle_opts=opts.ItemStyleOpts( color="rgba(184, 117, 225, 1.0)", )) chart_bi.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_bi) if xd: xd_dts = [x['dt'] for x in xd] xd_val = [x['xd'] for x in xd] chart_xd = Scatter() chart_xd.add_xaxis(xd_dts) chart_xd.add_yaxis(series_name="XD", y_axis=xd_val, is_selected=True, symbol="triangle", symbol_size=10, itemstyle_opts=opts.ItemStyleOpts( color="rgba(37, 141, 54, 1.0)", )) chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_xd) if bs: b_dts = [x['dt'] for x in bs if x['mark'] == 'buy'] if len(b_dts) > 0: b_val = [x['buy'] for x in bs if x['mark'] == 'buy'] chart_b = Scatter() chart_b.add_xaxis(b_dts) chart_b.add_yaxis(series_name="BUY", y_axis=b_val, is_selected=False, symbol="arrow", symbol_size=8, itemstyle_opts=opts.ItemStyleOpts( color="#f31e1e", )) chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_b) s_dts = [x['dt'] for x in bs if x['mark'] == 'sell'] if len(s_dts) > 0: s_val = [x['sell'] for x in bs if x['mark'] == 'sell'] chart_s = Scatter() chart_s.add_xaxis(s_dts) chart_s.add_yaxis(series_name="SELL", y_axis=s_val, is_selected=False, symbol="pin", symbol_size=12, itemstyle_opts=opts.ItemStyleOpts( color="#45b97d", )) chart_s.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_s) # 成交量图 # ------------------------------------------------------------------------------------------------------------------ chart_vol = Bar() chart_vol.add_xaxis(dts) chart_vol.add_yaxis(series_name="Volume", y_axis=vol, bar_width='60%') chart_vol.set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=1, axislabel_opts=opts.LabelOpts(is_show=True, font_size=8, color="#9b9da9"), ), yaxis_opts=yaxis_opts, legend_opts=legend_not_show_opts, ) # MACD图 # ------------------------------------------------------------------------------------------------------------------ chart_macd = Bar() chart_macd.add_xaxis(dts) chart_macd.add_yaxis(series_name="MACD", y_axis=macd_bar, bar_width='60%') chart_macd.set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=2, axislabel_opts=opts.LabelOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( grid_index=2, split_number=4, axisline_opts=opts.AxisLineOpts(is_on_zero=False), axistick_opts=opts.AxisTickOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"), ), legend_opts=opts.LegendOpts(is_show=False), ) line = Line() line.add_xaxis(dts) line.add_yaxis(series_name="DIFF", y_axis=diff, label_opts=label_not_show_opts, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#da6ee8")) line.add_yaxis(series_name="DEA", y_axis=dea, label_opts=label_not_show_opts, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#39afe6")) chart_macd = chart_macd.overlap(line) grid0_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="12%", height="58%") grid1_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="74%", height="8%") grid2_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="86%", height="10%") grid_chart = Grid(init_opts) grid_chart.add(chart_k, grid_opts=grid0_opts) grid_chart.add(chart_vol, grid_opts=grid1_opts) grid_chart.add(chart_macd, grid_opts=grid2_opts) return grid_chart
def ka_to_echarts(ka: KlineAnalyze, width="1500px", height='800px'): # 配置项设置 # ------------------------------------------------------------------------------------------------------------------ bg_color = "#1f212d" # 背景 up_color = "#F9293E" down_color = "#00aa3b" init_opts = opts.InitOpts(bg_color=bg_color, width=width, height=height, animation_opts=opts.AnimationOpts(False)) title_opts = opts.TitleOpts(title="{} - {}".format(ka.symbol, ka.name), subtitle="from {} to {}".format(ka.start_dt, ka.end_dt), pos_top="1%", title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20), subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color, font_size=12)) label_not_show_opts = opts.LabelOpts(is_show=False) legend_not_show_opts = opts.LegendOpts(is_show=False) red_item_style = opts.ItemStyleOpts(color=up_color) green_item_style = opts.ItemStyleOpts(color=down_color) k_style_opts = opts.ItemStyleOpts(color=up_color, color0=down_color, border_color=up_color, border_color0=down_color, opacity=0.8) legend_opts = opts.LegendOpts(is_show=True, pos_top="1%", pos_left="30%", item_width=14, item_height=8, textstyle_opts=opts.TextStyleOpts(font_size=12, color="#0e99e2")) brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"], x_axis_index="all", brush_link="all", out_of_brush={"colorAlpha": 0.1}, brush_type="lineX") axis_pointer_opts = opts.AxisPointerOpts(is_show=True, link=[{"xAxisIndex": "all"}]) dz_inside = opts.DataZoomOpts(False, "inside", xaxis_index=[0, 1, 2]) dz_slider = opts.DataZoomOpts(True, "slider", xaxis_index=[0, 1, 2], pos_top="96%", pos_bottom="0%") yaxis_opts = opts.AxisOpts(is_scale=True, axislabel_opts=opts.LabelOpts(color="#c7c7c7", font_size=8, position="inside")) grid0_xaxis_opts = opts.AxisOpts(type_="category", grid_index=0, axislabel_opts=label_not_show_opts, split_number=20, min_="dataMin", max_="dataMax", is_scale=True, boundary_gap=False, axisline_opts=opts.AxisLineOpts(is_on_zero=False)) tool_tip_opts = opts.TooltipOpts( trigger="axis", axis_pointer_type="cross", background_color="rgba(245, 245, 245, 0.8)", border_width=1, border_color="#ccc", position=JsCode(""" function (pos, params, el, elRect, size) { var obj = {top: 10}; obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30; return obj; } """), textstyle_opts=opts.TextStyleOpts(color="#000"), ) # 数据预处理 # ------------------------------------------------------------------------------------------------------------------ dts = [x['dt'] for x in ka.kline_raw] k_data = [[x['open'], x['close'], x['low'], x['high']] for x in ka.kline_raw] ma = ka.ma vol = [] for row in ka.kline_raw: item_style = red_item_style if row['close'] > row['open'] else green_item_style bar = opts.BarItem(value=row['vol'], itemstyle_opts=item_style, label_opts=label_not_show_opts) vol.append(bar) macd = [] for row in ka.macd: item_style = red_item_style if row['macd'] > 0 else green_item_style bar = opts.BarItem(value=round(row['macd'], 4), itemstyle_opts=item_style, label_opts=label_not_show_opts) macd.append(bar) diff = [round(x['diff'], 4) for x in ka.macd] dea = [round(x['dea'], 4) for x in ka.macd] # K 线主图 # ------------------------------------------------------------------------------------------------------------------ chart_k = Kline() chart_k.add_xaxis(xaxis_data=dts) chart_k.add_yaxis(series_name="Kline", y_axis=k_data, itemstyle_opts=k_style_opts) chart_k.set_global_opts( legend_opts=legend_opts, datazoom_opts=[dz_inside, dz_slider], yaxis_opts=yaxis_opts, tooltip_opts=tool_tip_opts, axispointer_opts=axis_pointer_opts, brush_opts=brush_opts, title_opts=title_opts, xaxis_opts=grid0_xaxis_opts ) # 均线图 # ------------------------------------------------------------------------------------------------------------------ chart_ma = Line() chart_ma.add_xaxis(xaxis_data=dts) ma_keys = [x for x in ma[0].keys() if "ma" in x][:3] ma_colors = ["#39afe6", "#da6ee8", "#00940b"] for i, k in enumerate(ma_keys): y_data = [x[k] for x in ma] chart_ma.add_yaxis(series_name=k.upper(), y_axis=y_data, is_smooth=True, is_selected=False, symbol_size=0, label_opts=label_not_show_opts, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color=ma_colors[i])) chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_ma) # 缠论结果 # ------------------------------------------------------------------------------------------------------------------ fx_dts = [x['dt'] for x in ka.fx_list] fx_val = [x['fx'] for x in ka.fx_list] chart_fx = Scatter() chart_fx.add_xaxis(fx_dts) chart_fx.add_yaxis(series_name="FX", y_axis=fx_val, is_selected=False, symbol="circle", symbol_size=6, label_opts=label_not_show_opts, itemstyle_opts=opts.ItemStyleOpts(color="rgba(152, 147, 193, 1.0)",)) chart_fx.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_fx) bi_dts = [x['dt'] for x in ka.bi_list] bi_val = [x['bi'] for x in ka.bi_list] chart_bi = Scatter() chart_bi.add_xaxis(bi_dts) chart_bi.add_yaxis(series_name="BI", y_axis=bi_val, is_selected=True, symbol="diamond", symbol_size=10, label_opts=label_not_show_opts, itemstyle_opts=opts.ItemStyleOpts(color="rgba(184, 117, 225, 1.0)",)) chart_bi.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_bi) xd_dts = [x['dt'] for x in ka.xd_list] xd_val = [x['xd'] for x in ka.xd_list] chart_xd = Scatter() chart_xd.add_xaxis(xd_dts) chart_xd.add_yaxis(series_name="XD", y_axis=xd_val, is_selected=True, symbol="triangle", symbol_size=10, itemstyle_opts=opts.ItemStyleOpts(color="rgba(37, 141, 54, 1.0)",)) chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_xd) # 成交量图 # ------------------------------------------------------------------------------------------------------------------ chart_vol = Bar() chart_vol.add_xaxis(dts) chart_vol.add_yaxis(series_name="Volume", y_axis=vol, bar_width='60%') chart_vol.set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=1, axislabel_opts=opts.LabelOpts(is_show=True, font_size=8, color="#9b9da9"), ), yaxis_opts=yaxis_opts, legend_opts=legend_not_show_opts, ) # MACD图 # ------------------------------------------------------------------------------------------------------------------ chart_macd = Bar() chart_macd.add_xaxis(dts) chart_macd.add_yaxis(series_name="MACD", y_axis=macd, bar_width='60%') chart_macd.set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=2, axislabel_opts=opts.LabelOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( grid_index=2, split_number=4, axisline_opts=opts.AxisLineOpts(is_on_zero=False), axistick_opts=opts.AxisTickOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"), ), legend_opts=opts.LegendOpts(is_show=False), ) line = Line() line.add_xaxis(dts) line.add_yaxis(series_name="DIFF", y_axis=diff, label_opts=label_not_show_opts, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#da6ee8")) line.add_yaxis(series_name="DEA", y_axis=dea, label_opts=label_not_show_opts, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#39afe6")) chart_macd = chart_macd.overlap(line) grid0_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="12%", height="58%") grid1_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="74%", height="8%") grid2_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="86%", height="10%") grid_chart = Grid(init_opts) grid_chart.add(chart_k, grid_opts=grid0_opts) grid_chart.add(chart_vol, grid_opts=grid1_opts) grid_chart.add(chart_macd, grid_opts=grid2_opts) return grid_chart
from pyecharts import options as opts from pyecharts.charts import Scatter import pandas as pd scatter1=Scatter() # 价格均线 scatter1.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts()], title_opts=opts.TitleOpts(title="test")) df2 = pd.read_csv("F:\\Stock\\html_png_Total_day\\2019-10-10\\2019-10-10_Total_Day.csv") print(df2['Final portfolio value'].shape[0]) x=range(df2['Final portfolio value'].shape[0]) y=df2['Final portfolio value']/10000 scatter1.add_xaxis(x) scatter1.add_yaxis("sma",y) scatter1.render(path='F:\\Stock/html_png_Total_day/aaa.html')
bar = Bar() bar.add_xaxis(vanguard_club) bar.add_yaxis('', vanguard_shot, gap="0%") bar.add_yaxis('', vanguard_speed, gap="0%") bar.add_yaxis('', vanguard_power, gap="0%") bar.set_global_opts( xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)), title_opts=opts.TitleOpts(title="各球队前锋数据", subtitle="射术、速度和力量"), datazoom_opts=opts.DataZoomOpts(), ) bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) bar.render_notebook() # 锋线散点图 scatter = Scatter() scatter.add_xaxis(vanguard_club) scatter.add_yaxis("shot", vanguard_shot, symbol='pin') scatter.add_yaxis("speed", vanguard_speed, symbol='triangle') scatter.add_yaxis("power", vanguard_power, symbol='diamond') scatter.set_global_opts( xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)), title_opts=opts.TitleOpts(title="各球队前锋数据"), visualmap_opts=opts.VisualMapOpts(type_='size', max_=90, min_=60), ) scatter.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) scatter.render_notebook() # 中场 df_midfield = player_df[player_df['staff'] == '中场'][[ 'staff', 'club', 'pass', 'speed', 'tape' ]]
data = [] for N in range(1,75): Q = 0 for x in range(0,M): bir=[(random.randint(1,365))for i in range(N)] sbir=set(bir) if(len(sbir)<len(bir)):Q+=1 mydict={} mydict[N]=Q/M # print(mydict) data.append(Q/M) # print(Q) # print(Q/M) # N+=1 # M += 1 line.add_xaxis(columns) line.add_yaxis("%d个班级"%M,data,label_opts=opts.LabelOpts(is_show=False)) # print(data) line.render(r"C:\Users\tony5\Desktop\pyclass\master\multi.html") print('end') except: print("error") from bisect import bisect_left from random import randint def make_word_list(): """Reads lines from a file and builds a list using append.""" word_list = [] fin = open(r'C:\Users\tony5\Desktop\pyclass\master\words.txt','r')
# 设置饼图(环形图)半径范围,单位为百分比 radius=[0, 40] ) pie.add( "Cat2", list(zip(Faker.choose(), Faker.values())), rosetype="radius", radius=[60, 100] ) pie.render_notebook() # %% [markdown] # ### Scatter -- 散点图 scatter = Scatter() scatter.add_xaxis(Faker.choose()) scatter.add_yaxis("cat1", Faker.values()) scatter.add_yaxis("cat2", Faker.values()) scatter.render_notebook() # %% [markdown] # #### Scatter -- 气泡图(大小标识数量) scatter = Scatter() scatter.add_xaxis(Faker.choose()) scatter.add_yaxis("cat1", Faker.values()) scatter.add_yaxis("cat2", Faker.values()) scatter.set_global_opts( visualmap_opts=opts.VisualMapOpts( type_="size" )
class ScatterChart(base_chart.BaseChart): chart = None max_y = None max_x = None min_x = None def __init__(self, title, xaxis_name, yaxis_name, xaxis_formatter): base_chart.BaseChart.__init__(self, title, xaxis_name, yaxis_name, xaxis_formatter=xaxis_formatter) def clear(self): self.data.clear() def set_data(self, **data): self.clear() if ('x' in data) & ('y' in data): self.data.append([data['x'], data['y']]) self.max_x = max(data['x']) self.max_y = max(data['y']) self.min_x = min(data['x']) if 'max_x' in data: self.max_x = data['max_x'] if 'min_x' in data: self.min_x = data['min_x'] if 'max_y' in data: self.max_y = data['max_y'] return self def show(self): return self.chart def plot(self): self.chart = Scatter(init_opts=opts.InitOpts( page_title=self.title, width='600px', height='500px')) # load data self.chart.add_xaxis(self.data[0][0]) self.chart.add_yaxis(self.yaxis_name, self.data[0][1]) # set options self.chart.set_global_opts( title_opts=opts.TitleOpts(title=self.title), toolbox_opts=opts.ToolboxOpts(is_show=True), datazoom_opts=opts.DataZoomOpts(is_show=True, type_='slider', range_start=0, range_end=100), xaxis_opts=opts.AxisOpts( name=self.xaxis_name, type_='time', name_location='end', name_gap=15, splitline_opts=opts.SplitLineOpts(is_show=True), min_=self.min_x, max_=self.max_x), yaxis_opts=opts.AxisOpts( name=self.yaxis_name, name_location='center', name_gap=15, splitline_opts=opts.SplitLineOpts(is_show=True), max_=self.max_y), visualmap_opts=opts.VisualMapOpts(max_=self.max_y)) self.chart.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) return self
def find_correlation_render(attributes, data, pearsonr, query, table_path, answer): dimensions = len(attributes) if dimensions == 2: data[0] = list(map(str, data[0])) data[1] = list(map(float, data[0])) l1_1 = Scatter() l1_1.add_xaxis(data[0]) l1_1.add_yaxis("", data[1]) l1_1.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts(name=attributes[0]), yaxis_opts=opts.AxisOpts(name=attributes[1]), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) grid = Grid(init_opts=opts.InitOpts( width="100%", height="100%", renderer=globals.RenderType.SVG, )) grid.add(l1_1, grid_opts={'left': '15%', 'bottom': '34%'}) option1 = grid.dump_options_with_quotes() option1 = json.loads(option1) option = {"option": [option1], "query": query} return option elif dimensions == 3: l1_1 = Scatter() data[0] = list(map(str, data[0])) data[1] = list(map(float, data[1])) data[2] = list(map(float, data[2])) l1_1.add_xaxis(data[0]) l1_1.add_yaxis("", data[1]) l1_1.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts( name=attributes[0], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=0, ), yaxis_opts=opts.AxisOpts( name=attributes[1], grid_index=0, ), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) l1_2 = Scatter() l1_2.add_xaxis(data[0]) l1_2.add_yaxis("", data[2]) l1_2.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts( name=attributes[0], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=1, ), yaxis_opts=opts.AxisOpts(name=attributes[2], grid_index=1), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", z=100, ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) data[1] = list(map(str, data[1])) l2_1 = Scatter() l2_1.add_xaxis(data[1]) l2_1.add_yaxis("", data[2]) l2_1.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts(name=attributes[0], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=2), yaxis_opts=opts.AxisOpts(name=attributes[1], grid_index=2), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) grid = Grid(init_opts=opts.InitOpts( width="100%", height="100%", renderer=globals.RenderType.SVG, )) grid.add( chart=l1_1, grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="20%", pos_top="40%"), grid_index=0, ) grid.add( chart=l1_2, grid_opts=opts.GridOpts(pos_left="57%", pos_bottom="20%", pos_top="40%"), grid_index=1, ) grid.add( chart=l2_1, grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="60%"), grid_index=2, ) option1 = grid.dump_options_with_quotes() option1 = json.loads(option1) option = {"option": [option1], "query": query} return option elif dimensions == 4: data[0] = list(map(str, data[0])) data[1] = list(map(float, data[1])) data[2] = list(map(float, data[2])) data[3] = list(map(float, data[3])) l1_1 = Scatter() l1_1.add_xaxis(data[0]) l1_1.add_yaxis("", data[1]) l1_1.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts( name=attributes[0], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=0, ), yaxis_opts=opts.AxisOpts( name=attributes[1], grid_index=0, ), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) l1_2 = Scatter() l1_2.add_xaxis(data[0]) l1_2.add_yaxis("", data[2]) l1_2.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts( name=attributes[0], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=1, ), yaxis_opts=opts.AxisOpts(name=attributes[2], grid_index=1), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) l2_1 = Scatter() l2_1.add_xaxis(data[0]) l2_1.add_yaxis("", data[3]) l2_1.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts(name=attributes[0], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=2), yaxis_opts=opts.AxisOpts(name=attributes[3], grid_index=2), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) data[1] = list(map(str, data[1])) l2_2 = Scatter() l2_2.add_xaxis(data[1]) l2_2.add_yaxis("", data[2]) l2_2.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts(name=attributes[1], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=3), yaxis_opts=opts.AxisOpts(name=attributes[2], grid_index=3), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) grid = Grid(init_opts=opts.InitOpts( width="100%", height="100%", renderer=globals.RenderType.SVG, )) grid.add( chart=l1_1, grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="20%", pos_top="40%"), grid_index=0, ) grid.add( chart=l1_2, grid_opts=opts.GridOpts(pos_left="57%", pos_bottom="20%", pos_top="40%"), grid_index=1, ) grid.add( chart=l2_1, grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="60%"), grid_index=2, ) grid.add( chart=l2_2, grid_opts=opts.GridOpts(pos_left="57%", pos_bottom="60%"), grid_index=3, ) r1_1 = Scatter() r1_1.add_xaxis(data[1]) r1_1.add_yaxis("", data[3]) r1_1.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts(name=attributes[1], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=0), yaxis_opts=opts.AxisOpts(name=attributes[3], grid_index=0), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) data[2] = list(map(str, data[2])) r1_2 = Scatter() r1_2.add_xaxis(data[2]) r1_2.add_yaxis("", data[3]) r1_2.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], xaxis_opts=opts.AxisOpts(name=attributes[2], axislabel_opts=opts.LabelOpts(rotate=50, interval=0), grid_index=1), yaxis_opts=opts.AxisOpts(name=attributes[3], grid_index=1), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) grid1 = Grid(init_opts=opts.InitOpts( width="100%", height="100%", renderer=globals.RenderType.SVG, )) grid1.add( chart=r1_1, grid_opts=opts.GridOpts(pos_right="57%", pos_bottom="30%"), grid_index=0, ) grid1.add( chart=r1_2, grid_opts=opts.GridOpts(pos_left="57%", pos_bottom="30%"), grid_index=1, ) option1 = grid.dump_options_with_quotes() option1 = json.loads(option1) option2 = grid1.dump_options_with_quotes() option2 = json.loads(option2) option = {"option": [option1, option2], "query": query} return option
def Plot(self, jine: list, hushu: list, coef: list, date :str = None, title : str = None, size_def = lambda x: 50 if 10 + x > 50 else 10 + x): ##配置全局变量 j_list = [0 for _ in jine] h_list = [0 for _ in hushu] plot = Scatter(init_opts = opts.InitOpts(width = self.width, height = self.height, theme = self.theme)) plot.set_global_opts( title_opts=opts.TitleOpts(title=title), xaxis_opts = opts.AxisOpts(type_="value", splitline_opts=opts.SplitLineOpts(is_show=False), min_ = self.x_min, max_ = self.x_max, name = self.data_name[self.x_index]), yaxis_opts = opts.AxisOpts(type_="value", splitline_opts=opts.SplitLineOpts(is_show=False), min_ = self.y_min, max_ = self.y_max, name = self.data_name[self.y_index]), toolbox_opts = opts.ToolboxOpts(orient = 'horizontal', pos_top = 0, feature = opts.ToolBoxFeatureOpts( save_as_image = opts.ToolBoxFeatureSaveAsImageOpts(type_ = "jpeg", pixel_ratio = 4, background_color = 'white'), restore = opts.ToolBoxFeatureRestoreOpts(), data_zoom = opts.ToolBoxFeatureDataZoomOpts(), data_view = opts.ToolBoxFeatureDataViewOpts(is_show = False), magic_type = opts.ToolBoxFeatureMagicTypeOpts(is_show = False), brush = opts.ToolBoxFeatureBrushOpts(type_=[]))), tooltip_opts=opts.TooltipOpts(is_show=True, trigger="item", axis_pointer_type="cross") ) ##逐个添加点 for item in self.data_value: #数据处理 local = str(item[self.local_index]) num = float(item[self.x_index]) gold = float(item[self.y_index]) name = str(item[self.name_index]) size = 0. for s in range(len(self.size_index)): size += item[self.size_index[s]]*self.size_coef[s] tips = '日期:{}'.format(date) for s in range(len(self.data_name)): tips += '<br>' tips += '{}:{}'.format(self.data_name[s], item[s]) #添加点及其tips plot.add_xaxis([num]) plot.add_yaxis(local, [gold], symbol_size = size_def(size), tooltip_opts=opts.TooltipOpts(formatter = tips), label_opts=opts.LabelOpts(formatter = name)) #计算达标人数 for i in range(len(j_list)): if gold >= jine[i]: j_list[i] += 1 for i in range(len(h_list)): if num >= hushu[i]: h_list[i] += 1 ##添加达标线及其注释点 for item in range(len(j_list)): plot.add_xaxis([self.x_max]) plot.add_yaxis('达标线', [jine[item]], symbol_size = 25, symbol = 'pin', label_opts = opts.LabelOpts(is_show = False), tooltip_opts = opts.TooltipOpts(formatter = '达标人数:{}<br>未达标人数:{}'.format(j_list[item], self.num-j_list[item])), markline_opts = opts.MarkLineOpts(data = [opts.MarkLineItem(y = jine[item], name = '金额达标线{}'.format(i+1))], label_opts = opts.LabelOpts(is_show = False), symbol_size = 0)) for item in range(len(h_list)): plot.add_xaxis([hushu[item]]) plot.add_yaxis('达标线', [self.y_max], symbol_size = 25, symbol = 'pin', label_opts = opts.LabelOpts(is_show = False), tooltip_opts = opts.TooltipOpts(formatter = '奖励系数:x{}<br>达标人数:{}<br>未达标人数:{}'.format(coef[item], h_list[item], self.num-h_list[item])), markline_opts = opts.MarkLineOpts(data = [opts.MarkLineItem(x = hushu[item], name = '户数达标线{}'.format(i+1))], label_opts = opts.LabelOpts(is_show = False), symbol_size = 0)) return plot
def generate_scatter_html_with_multi_tables(tables, title="可转债分布情况", subtitle=None, select=None, use_personal_features=True, price_field_name='转债价格'): chart_id = str(abs(hash(title))) scatter = Scatter( opts.InitOpts(height='700px', width='1424px', theme=ThemeType.LIGHT, chart_id=chart_id)) scatter.add_js_funcs('chart_' + chart_id + """.on('click', function(params){ // alert(params) popWin.showWin("1200","600", params['data']['value'][3]); }) """) for label, table in tables.items(): if select is not None and label not in select: continue x = [] y = [] point_items = [] rows = table._rows for row in rows: record = get_record(table, row) if record['溢价率'] is None: continue x1 = record[price_field_name] x.append(x1) y1 = record['溢价率'].replace('%', '') * 1 amount = record.get("持有数量", 0) bond_name = record['名称'].replace('转债', '') bond_code = record['bond_code'] bond_code = trade_utils.rebuild_bond_code(bond_code) y.append([y1]) # todo symbol 轮出:triangle 轮入:diamond if use_personal_features and record.get( 'hold_id') is not None and amount > 0: point_items.append( opts.MarkPointItem( coord=[x1, y1], symbol_size=amount, itemstyle_opts=opts.ItemStyleOpts( opacity=0.5, border_color='#000', border_width=1, ), value=[bond_name, x1, y1, bond_code, amount])) else: point_items.append( opts.MarkPointItem( coord=[x1, y1], # symbol_size=symbol_size, itemstyle_opts=opts.ItemStyleOpts( # color='#fff', # border_color='#000' ), value=[bond_name, x1, y1, bond_code])) scatter.add_xaxis(x) scatter.add_yaxis( label, y, label_opts=opts.LabelOpts(is_show=False), markpoint_opts=opts.MarkPointOpts( symbol='circle', symbol_size=10, data=point_items, label_opts=opts.LabelOpts( position='bottom', formatter=JsCode( 'function(params){return params.value[0]}'))), markline_opts=opts.MarkLineOpts( linestyle_opts=opts.LineStyleOpts(type_='dashed'), is_silent=True, label_opts=opts.LabelOpts( position='end', formatter=JsCode( "function(params){return params.data['name'];}")), data=[ opts.MarkLineItem(x=utils.trade_utils.MID_X, name='中位数(' + str(utils.trade_utils.MID_X) + '元)'), opts.MarkLineItem(y=utils.trade_utils.MID_Y, name='中位数(' + str(utils.trade_utils.MID_Y) + '%)'), ])) # scatter.add_xaxis(x) scatter.set_global_opts( title_opts=opts.TitleOpts(title=title, subtitle=subtitle, pos_left='center'), tooltip_opts=opts.TooltipOpts(formatter=get_hover_js_code()), legend_opts=opts.LegendOpts(pos_bottom=-5, # selected_mode='single' ), toolbox_opts=opts.ToolboxOpts(feature={ 'dataZoom': {}, }), # visualmap_opts=opts.VisualMapOpts( # type_="color", max_=150, min_=20, dimension=1 # ), xaxis_opts=opts.AxisOpts( # data=None, type_='value', name='转债价格(元)', name_gap=30, is_scale=True, name_location='middle', splitline_opts=opts.SplitLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(formatter='{value}元'), axisline_opts=opts.AxisLineOpts(is_on_zero=False, symbol=['none', 'arrow'])), yaxis_opts=opts.AxisOpts( type_='value', name='转股溢价率(%)', name_rotate=90, name_gap=35, name_location='middle', 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']))) scatter_html = scatter.render_embed('template.html', env) return scatter_html
def create_scatter(title, sub_title, field_name, label_y, point_items, x, y, hover_maker=None, click_maker=None): chart_id = str(abs(hash(title))) scatter = Scatter( opts.InitOpts(height='700px', width='1424px', chart_id=chart_id)) if click_maker is None: click_maker = get_click_js_code scatter.add_js_funcs(click_maker(chart_id)) scatter.add_xaxis(xaxis_data=x) show_label = True if len(point_items) > 100: show_label = False scatter.add_yaxis( series_name="", y_axis=y, color=choice(colors), label_opts=opts.LabelOpts(is_show=False, ), markline_opts=opts.MarkLineOpts( linestyle_opts=opts.LineStyleOpts(type_='dashed'), is_silent=True, label_opts=opts.LabelOpts( position='end', formatter=JsCode( "function(params){return params.data['name'];}")), data=[ opts.MarkLineItem(x=utils.trade_utils.MID_X, name='中位数(' + str(utils.trade_utils.MID_X) + '元)'), opts.MarkLineItem(y=utils.trade_utils.MID_Y, name='中位数(' + str(utils.trade_utils.MID_Y) + '%)'), ]), markpoint_opts=opts.MarkPointOpts( symbol='circle', symbol_size=12, data=point_items, label_opts=opts.LabelOpts( is_show=show_label, position='bottom', formatter=JsCode('function(params){return params.value[0]}')))) if title is not None and title.strip(' ') != '': title = "=========" + title + "=========" if hover_maker is None: hover_maker = get_hover_js_code scatter.set_global_opts( title_opts=opts.TitleOpts(title=title, subtitle=sub_title, pos_left='center'), tooltip_opts=opts.TooltipOpts(formatter=hover_maker(field_name), ), toolbox_opts=opts.ToolboxOpts(feature={ 'dataZoom': {}, }), xaxis_opts=opts.AxisOpts( # data=None, type_='value', name='转债价格(元)', name_gap=30, is_scale=True, name_location='middle', splitline_opts=opts.SplitLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(formatter='{value}元'), axisline_opts=opts.AxisLineOpts(is_on_zero=False, symbol=['none', 'arrow'])), yaxis_opts=opts.AxisOpts( type_='value', name=label_y, name_rotate=90, name_gap=35, name_location='middle', 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'])), ) scatter_html = scatter.render_embed('template.html', env) return "<br/>" + scatter_html
def plt(key): """连接hbase""" connection = happybase.Connection(host="localhost", port=9090) """打开传输""" connection.open() """连接表""" basicFeaturesTable = happybase.Table('basicFeaturesTable', connection) socialAttributesTable = happybase.Table('socialAttributesTable', connection) consumptionFeaturesTable = happybase.Table('consumptionFeaturesTable', connection) internetFeaturesTable = happybase.Table('internetFeaturesTable', connection) consumptionCharacteristicsTable = happybase.Table( 'consumptionCharacteristicsTable', connection) internetBehaviorTable = happybase.Table('internetBehaviorTable', connection) """获取信息""" try: key_name = basicFeaturesTable.row(key, columns=["name"]) except: """连接hbase""" connection = happybase.Connection(host="localhost", port=9090) """打开传输""" connection.open() """连接表""" basicFeaturesTable = happybase.Table('basicFeaturesTable', connection) socialAttributesTable = happybase.Table('socialAttributesTable', connection) consumptionFeaturesTable = happybase.Table('consumptionFeaturesTable', connection) internetFeaturesTable = happybase.Table('internetFeaturesTable', connection) consumptionCharacteristicsTable = happybase.Table( 'consumptionCharacteristicsTable', connection) internetBehaviorTable = happybase.Table('internetBehaviorTable', connection) key_name = basicFeaturesTable.row(key, columns=["name"]) key_name = list(key_name.values()) key_name = key_name[0].decode() try: sInfo = socialAttributesTable.row(key, columns=["incLevel", "eduLevel"]) cInfo = consumptionFeaturesTable.row(key, columns=["CMLevel", "CTLevel"]) iInfo = internetFeaturesTable.row(key, columns=["intLevel"]) consumptionCharacteristicsInfo = consumptionCharacteristicsTable.row( key, columns=["commodity", "price", "date"]) internetBehaviorInfo = internetBehaviorTable.row \ (key, columns= ["date", "news", "communications", "entertainment", "domersticServices", "busApp", "toolUse"] ) except: """连接hbase""" connection = happybase.Connection(host="localhost", port=9090) """打开传输""" connection.open() """连接表""" basicFeaturesTable = happybase.Table('basicFeaturesTable', connection) socialAttributesTable = happybase.Table('socialAttributesTable', connection) consumptionFeaturesTable = happybase.Table('consumptionFeaturesTable', connection) internetFeaturesTable = happybase.Table('internetFeaturesTable', connection) consumptionCharacteristicsTable = happybase.Table( 'consumptionCharacteristicsTable', connection) internetBehaviorTable = happybase.Table('internetBehaviorTable', connection) sInfo = socialAttributesTable.row(key, columns=["incLevel", "eduLevel"]) cInfo = consumptionFeaturesTable.row(key, columns=["CMLevel", "CTLevel"]) iInfo = internetFeaturesTable.row(key, columns=["intLevel"]) consumptionCharacteristicsInfo = consumptionCharacteristicsTable.row( key, columns=["commodity", "price", "date"]) internetBehaviorInfo = internetBehaviorTable.row \ (key, columns= ["date", "news", "communications", "entertainment", "domersticServices", "busApp", "toolUse"] ) """消费情况图""" consumptionCharacteristicsValues = list( consumptionCharacteristicsInfo.values()) consumptionCharacteristicsValues = list( map(lambda x: x.decode(), consumptionCharacteristicsValues)) consumptionCharacteristicsValues[ int(len(consumptionCharacteristicsValues) / 3):-int(len(consumptionCharacteristicsValues) / 3)] \ = list(map(int, consumptionCharacteristicsValues[int(len(consumptionCharacteristicsValues) / 3): -int(len(consumptionCharacteristicsValues) / 3)])) consumptionCharacteristicsValues[-int(len(consumptionCharacteristicsValues) / 3):] \ = list(map(int, consumptionCharacteristicsValues[-int(len(consumptionCharacteristicsValues) / 3):])) consumptionCharacteristicsData = [] consumptionCharacteristicsData.append( consumptionCharacteristicsValues[:int( len(consumptionCharacteristicsValues) / 3)]) consumptionCharacteristicsData.append(consumptionCharacteristicsValues[ int(len(consumptionCharacteristicsValues) / 3):-int(len(consumptionCharacteristicsValues) / 3)]) consumptionCharacteristicsData.append(consumptionCharacteristicsValues[ -int(len(consumptionCharacteristicsValues) / 3):]) consumptionCharacteristicsData = pd.DataFrame( consumptionCharacteristicsData).T consumptionCharacteristicsData.columns = ["commodity", "date", "price"] consumptionCharacteristicsData.sort_values(by="date", inplace=True) consumptionCharacteristicsData_y = consumptionCharacteristicsData.loc[:, "date"].tolist( ) consumptionCharacteristicsData_y = list( map(str, consumptionCharacteristicsData_y)) consumptionCharacteristicsData_x = consumptionCharacteristicsData.loc[:, "price"].tolist( ) consumptionCharacteristicsData_commodity = consumptionCharacteristicsData.loc[:, "commodity"].tolist( ) quzhong_consumptionCharacteristicsData_y = list( set(consumptionCharacteristicsData_y)) if len(quzhong_consumptionCharacteristicsData_y) != len( consumptionCharacteristicsData_y): for i in range(len(quzhong_consumptionCharacteristicsData_y)): count_consumptionCharacteristicsData_y = consumptionCharacteristicsData_y. \ count(quzhong_consumptionCharacteristicsData_y[i]) if count_consumptionCharacteristicsData_y != 1: index = consumptionCharacteristicsData_y.index( quzhong_consumptionCharacteristicsData_y[i]) consumptionCharacteristicsData_y = consumptionCharacteristicsData_y[:index + 1] + \ consumptionCharacteristicsData_y[ index + count_consumptionCharacteristicsData_y:] consumptionCharacteristicsData_x[index] = sum( consumptionCharacteristicsData_x[ index:index + count_consumptionCharacteristicsData_y]) consumptionCharacteristicsData_x = consumptionCharacteristicsData_x[:index + 1] + \ consumptionCharacteristicsData_x[ index + count_consumptionCharacteristicsData_y:] consumptionCharacteristicsData_commodity[index] = \ ",".join( consumptionCharacteristicsData_commodity[index:index + count_consumptionCharacteristicsData_y]) consumptionCharacteristicsData_commodity \ = consumptionCharacteristicsData_commodity[:index + 1] + \ consumptionCharacteristicsData_commodity[index + count_consumptionCharacteristicsData_y:] consumptionCharacteristicsData_xx = \ [list(z) for z in zip(consumptionCharacteristicsData_x, consumptionCharacteristicsData_commodity)] scatter = Scatter(init_opts=opts.InitOpts(width="850px", height="380px")) scatter.add_xaxis(consumptionCharacteristicsData_y) scatter.add_yaxis("", consumptionCharacteristicsData_xx, color="red") scatter.set_global_opts( tooltip_opts=opts.TooltipOpts( trigger="item", axis_pointer_type="cross", formatter=JsCode( "function (params) {return '消费日期:' + params.name + ' <br/>消费金额:' + params.value[1] + '元 <br/>消费产品:' + params.value[2];}" )), yaxis_opts=opts.AxisOpts( name="消费金额", type_="value", name_textstyle_opts=opts.TextStyleOpts(color="white"), ########### axislabel_opts=opts.LabelOpts(formatter="{value} 元", border_color="white", color="white"), ######## axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), xaxis_opts=opts.AxisOpts( name="消费日期", type_="category", name_textstyle_opts=opts.TextStyleOpts(color="white"), ########### axislabel_opts=opts.LabelOpts(border_color="white", color="white"), ############## axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"), ), legend_opts=opts.LegendOpts(is_show=False)) scatter.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) line = Line(init_opts=opts.InitOpts(width="850px", height="380px")) line.add_xaxis(consumptionCharacteristicsData_y) line.add_yaxis(series_name="", y_axis=consumptionCharacteristicsData_x, color="red") scatter.overlap(line) scatter.render("./static/html/pictureConsumptionCharacteristics.html") """互联网行为图""" internetBehaviorInfoKeys = list(internetBehaviorInfo.keys()) internetBehaviorInfoKeys = list( map(lambda x: x.decode(), internetBehaviorInfoKeys)) internetBehaviorInfoKeys = list( map(lambda x: x[:x.index(':')], internetBehaviorInfoKeys)) internetBehaviorInfoValues = list(internetBehaviorInfo.values()) internetBehaviorInfoValues = list( map(lambda x: x.decode(), internetBehaviorInfoValues)) internetBehaviorInfoValues = list(map(int, internetBehaviorInfoValues)) internetBehaviorData = [] splitNum = int(len(internetBehaviorInfoValues) / 7) internetBehaviorData.append(internetBehaviorInfoValues[:splitNum]) internetBehaviorData.append(internetBehaviorInfoValues[splitNum:2 * splitNum]) internetBehaviorData.append(internetBehaviorInfoValues[2 * splitNum:3 * splitNum]) internetBehaviorData.append(internetBehaviorInfoValues[3 * splitNum:4 * splitNum]) internetBehaviorData.append(internetBehaviorInfoValues[4 * splitNum:5 * splitNum]) internetBehaviorData.append(internetBehaviorInfoValues[5 * splitNum:6 * splitNum]) internetBehaviorData.append(internetBehaviorInfoValues[6 * splitNum:7 * splitNum]) internetBehaviorData = pd.DataFrame(internetBehaviorData).T internetBehaviorData.columns = [ internetBehaviorInfoKeys[0], internetBehaviorInfoKeys[splitNum], internetBehaviorInfoKeys[2 * splitNum], internetBehaviorInfoKeys[3 * splitNum], internetBehaviorInfoKeys[4 * splitNum], internetBehaviorInfoKeys[5 * splitNum], internetBehaviorInfoKeys[6 * splitNum] ] internetBehaviorData.sort_values(by="date", inplace=True) internetBehaviorData_y = internetBehaviorData.loc[:, "date"].tolist() internetBehaviorData_y = list(map(str, internetBehaviorData_y)) bar = Bar(init_opts=opts.InitOpts(width="800px", height="380px")) bar.add_xaxis(internetBehaviorData_y) bar.add_yaxis(series_name="新闻资讯", yaxis_data=internetBehaviorData.loc[:, "news"].tolist(), stack="stack") bar.add_yaxis( series_name="通信交流", yaxis_data=internetBehaviorData.loc[:, "communications"].tolist(), stack="stack") bar.add_yaxis( series_name="娱乐休闲", yaxis_data=internetBehaviorData.loc[:, "entertainment"].tolist(), stack="stack") bar.add_yaxis( series_name="生活服务", yaxis_data=internetBehaviorData.loc[:, "domersticServices"].tolist(), stack="stack") bar.add_yaxis(series_name="商务应用", yaxis_data=internetBehaviorData.loc[:, "busApp"].tolist(), stack="stack") bar.add_yaxis(series_name="工具使用", yaxis_data=internetBehaviorData.loc[:, "toolUse"].tolist(), stack="stack") bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) bar.set_global_opts( tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), xaxis_opts=opts.AxisOpts( name="日期", name_textstyle_opts=opts.TextStyleOpts(color="white"), ########### type_="category", axislabel_opts=opts.LabelOpts(border_color="white", color="white"), ############# axispointer_opts=opts.AxisPointerOpts(is_show=True), ), yaxis_opts=opts.AxisOpts( name="时间", name_textstyle_opts=opts.TextStyleOpts(color="white"), type_="value", min_=0, max_=24, interval=4, axislabel_opts=opts.LabelOpts(formatter="{value} 小时", border_color="white", color="white"), ########### axistick_opts=opts.AxisTickOpts(is_show=True), ), datazoom_opts=opts.DataZoomOpts(type_="inside"), legend_opts=opts.LegendOpts(is_show=True, textstyle_opts=opts.TextStyleOpts( border_color="white", color="wihte"), orient='horizontal')) bar.render("./static/html/pictureInternetBehavior.html") """个人特征图""" sValue = list(sInfo.values()) sValue = list(map(lambda x: x.decode(), sValue)) cValue = list(cInfo.values()) cValue = list(map(lambda x: x.decode(), cValue)) iValue = list(iInfo.values()) iValue = list(map(lambda x: x.decode(), iValue)) value = sValue + cValue + iValue value = list(map(int, value)) value = [value[1], value[2], value[3], value[0], value[4]] value = [value] rader = Radar(init_opts=opts.InitOpts(width="350px", height="350px")) rader.add_schema(schema=[ opts.RadarIndicatorItem(name="收入指数", max_=5), opts.RadarIndicatorItem(name="消费金\n额指数", max_=5), opts.RadarIndicatorItem(name="消费次数指数", max_=5), opts.RadarIndicatorItem(name="学历指数", max_=5), opts.RadarIndicatorItem(name="网络依\n赖指数", max_=5), ], shape='polygon') rader.add(series_name=key_name, data=value) rader.set_global_opts(legend_opts=opts.LegendOpts(is_show=False)) rader.render("./static/html/pictureCompositiveInfo.html")
def kline_pro(kline: List[dict], fx: List[dict] = None, xd=None, bs: List[dict] = None, title: str = "缠中说禅K线分析", width: str = "1400px", height: str = '580px') -> Grid: """绘制缠中说禅K线分析结果 :param kline: K线 :param fx: 分型识别结果 :param bi: 笔识别结果 :param xd: 线段识别结果 :param zs: 中枢 :param bs: 买卖点 :param title: 图表标题 :param width: 图表宽度 :param height: 图表高度 :return: 用Grid组合好的图表 """ # 配置项设置 # ------------------------------------------------------------------------------------------------------------------ bg_color = "#1f212d" # 背景 up_color = "#F9293E" down_color = "#00aa3b" init_opts = opts.InitOpts(bg_color=bg_color, width=width, height=height, animation_opts=opts.AnimationOpts(False)) title_opts = opts.TitleOpts( title=title, pos_top="1%", title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20), subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color, font_size=12)) label_not_show_opts = opts.LabelOpts(is_show=False) legend_not_show_opts = opts.LegendOpts(is_show=False) red_item_style = opts.ItemStyleOpts(color=up_color) green_item_style = opts.ItemStyleOpts(color=down_color) k_style_opts = opts.ItemStyleOpts(color=up_color, color0=down_color, border_color=up_color, border_color0=down_color, opacity=0.8) legend_opts = opts.LegendOpts(is_show=True, pos_top="1%", pos_left="30%", item_width=14, item_height=8, textstyle_opts=opts.TextStyleOpts( font_size=12, color="#0e99e2")) brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"], x_axis_index="all", brush_link="all", out_of_brush={"colorAlpha": 0.1}, brush_type="lineX") axis_pointer_opts = opts.AxisPointerOpts(is_show=True, link=[{ "xAxisIndex": "all" }]) range_start = int(100 - 216 / len(kline) * 100) dz_inside = opts.DataZoomOpts(False, "inside", xaxis_index=[0, 1, 2], range_start=range_start, range_end=100) dz_slider = opts.DataZoomOpts(True, "slider", xaxis_index=[0, 1, 2], pos_top="96%", pos_bottom="0%", range_start=range_start, range_end=100) yaxis_opts = opts.AxisOpts(is_scale=True, axislabel_opts=opts.LabelOpts( color="#c7c7c7", font_size=8, position="inside")) grid0_xaxis_opts = opts.AxisOpts( type_="category", grid_index=0, axislabel_opts=label_not_show_opts, split_number=20, min_="dataMin", max_="dataMax", is_scale=True, boundary_gap=False, axisline_opts=opts.AxisLineOpts(is_on_zero=False)) tool_tip_opts = opts.TooltipOpts( trigger="axis", axis_pointer_type="cross", background_color="rgba(245, 245, 245, 0.8)", border_width=1, border_color="#ccc", position=JsCode(""" function (pos, params, el, elRect, size) { var obj = {top: 10}; obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30; return obj; } """), textstyle_opts=opts.TextStyleOpts(color="#000"), ) # 数据预处理 # ------------------------------------------------------------------------------------------------------------------ # dts = [x.get('dt', x['date']) for x in kline] try: dts = [x['date'] for x in kline] except: dts = [x['dt'] for x in kline] # k_data = [[x['open'], x['close'], x['low'], x['high']] for x in kline] k_data = [ opts.CandleStickItem( name=i, value=[x['open'], x['close'], x['low'], x['high']]) for i, x in enumerate(kline) ] vol = [] for i, row in enumerate(kline): item_style = red_item_style if row['close'] > row[ 'open'] else green_item_style bar = opts.BarItem(name=i, value=row['volume'], itemstyle_opts=item_style, label_opts=label_not_show_opts) vol.append(bar) close = np.array([x['close'] for x in kline], dtype=np.double) diff, dea, macd = MACD(close) ma5 = SMA(close, timeperiod=5) ma34 = SMA(close, timeperiod=34) ma55 = SMA(close, timeperiod=55) ma233 = SMA(close, timeperiod=233) macd_bar = [] for i, v in enumerate(macd.tolist()): item_style = red_item_style if v > 0 else green_item_style bar = opts.BarItem(name=i, value=round(v, 4), itemstyle_opts=item_style, label_opts=label_not_show_opts) macd_bar.append(bar) diff = diff.round(4) dea = dea.round(4) # K 线主图 # ------------------------------------------------------------------------------------------------------------------ chart_k = Kline() chart_k.add_xaxis(xaxis_data=dts) chart_k.add_yaxis(series_name="Kline", y_axis=k_data, itemstyle_opts=k_style_opts) chart_k.set_global_opts(legend_opts=legend_opts, datazoom_opts=[dz_inside, dz_slider], yaxis_opts=yaxis_opts, tooltip_opts=tool_tip_opts, axispointer_opts=axis_pointer_opts, brush_opts=brush_opts, title_opts=title_opts, xaxis_opts=grid0_xaxis_opts) if xd: index = 0 zs_colors = [ "yellow", "white", '#f034c1', "#7944b7", "#468b58", "#c17f2f", "#9EA0A1" ] data = [] temp_xd = xd while temp_xd: zs_color = zs_colors[index % len(zs_colors)] data = data + [ opts.MarkAreaItem( name='XD{}'.format(index), x=(x['xd_list'][0]['date'], x['xd_list'][-1]['date']), y=(x['ZG']['value'], x['ZD']['value']), label_opts=opts.LabelOpts(color=zs_color), itemstyle_opts=opts.ItemStyleOpts( color=zs_color, opacity=0.2, )) for x in temp_xd.zs_list ] temp_xd = temp_xd.next index = index + 1 chart_k.set_series_opts( markarea_opts=opts.MarkAreaOpts(is_silent=True, data=data)) # 均线图 # ------------------------------------------------------------------------------------------------------------------ chart_ma = Line() chart_ma.add_xaxis(xaxis_data=dts) ma_keys = {"MA5": ma5, "MA34": ma34, "MA55": ma55, "MA233": ma233} ma_colors = ["#39afe6", "#da6ee8", "#A02128", "#00940b"] for i, (name, ma) in enumerate(ma_keys.items()): chart_ma.add_yaxis(series_name=name, y_axis=ma, is_smooth=True, is_selected=False, symbol_size=0, label_opts=label_not_show_opts, linestyle_opts=opts.LineStyleOpts( opacity=0.8, width=1.0, color=ma_colors[i])) chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_ma) # 缠论结果 # ------------------------------------------------------------------------------------------------------------------ if fx: try: fx_dts = [x['date'] for x in fx] except: fx_dts = [x['dt'] for x in fx] fx_val = [x['value'] for x in fx] chart_fx = Scatter() chart_fx.add_xaxis(fx_dts) chart_fx.add_yaxis(series_name="FX", y_axis=fx_val, is_selected=False, symbol="circle", symbol_size=6, label_opts=label_not_show_opts, itemstyle_opts=opts.ItemStyleOpts( color="rgba(152, 147, 193, 1.0)", )) chart_fx.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_fx) if xd: index = 0 xd_colors = zs_colors while xd: xd_dts = [x['date'] for x in xd] xd_val = [x['value'] for x in xd] chart_xd = Line() chart_xd.add_xaxis(xd_dts) xd_color = xd_colors[index % len(xd_colors)] chart_xd.add_yaxis( series_name="XD{}".format(index), y_axis=xd_val, is_selected=True, symbol="triangle", symbol_size=10, linestyle_opts=opts.LineStyleOpts(color=xd_color, width=index + 1, type_="solid"), itemstyle_opts=opts.ItemStyleOpts(color=xd_color)) chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_xd) xd = xd.next index = index + 1 if bs: b_dts = [x['date'] for x in bs if x['bs'] == 'buy'] if len(b_dts) > 0: b_val = [x['value'] for x in bs if x['bs'] == 'buy'] chart_b = Scatter() chart_b.add_xaxis(b_dts) chart_b.add_yaxis(series_name="BUY", y_axis=b_val, is_selected=False, symbol="arrow", symbol_size=8, itemstyle_opts=opts.ItemStyleOpts( color="#f31e1e", )) chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_b) s_dts = [x['date'] for x in bs if x['bs'] == 'sell'] if len(s_dts) > 0: s_val = [x['value'] for x in bs if x['bs'] == 'sell'] chart_s = Scatter() chart_s.add_xaxis(s_dts) chart_s.add_yaxis(series_name="SELL", y_axis=s_val, is_selected=False, symbol="pin", symbol_size=12, itemstyle_opts=opts.ItemStyleOpts( color="#45b97d", )) chart_s.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts) chart_k = chart_k.overlap(chart_s) # 成交量图 # ------------------------------------------------------------------------------------------------------------------ chart_vol = Bar() chart_vol.add_xaxis(dts) chart_vol.add_yaxis(series_name="Volume", y_axis=vol, bar_width='60%') chart_vol.set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=1, axislabel_opts=opts.LabelOpts(is_show=True, font_size=8, color="#9b9da9"), ), yaxis_opts=yaxis_opts, legend_opts=legend_not_show_opts, ) # MACD图 # ------------------------------------------------------------------------------------------------------------------ chart_macd = Bar() chart_macd.add_xaxis(dts) chart_macd.add_yaxis(series_name="MACD", y_axis=macd_bar, bar_width='60%') chart_macd.set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=2, axislabel_opts=opts.LabelOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( grid_index=2, split_number=4, axisline_opts=opts.AxisLineOpts(is_on_zero=False), axistick_opts=opts.AxisTickOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"), ), legend_opts=opts.LegendOpts(is_show=False), ) line = Line() line.add_xaxis(dts) line.add_yaxis(series_name="DIFF", y_axis=diff, label_opts=label_not_show_opts, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#da6ee8")) line.add_yaxis(series_name="DEA", y_axis=dea, label_opts=label_not_show_opts, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#39afe6")) chart_macd = chart_macd.overlap(line) grid0_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="12%", height="58%") grid1_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="74%", height="8%") grid2_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="86%", height="10%") grid_chart = Grid(init_opts) grid_chart.add(chart_k, grid_opts=grid0_opts) grid_chart.add(chart_vol, grid_opts=grid1_opts) grid_chart.add(chart_macd, grid_opts=grid2_opts) return grid_chart
def run_strategy(smaPeriod): df_new = pd.DataFrame(columns=('shares_ID', 'total number of trades', 'Profit times number of trades', 'Profit Percentage', 'Final portfolio value')) for (root, dirs, files) in os.walk("E:/Stock/Data_Day"): z = 0 for x in range(len(files)): z = z + 1 #K线图 df = pd.read_csv("E:/Stock/Data_Day/" + files[x]) df = df.sort_index(ascending=False).reset_index(drop=True) print("进度:", z / len(files) * 100, "%") date = df.xs('Date Time', axis=1).tolist() data = [] vol = [] for idx in df.index: row1 = [ df.iloc[idx]['Open'], df.iloc[idx]['Close'], df.iloc[idx]['Low'], df.iloc[idx]['High'] ] row2 = df.iloc[idx]['Volume'] data.append(row1) vol.append(row2) kline1 = Kline() line1 = Line() line2 = Line() line3 = Line() scatter1 = Scatter() scatter2 = Scatter() kline1.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts()]) kline1.extend_axis( yaxis=opts.AxisOpts(type_='value', position='right')) kline1.extend_axis( yaxis=opts.AxisOpts(type_='value', position='right')) # 价格均线 line1.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts()]) # 成交量 line2.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts()]) #资金量 line3.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts()]) #买入点 scatter1.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts()]) #卖出点 scatter2.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts()]) kline1.add_xaxis(date) kline1.add_yaxis(files[x], data) line2.add_xaxis(date) line2.add_yaxis("vol", vol, yaxis_index=1, label_opts=opts.LabelOpts(is_show=False)) feed = GenericBarFeed(Frequency.DAY, None, None) feed.addBarsFromCSV("fd", "E:/Stock/Data_Day/" + files[x]) global myStrategy myStrategy = MyStrategy(feed, "fd", smaPeriod) trade_situation = trades.Trades() myStrategy.attachAnalyzer(trade_situation) plt = plotter.StrategyPlotter(myStrategy) # Include the SMA in the instrument's subplot to get it displayed along with the closing prices. plt.getInstrumentSubplot("test").addDataSeries( "SMA", myStrategy.getSMA()) # Plot the simple returns on each bar. # plt.getOrCreateSubplot("returns").addDataSeries("Simple returns", returnsAnalyzer.getReturns()) myStrategy.run() scatter1.add_xaxis(myStrategy.Buyday) scatter1.add_yaxis("Buy", myStrategy.Buyprice) scatter2.add_xaxis(myStrategy.Sellday) scatter2.add_yaxis("Sell", myStrategy.Sellprice) line1.add_xaxis(myStrategy.Barday) line1.add_yaxis("Price_SMA", myStrategy.Sma_price, label_opts=opts.LabelOpts(is_show=False)) line3.add_xaxis(date) line3.add_yaxis("money", myStrategy.money, yaxis_index=2, label_opts=opts.LabelOpts(is_show=False)) plt.savePlot("E:/Stock/html_png_Total_day/" + files[x] + ".png") print(files[x] + " Final portfolio value:$%.2f" % myStrategy.getBroker().getEquity()) print("total number of trades", trade_situation.getCount()) print("Profit times number of trades ", trade_situation.getProfitableCount()) if trade_situation.getCount() > 0: Percentage = trade_situation.getProfitableCount( ) / trade_situation.getCount() print("百分比", Percentage) else: Percentage = 0 print("百分比", 0) df1 = pd.DataFrame({ "shares_ID": [files[x]], 'total number of trades': [trade_situation.getCount()], 'Profit times number of trades': trade_situation.getProfitableCount(), 'Profit Percentage': Percentage, 'Final portfolio value': [myStrategy.getBroker().getEquity()] }) kline1.overlap(scatter1) kline1.overlap(scatter2) kline1.overlap(line1) kline1.overlap(line2) kline1.overlap(line3) kline1.render(path='E:\\Stock/html_png_Total_day/' + files[x] + '.html') df_new = pd.concat([df1, df_new], ignore_index=True) df_new.to_csv("E:/Stock/html_png_Total_day/Total_Min.csv", index=False)