예제 #1
0
 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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
파일: charts.py 프로젝트: ccpic/datasite
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
예제 #5
0
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
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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')
예제 #10
0
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'
]]
예제 #11
0
    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')
예제 #12
0
    # 设置饼图(环形图)半径范围,单位为百分比
    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"
    )
예제 #13
0
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
예제 #14
0
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
예제 #15
0
 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
예제 #16
0
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
예제 #17
0
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
예제 #18
0
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")
예제 #19
0
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
예제 #20
0
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)