Esempio n. 1
0
def create_result_chart(data):

    instrulist = list(set(d.instrument for d in data))
    # x = ["{} P{}".format(localtime(d.upload_time).strftime("%Y-%m-%d %X"), d.platenum) for d in data]
    x = ["{} P{}".format(d.upload_time.strftime("%Y-%m-%d %X"), d.platenum) for d in data]

    # 均值直方图
    b = Bar(init_opts=opts.InitOpts(width='1900px'))
    b.add_xaxis(x)
    for instru in instrulist:
        mean = get_mean(data, instru)
        b.add_yaxis(instru, mean)
    b.set_global_opts(title_opts=opts.TitleOpts(title="结果mean图"))

    # sd折线图
    l = Line(init_opts=opts.InitOpts(width='1900px'))
    l.add_xaxis(x)
    for instru in instrulist:
        sd = get_sd(data, instru)
        l.add_yaxis(instru, sd, is_connect_nones=True)
    l.set_global_opts(title_opts=opts.TitleOpts(title="结果sd图", pos_top='48%'))

    grid = Grid(init_opts=opts.InitOpts(width='1900px'))
    grid.add(b, grid_opts=opts.GridOpts(pos_bottom='60%'))
    grid.add(l, grid_opts=opts.GridOpts(pos_top='60%'))
    
    return grid
Esempio n. 2
0
    def draw(self, symbol, fn_render):

        fn = get_dss() +'fut/bar/day_' + symbol + '.csv'
        df = pd.read_csv(fn)
        df1 = df.loc[:,['date','time','close']]

        n = 30
        close_list = df.apply(lambda record: float(record['close']), axis=1).tolist()
        close_list = np.array(close_list)
        ma_arr = talib.SMA(close_list, n)
        df['ma'] = ma_arr
        df['close'] = df['close'] - df['ma']
        df2 = df.loc[:,['date','time','close']]

        line1 = self.gen_line_one(df1, symbol)
        line2 = self.gen_line_two(df2)

        grid_chart = Grid(
            init_opts=opts.InitOpts(
                width="1300px",
                height="700px",
                #animation_opts=opts.AnimationOpts(animation=False),
            )
        )
        grid_chart.add(
            line1,
            grid_opts=opts.GridOpts(pos_left="5%", pos_right="3%", height="39%"),
        )
        grid_chart.add(
            line2,
            grid_opts=opts.GridOpts(
                pos_left="5%", pos_right="3%", pos_top="53%", height="39%" ),
        )

        grid_chart.render(fn_render)
Esempio n. 3
0
    def html_output(self, order, view, mode):
        """
        output function of html

        Args:
            order(int): diversified_ranking use different order
            view(View): view object
            mode(str): single or multiple
            
        Returns:
            None
            
        """
        instance = self.instance
        data = {}
        data['order'] = order
        data['chartname'] = instance.table_name
        data['describe'] = view.table.describe
        data['x_name'] = view.fx.name
        data['y_name'] = view.fy.name
        data['chart'] = Chart.chart[view.chart]
        data['classify'] = [v[0] for v in view.table.classes]
        data['x_data'] = view.X
        data['y_data'] = view.Y
        data['title_top'] = 5

        [chart, filename] = self.html_handle(data)
        grid = Grid()
        grid.add(chart,
                 grid_opts=opts.GridOpts(pos_bottom='20%', pos_top='20%'))
        if mode == 'single':
            self.page.add(grid)  #the grid is added in the same page
        elif mode == 'multiple':
            grid.render('./html/' + self.table_name + '/' +
                        filename)  #the grid is added in a new file
Esempio n. 4
0
def grid(factor, factor2, instrument):
    gridchart = Grid(init_opts=opts.InitOpts(width="100vw",
                                             height="50vh",
                                             animation_opts=opts.AnimationOpts(
                                                 animation=True)))
    gridchart.add(  #左边画最新数据
        getplot(factor,
                factor2,
                kdata_part,
                nnv,
                new_p,
                instrument,
                xaxis_index=[0, 1]),
        grid_opts=opts.GridOpts(pos_left="5%", pos_right="68%"))
    gridchart.add(  # 右边画全样本数据
        getplot(factor,
                factor2,
                kdata_all,
                nv,
                new_a,
                instrument,
                xaxis_index=None),
        grid_opts=opts.GridOpts(pos_left="40%", pos_right="5%"))

    return gridchart
Esempio n. 5
0
def KlinePlotting(target_file):
    global trend_punishment
    res = pickle.load(open(target_file, 'rb'))
    c = (Line().add_xaxis([item[0] for item in res]).add_yaxis(
        "打分",
        [item[1] for item in res],
        linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title="打分"),
        xaxis_opts=opts.AxisOpts(type_="category"),
        datazoom_opts=[
            opts.DataZoomOpts(
                type_="slider",
                xaxis_index=[0],
                range_start=80,
                range_end=100,
            )
        ],
        tooltip_opts=opts.TooltipOpts(
            trigger="axis",
            axis_pointer_type="cross",
            background_color="rgba(245, 245, 245, 0.8)",
            border_width=1,
            border_color="#ccc",
            textstyle_opts=opts.TextStyleOpts(color="#000"),
        ),
    ))

    gridChart = Grid(init_opts=opts.InitOpts(width="1000px",
                                             height="500px",
                                             animation_opts=opts.AnimationOpts(
                                                 animation=False)))
    gridChart.add(c, grid_opts=opts.GridOpts(pos_left="10%", pos_right="10%"))
    gridChart.render("score_modified_plot_new_0.002.html")
Esempio n. 6
0
    def draw(self, symbol, fn_render):
        fn = get_dss() + 'fut/bar/day_' + symbol + '.csv'
        df1 = pd.read_csv(fn)
        # print(df1.head())
        price_min = int(df1.close.min() * 0.99)
        price_max = df1.close.max()

        kline = self.gen_kline(df1, symbol)
        line_cci = self.gen_cci(df1, 100)

        grid_chart = Grid(init_opts=opts.InitOpts(
            width="1390px",
            height="700px",
            animation_opts=opts.AnimationOpts(animation=False),
        ))
        grid_chart.add(
            kline,
            grid_opts=opts.GridOpts(pos_left="10%",
                                    pos_right="8%",
                                    height="60%"),
        )
        grid_chart.add(
            line_cci,
            grid_opts=opts.GridOpts(pos_left="10%",
                                    pos_right="8%",
                                    pos_top="75%",
                                    height="17%"),
        )

        grid_chart.render(fn_render)
Esempio n. 7
0
def base_kline_grid_chart(df, signal_infos=[]):
    """ 最最最基础的 K 线图,传入的 df 只需要有 open high low close volume 即可绘制 """
    # OHLC
    kline_chart = ohlc_kline_chart(df, signal_infos=signal_infos)
    # Volume
    volume_chart = volume_bar_chart(df)
    # 把 ohlc 和 volume 图组合起来
    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1000px",
        height="800px",
        bg_color="#ffffff",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    grid_chart.add(
        kline_chart,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="55%"),
    )
    grid_chart.add(
        volume_chart,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="70%",
                                height="15%"),
    )
    return grid_chart
Esempio n. 8
0
def draw_charts(fn1, fn2):
    df1 = pd.read_csv(fn1)
    df1['datetime'] = df1['date'] + ' ' + df1['time']
    #print(df1.head())
    kline1 = gen_kline_one(df1)

    df2 = pd.read_csv(fn2)
    df2['datetime'] = df2['date'] + ' ' + df2['time']
    #print(df1.head())
    kline2 = gen_kline_two(df2)

    grid_chart = Grid(
        init_opts=opts.InitOpts(
            width="1300px",
            height="700px",
            #animation_opts=opts.AnimationOpts(animation=False),
        )
    )
    grid_chart.add(
        kline1,
        grid_opts=opts.GridOpts(pos_left="5%", pos_right="3%", height="39%"),
    )
    grid_chart.add(
        kline2,
        grid_opts=opts.GridOpts(
            pos_left="3%", pos_right="5%", pos_top="53%", height="39%" ),
    )

    fn = get_dss( ) + 'backtest/render/bar2.html'
    grid_chart.render(fn)
Esempio n. 9
0
 def grid(self, data=[]):
     grid = Grid(init_opts=opts.InitOpts(**self.chart_opt))
     for d in data:
         grid.add(
             d["chart"],
             grid_opts=opts.GridOpts(**d["setting"]),
         )
     return grid
def workarea_salary_chart(df):
    # 转换类型为浮点型
    df.low_salary, df.high_salary = df.low_salary.astype(
        float), df.high_salary.astype(float)
    # 分别求各地区平均最高薪资, 平均最低薪资
    salary = df.groupby('workarea',
                        as_index=False)[['low_salary', 'high_salary'
                                         ]].mean()  # 分别求各地区的岗位数量,并降序排列
    print(salary)
    workarea = df.groupby('workarea',
                          as_index=False)['name'].count().sort_values(
                              'name', ascending=False)
    print(workarea)
    workarea = pd.merge(workarea, salary, how='left', on='workarea')  # 合并数据表
    print(workarea)
    workarea = workarea.head(20)  # 用前20名进行绘图

    grid = Grid()
    bar = Bar()
    grid.theme = themes
    line = Line()
    line1 = Line()

    bar.add_xaxis(workarea.workarea.tolist())
    bar.add_yaxis("岗位需求量", workarea.name.tolist())
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
            title="岗位需求量排名前20地区的平均薪资水平状况",
            title_link='./chart/workarea_salary_chart.html',
            title_target='blank',
            pos_left='left',
        ),
        tooltip_opts=opts.TooltipOpts(trigger="axis",
                                      axis_pointer_type="cross",
                                      is_show=True),  # 交叉指向工具
        legend_opts=opts.LegendOpts(pos_left="80%",
                                    orient="vertical",
                                    pos_top="3%"),
    )
    # bar.set_series_opts(is_show=True, position='rightTop')
    print((workarea.name).tolist())
    print((round(workarea.high_salary * 1000)).tolist())
    # 在bar上增加Y轴,在line图上选择对应的轴向
    line.add_xaxis(workarea.workarea.tolist())
    line.add_yaxis("平均最高薪资", (round(workarea.high_salary * 1000)).tolist(),
                   yaxis_index=0)
    line1.add_xaxis(workarea.workarea.tolist())
    line1.add_yaxis("平均最低薪资", (round(workarea.low_salary * 1000)).tolist(),
                    yaxis_index=0)
    # 把line添加到bar上
    bar.overlap(line)
    bar.overlap(line1)
    # 这里如果不需要grid也可以,直接设置bar的格式,然后显示bar即可
    #bar.render_notebook()
    grid.add(chart=bar, grid_opts=opts.GridOpts(), is_control_axis_index=True)
    # grid.render("./chart/workarea_salary_chart.html")
    return grid
Esempio n. 11
0
def draw_charts():

    pz = 'CF'
    vtSymbol = 'CF'

    fn = get_dss() + 'backtest/fut/' + pz + '/day_' + vtSymbol + '.csv'
    df1 = pd.read_csv(fn)
    # df1 = df1[df1.date >= '2019-01-20']
    #df1['datetime'] = df1['date'] + ' ' + df1['time']
    df1['datetime'] = df1['date']
    price_min = int(df1.close.min() * 0.99)
    price_max = df1.close.max()

    #fn  = get_dss( )+ 'fut/engine/aberration_raw/signal_aberration_raw_duo_deal_CF.csv'
    #fn  = get_dss( )+ 'fut/engine/aberration_raw/signal_aberration_raw_kong_deal_CF.csv'

    fn = get_dss(
    ) + 'fut/engine/aberration_enhance/signal_aberration_enhance_duo_deal_CF.csv'
    #fn  = get_dss( )+ 'fut/engine/aberration_enhance/signal_aberration_enhance_kong_deal_CF.csv'

    df2 = pd.read_csv(fn)
    dt_list = df2['datetime'].tolist()
    dt_list = [dt[:10] for dt in dt_list]
    # print(dt_list)
    df2['datetime'] = dt_list

    line = gen_line(df1, vtSymbol, price_min, price_max)
    line_atr = gen_atr(df1, 10)
    line_boll = gen_boll(df1, 10, 2)
    line = line.overlap(line_boll)

    scatter_open = gen_poit_open(df2)
    scatter_close = gen_poit_close(df2)
    line = line.overlap(scatter_open)
    line = line.overlap(scatter_close)

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1300px",
        height="700px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    grid_chart.add(
        line,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="60%"),
    )
    grid_chart.add(
        line_atr,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="76%",
                                height="17%"),
    )

    fn = get_dss() + 'backtest/render/k_deal_aberration_' + vtSymbol + '.html'
    grid_chart.render(fn)
Esempio n. 12
0
 def to_single_html(self):
     if len(self.charts) == 0:
         self.generate_views()
     page = Page()
     self.page = Page()
     for chart in self.charts:
         grid = Grid()
         grid.add(chart,
                  grid_opts=opts.GridOpts(pos_bottom='20%', pos_top='20%'))
         self.page.add(grid)
     self.page.render(self.charts_dir + self.name + '.html')
Esempio n. 13
0
def draw_charts():

    # #fn = get_dss() +'backtest/fut/m/' + 'm_01_05.csv'
    # fn = get_dss() +'backtest/fut/m/' + 'day_m.csv'
    # df1 = pd.read_csv(fn)
    # df1['datetime'] = df1['date'] + ' ' + df1['time']
    # #print(df1.head())
    # kline1 = gen_kline_one(df1)
    #
    # fn = get_dss() +'backtest/fut/y/' + 'day_y.csv'
    # df2 = pd.read_csv(fn)
    # df2['datetime'] = df2['date'] + ' ' + df2['time']
    # #print(df1.head())
    # kline2 = gen_kline_two(df2)

#--------------------------------------------------------------------------

    fn = 'bar_kamaresid_raw_duo_CF.csv'
    fn = 'bar_kamaresid_raw_duo_m.csv'

    df = pd.read_csv(fn)
    df.columns = ['date','time','close','q1','q2','resid']
    df1 = df.loc[:,['date','time','close']]
    df2 = df.loc[:,['date','time','resid']]
    df2['close'] = df2['resid']
    print(df1.head(3))
    print(df2.head(3))
    s1 = 'close'
    s2 = 'resid'

    line1 = gen_line_one(df1)
    line2 = gen_line_two(df2)


    grid_chart = Grid(
        init_opts=opts.InitOpts(
            width="1300px",
            height="700px",
            #animation_opts=opts.AnimationOpts(animation=False),
        )
    )
    grid_chart.add(
        line1,
        grid_opts=opts.GridOpts(pos_left="5%", pos_right="3%", height="39%"),
    )
    grid_chart.add(
        line2,
        grid_opts=opts.GridOpts(
            pos_left="5%", pos_right="3%", pos_top="53%", height="39%" ),
    )

    fn = get_dss( )+ 'backtest/render/k_k_' + s1 + '_' + s2 + '.html'
    grid_chart.render(fn)
Esempio n. 14
0
    def bar_base(self) -> Bar:
        start = datetime.datetime.now()

        dispose_unit = []
        done = []
        undo = []
        count_dispose_unit = 30

        event_counts = Event.objects.filter(Q(achieve=1)).values('dispose_unit').annotate(count=Count('dispose_unit')).values('dispose_unit', 'count').order_by('-count')
        event_counts = list(event_counts)
        sum_of_done = 0
        sum_of_undo = 0
        # print(len(event_counts))
        # print(event_counts)
        for i in range(0,count_dispose_unit):
            undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit = event_counts[i]['dispose_unit']))
            undo_event_num = len(undo_event)
            dispose_unit_name = DisposeUnit.objects.filter(id=event_counts[i]['dispose_unit']).values("name")[0]['name']
            dispose_unit.append(dispose_unit_name)
            done.append(event_counts[i]['count'])
            undo.append(undo_event_num)
        for i in range(count_dispose_unit,len(event_counts)):
            undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit=event_counts[i]['dispose_unit']))
            undo_event_num = len(undo_event)
            sum_of_done = sum_of_done + event_counts[i]['count']
            sum_of_undo = sum_of_undo + undo_event_num
        other_unit_num = len(event_counts) - count_dispose_unit
        dispose_unit.append("其他"+str(other_unit_num)+"个部门总和")
        done.append(sum_of_done)
        undo.append(sum_of_undo)
        c = (
            Bar()
                .add_xaxis(dispose_unit)
                .add_yaxis("按期完成", done, stack="stack1",category_gap="60%")
                .add_yaxis("逾期完成", undo, stack="stack1",category_gap="60%")
                .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
                .set_global_opts(
                xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
                title_opts=opts.TitleOpts(title="处理事件最多的部门"),
                datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],

                )
        )

        grid = Grid()

        grid.add(c, grid_opts=opts.GridOpts(pos_bottom="20%"))

        c = grid.dump_options_with_quotes()

        end = datetime.datetime.now()
        print("Bar: " + str(end - start))
        return c
Esempio n. 15
0
def weak_user(title):
    all_day = parse_day(7)
    x_data = [str(i.day) + '日' for i in all_day]
    y_data = [get_long(i) for i in all_day]
    bar = (Bar(init_opts=opts.InitOpts(
        theme=ThemeType.DARK, width="1400px",
        height='1000px')).add_xaxis(x_data).add_yaxis(
            "增长用户",
            [i[1] for i in y_data],
            yaxis_index=0,
            color="#d14a61",
        ).extend_axis(yaxis=opts.AxisOpts(
            type_="value",
            name="活跃用户",
            min_=0,
            max_=max([i[0] for i in y_data]),
            position="left",
            axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(
                color="#675bba")),
            axislabel_opts=opts.LabelOpts(formatter="{value} 人"),
            splitline_opts=opts.SplitLineOpts(
                is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)),
        )).set_global_opts(
            yaxis_opts=opts.AxisOpts(
                name="增长用户",
                type_="value",
                min_=0,
                max_=max([i[1] for i in y_data]),
                position="right",
                offset=80,
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(color="#5793f3")),
                axislabel_opts=opts.LabelOpts(formatter="{value} 人"),
            ),
            title_opts=opts.TitleOpts(title=title),
            tooltip_opts=opts.TooltipOpts(trigger="axis",
                                          axis_pointer_type="cross"),
        ))
    line = (Line(init_opts=opts.InitOpts(
        theme=ThemeType.DARK, width="1400px", height='1000px')).add_xaxis(
            x_data).add_yaxis(
                "活跃用户",
                [i[0] for i in y_data],
                yaxis_index=1,
                color="#675bba",
                label_opts=opts.LabelOpts(is_show=False),
            ))
    bar.overlap(line)
    grid = Grid(init_opts=opts.InitOpts(
        theme=ThemeType.DARK, width="1400px", height='1000px'))
    grid.add(bar, opts.GridOpts(), is_control_axis_index=True)
    return grid
Esempio n. 16
0
 def grid(self):
     line = Line('折线图', width=1200)
     attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
     line.add('最高气温', attr, [11, 12, 14, 11, 12, 15, 16], mark_point=['max', 'min'], \
              mark_line=['average'])
     line.add('最低气温', attr, [1, -1, 2, 5, 2, 3, 0], mark_point=['max', 'min'], \
              mark_line=['average'], legend_pos='20%')
     attr = ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
     v1 = [11, 12, 14, 10, 11, 10]
     pie = Pie('饼图', title_pos='55%')
     pie.add('', attr, v1, radius=[45, 65], center=[65, 50], legend_pos='80%', \
             legend_orient='vertical')
     grid = Grid()
     grid.add(line, grid_right='55%')
     grid.add(pie, grid_left='60%')
Esempio n. 17
0
def makechart(sumary,day,shdeath,shcured,shsum,shpending,newconfirmed,newpending):
    title = "上海新型冠状病毒统计"
    grid_chart = Grid()
    grid_chart.add(
        total_trend(day,shdeath,shcured,shsum,shpending),
        grid_opts=GridOpts(height="57%")
    )
    grid_chart.add(
        new_trend(day,newconfirmed,newpending),
        grid_opts=GridOpts(pos_top="75%",)
    )
    page = Page(page_title=title)
    page.add(
        grid_chart,        
        # calendar_base(),
        map_visualmap(sumary),
        )
    page.render(outfile)
Esempio n. 18
0
def to_treemap(data, proj, version):
    complexity = {'name': f'{proj}-{version}', 'children': []}
    extract(complexity, 'complexity', data)
    maintainability = {'name': f'{proj}-{version}', 'children': []}
    extract(maintainability, 'maintainability', data)
    testability = {'name': f'{proj}-{version}', 'children': []}
    extract(testability, 'testability', data)
    readability = {'name': f'{proj}-{version}', 'children': []}
    extract(readability, 'readability', data)
    reusability = {'name': f'{proj}-{version}', 'children': []}
    extract(reusability, 'reusability', data)
    inheritance = {'name': f'{proj}-{version}', 'children': []}
    extract(inheritance, 'inheritance', data)

    treemap = TreeMap()
    for indicator in [
            'complexity', 'maintainability', 'testability', 'readability',
            'reusability', 'inheritance'
    ]:
        treemap = treemap.add(series_name=indicator,
                              data=[locals()[indicator]],
                              leaf_depth=2,
                              roam=False,
                              label_opts=opts.LabelOpts(position='inside'))

    treemap = (treemap.set_global_opts(
        tooltip_opts=opts.TooltipOpts(formatter='{b}<br/>{a}: {c}'),
        toolbox_opts=opts.ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
            magic_type=opts.ToolBoxFeatureMagicTypeOpts(is_show=False),
            data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
            brush=opts.ToolBoxFeatureBrushOpts(type_='clear'))),
        legend_opts=opts.LegendOpts(is_show=True,
                                    selected_mode='single',
                                    pos_top='7%',
                                    orient='horizontal',
                                    padding=0),
        title_opts=opts.TitleOpts(
            title=f'Code Quality Treemap of {proj}-{version}',
            pos_left='center')))
    grid = Grid()
    grid.add(treemap, grid_opts=opts.GridOpts(pos_top='100%'))
    return grid
Esempio n. 19
0
def margin_chart(chart: pyecharts.charts.chart.Chart,
                 margin: list = []) -> Grid:
    """
    Description:
    1. Arange `chart` in a grid to set the margin

    Params:
    chart
    margin: [top, left, bottom, right]

    Return:
    grid
    """
    margin = margin or [0, 0, 0, 0]
    grid = Grid()
    grid.add(chart,
             grid_opts=opts.GridOpts(pos_top=margin[0] or None,
                                     pos_left=margin[1] or None,
                                     pos_bottom=margin[2] or None,
                                     pos_right=margin[3] or None))
    return grid
Esempio n. 20
0
def to_linechart(data, proj):
    versions = [version['version_name'] for version in data]
    linechart = Line().add_xaxis(xaxis_data=versions)
    for indicator in [
            'complexity', 'maintainability', 'testability', 'readability',
            'reusability', 'inheritance'
    ]:
        linechart = linechart.add_yaxis(
            series_name=indicator,
            y_axis=[round(version[indicator], 2) for version in data],
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=False),
            linestyle_opts=opts.LineStyleOpts(width=2),
        )

    linechart = (linechart.set_global_opts(
        tooltip_opts=opts.TooltipOpts(trigger="axis",
                                      axis_pointer_type="cross"),
        xaxis_opts=opts.AxisOpts(boundary_gap=False),
        yaxis_opts=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(formatter="{value}"),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        toolbox_opts=opts.ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
            magic_type=opts.ToolBoxFeatureMagicTypeOpts(is_show=False),
            data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
            brush=opts.ToolBoxFeatureBrushOpts(type_='clear'))),
        legend_opts=opts.LegendOpts(is_show=True,
                                    pos_top='middle',
                                    pos_left='1%',
                                    orient='vertical',
                                    padding=0),
        datazoom_opts=opts.DataZoomOpts(type_='slider',
                                        range_start=0,
                                        range_end=100),
        title_opts=opts.TitleOpts(title=f'Code Quality Linechart of {proj}',
                                  pos_left='center')))
    grid = Grid()
    grid.add(linechart, grid_opts=opts.GridOpts(pos_left='150'))
    return grid
Esempio n. 21
0
def bolling_backtest_grid_chart(df):
    """完整布林线回测图,传入的 df 需要有 open high low close volume upper median lower signal equity_curve 即可绘制 """

    # 布林线的 OHLC 图
    kline_chart = bolling_kline_chart(df, 3)  # 这里要控制3个轴同时缩放
    # Volume
    volume_chart = volume_bar_chart(df)
    # 资金曲线
    equity_chart = equity_line_chart(df)
    # 组合起来
    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1000px",
        height="800px",
        bg_color="#ffffff",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    grid_chart.add(
        kline_chart,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="40%"),
    )
    grid_chart.add(
        volume_chart,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="55%",
                                height="10%"),
    )
    grid_chart.add(
        equity_chart,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="75%",
                                height="10%"),
    )
    return grid_chart
Esempio n. 22
0
    def drawChart(self,
                  data=None,
                  ma=None,
                  vol=None,
                  blist=None,
                  slist=None,
                  positlist=None):
        koverlap = self.kline(data=data,
                              blist=blist,
                              slist=slist,
                              positlist=positlist)

        datazoom = [
            opts.DataZoomOpts(
                pos_bottom="0px",
                range_start=50.0,
                range_end=100.00,
            )
        ]

        koverlap.set_global_opts(
            xaxis_opts=opts.AxisOpts(is_scale=True),
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),
            datazoom_opts=datazoom,
            title_opts=opts.TitleOpts(title="eeeee"),
        )

        grid = Grid(init_opts=opts.InitOpts())
        if koverlap != None:
            grid.add(
                koverlap,
                grid_opts=opts.GridOpts(pos_top="5%"),
            )

        return grid
Esempio n. 23
0
def gen_grid_chart(
    overlap_kline_line: Kline,
    width: str,
    height: str,
    bar_plot_list: typing.List[Bar],
    filename: str,
) -> Grid:
    index = 0
    grid_chart = Grid(init_opts=opts.InitOpts(
        width=width,
        height=height,
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    pos_top_list, height_list = gen_pos_top_height(plot_list=bar_plot_list)
    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(
            pos_left="10%",
            pos_right="8%",
            pos_top=f"{pos_top_list[index]}%",
            height=f"{height_list[index]}%",
        ),
    )
    index += 1
    bar_plot_list = filter_bar_plot(bar_plot_list)
    for bar_plot in bar_plot_list:
        grid_chart.add(
            bar_plot,
            grid_opts=opts.GridOpts(
                pos_left="10%",
                pos_right="8%",
                pos_top=f"{pos_top_list[index]}%",
                height=f"{height_list[index]}%",
            ),
        )
        index += 1
    grid_chart.render(filename)
    return grid_chart
Esempio n. 24
0
def makechart(data, debug=False):
    day, shsum, shpending, shcured, shdeath, shsum_date, new_date, newconfirmed, newpending = data_process(
        data)
    title = "上海新型冠状病毒统计"
    grid_chart = Grid()
    grid_chart.add(total_trend(day, shdeath, shcured, shsum, shpending),
                   grid_opts=GridOpts(height="57%"))
    grid_chart.add(new_trend(day, newconfirmed, newpending),
                   grid_opts=GridOpts(pos_top="75%", ))
    bk = bkey()
    if debug:
        ak = bk.ak_dev
    else:
        ak = bk.ak_web
        get_detail()
    with open(shsumary, 'r', encoding='utf-8') as f:
        j = json.loads(f.read())
    sumary = [(k, j[k]) for k in j.keys()]
    tab = Tab(page_title=title)
    tab.add(grid_chart, "趋势")
    tab.add(map_visualmap(sumary), "区县分布")
    tab.add(bmap_base(BAIDU_AK=ak), '详细地图')
    tab.render(outfile)
Esempio n. 25
0
def ice_ga_shrinkage_chart(df):
    """ice ga shrinkage"""

    os_ma = pyecharts_float_values_data(df, 'os_ma', 6)
    # 信号信息
    signal_infos = bolling_signals_data(df)

    # k 线
    ohlc_chart = ohlc_kline_chart(df,
                                  x_axis_count=3,
                                  signal_infos=signal_infos)
    # os_ma
    os_ma_line = Line().add_xaxis(
        xaxis_data=pyecharts_time_data(df)).add_yaxis(
            y_axis=os_ma,
            series_name='os_ma',
            is_symbol_show=False,
            label_opts=None,
            is_smooth=True,
        )
    # 资金曲线
    equity_chart = equity_line_chart(df)

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1000px",
        height="600px",
        bg_color="#ffffff",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    grid_chart.add(
        ohlc_chart,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="5%",
                                height="30%"),
    )
    grid_chart.add(
        os_ma_line,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="40%",
                                height="20%"),
    )
    grid_chart.add(
        equity_chart,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="70%",
                                height="18%"),
    )
    return grid_chart
Esempio n. 26
0
def draw_charts():

    vtSymbol = 'CF005'

    fn = get_dss() + 'fut/bar/min5_' + vtSymbol + '.csv'
    df1 = pd.read_csv(fn)
    df1 = df1[df1.date >= '2019-11-20']
    df1['datetime'] = df1['date'] + ' ' + df1['time']
    # print(df1.head())

    fn = get_dss() + 'fut/engine/rsiboll/signal_rsiboll_duo_deal_CF.csv'
    df2 = pd.read_csv(fn)

    kline = gen_kline(df1)
    line_rsi = gen_rsi(df1)
    line_atr = gen_atr(df1)
    scatter_deal_one = gen_poit_one(df2)
    scatter_deal_two = gen_poit_two(df2)
    scatter_deal_three = gen_poit_three(df2)

    kline_scatter = kline.overlap(scatter_deal_one)
    kline_scatter = kline_scatter.overlap(scatter_deal_two)
    kline_scatter = kline_scatter.overlap(scatter_deal_three)

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1000px",
        height="700px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    grid_chart.add(
        kline_scatter,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="45%"),
    )
    grid_chart.add(
        line_rsi,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="57%",
                                height="17%"),
    )

    grid_chart.add(
        line_atr,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="76%",
                                height="17%"),
    )

    grid_chart.render("k_deal_rsi_atr.html")
Esempio n. 27
0
def draw_charts():
    vtSymbol = 'm'

    fn = get_dss() + 'backtest/fut/m/day_' + vtSymbol + '.csv'
    df1 = pd.read_csv(fn)
    #df1 = df1[df1.date >= '2019-10-12']
    df1['datetime'] = df1['date'] + ' ' + df1['time']
    # print(df1.head())

    kline = gen_kline(df1)
    line_rsi = gen_rsi(df1)
    line_atr = gen_atr(df1)

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1500px",
        height="700px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    grid_chart.add(
        kline,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="8%", height="45%"),
    )
    grid_chart.add(
        line_rsi,
        grid_opts=opts.GridOpts(pos_left="3%",
                                pos_right="8%",
                                pos_top="57%",
                                height="17%"),
    )

    grid_chart.add(
        line_atr,
        grid_opts=opts.GridOpts(pos_left="3%",
                                pos_right="8%",
                                pos_top="76%",
                                height="17%"),
    )

    fn = get_dss() + 'backtest/render/bar_ti_ti.html'
    grid_chart.render(fn)
Esempio n. 28
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
Esempio n. 29
0
def plot_kline(df, rendered=True, col=""):
    """
    针对 dataframe 直接画出标准看盘软件的上k线图下成交量图的形式

    :param df:
    :param rendered:
    :param col:
    :return:
    """
    kline = (
        Kline()
        .add_xaxis(xaxis_data=list(df["date"]))
        .add_yaxis(
            series_name="",
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ef232a",
                color0="#14b143",
                border_color="#ef232a",
                border_color0="#14b143",
            ),
            y_axis=list(zip(df["open"], df["close"], df["high"], df["low"])),
            markpoint_opts=opts.MarkPointOpts(
                data=[
                    opts.MarkPointItem(type_="max", name="最大值"),
                    opts.MarkPointItem(type_="min", name="最小值"),
                ],
                symbol="pin",
                symbol_size=[56, 40],
                # label_opts=opts.LabelOpts(color="#CCFFFF",position=["top", "bottom"])
            ),
        )
        .set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=True,
                    type_="slider",
                    range_start=50,
                    range_end=100,
                    xaxis_index=[0, 1],
                ),
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    range_start=50,
                    range_end=100,
                    xaxis_index=1,
                ),
            ],
            tooltip_opts=opts.TooltipOpts(
                is_show=True,
                trigger="axis",
                trigger_on="mousemove",
                axis_pointer_type="cross",
            ),
        )
    )
    if col:
        line = (
            Line()
            .add_xaxis(xaxis_data=list(df["date"]))
            .add_yaxis(
                series_name="",
                y_axis=list(df[col]),
                is_smooth=True,
                linestyle_opts=opts.LineStyleOpts(opacity=0.5),
                label_opts=opts.LabelOpts(is_show=False),
            )
        )
        kline = kline.overlap(line)

    if "volume" in df.columns:
        vl = list(df["volume"])
    elif "amount" in df.columns:
        vl = list(df["amount"])
    else:
        vl = [0 for _ in range(len(df))]
    bar = (
        Bar()
        .add_js_funcs("var barData = {}".format(list(df["close"] - df["open"])))
        .add_xaxis(xaxis_data=list(df["date"]))
        .add_yaxis(
            series_name="",
            yaxis_data=vl,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(
                color=JsCode(
                    """
                function(params) {
                    var colorList;
                    if (barData[params.dataIndex]>0) {
                        colorList = '#ef232a';
                    } else {
                        colorList = '#14b143';
                    }
                    return colorList;
                }
                """
                )
            ),
        )
        .set_global_opts(
            tooltip_opts=opts.TooltipOpts(
                is_show=True,
                trigger="axis",
                trigger_on="mousemove",
                axis_pointer_type="cross",
            ),
        )
    )
    grid_chart = Grid()
    grid_chart.add_js_funcs("var barData = {}".format(list(df["close"] - df["open"])))
    grid_chart.add(
        kline,
        grid_opts=opts.GridOpts(
            pos_left="10%", pos_right="1%", pos_top="2%", height="65%"
        ),
    )

    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(
            pos_left="10%", pos_right="1%", pos_top="71%", height="22%"
        ),
    )
    if rendered:
        return grid_chart.render_notebook()
    else:
        return grid_chart
Esempio n. 30
0
    def bar_base(self) -> Bar:
        # start = datetime.datetime.now()
        #
        # dispose_unit = []
        # done = []
        # undo = []
        # count_dispose_unit = 30
        #
        # event_counts = Event.objects.all().values('dispose_unit').annotate(count=Count('dispose_unit')).values('dispose_unit', 'count').order_by('-count')
        # print(event_counts)
        # event_counts = list(event_counts)
        # sum_of_done = 0
        # sum_of_undo = 0
        # # print(len(event_counts))
        # # print(event_counts)
        # for i in range(0,count_dispose_unit):
        #     undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit=event_counts[i]['dispose_unit']))
        #     undo_event_num = len(undo_event)
        #     dispose_unit_name = DisposeUnit.objects.filter(id=event_counts[i]['dispose_unit']).values("name")[0]['name']
        #     dispose_unit.append(dispose_unit_name)
        #     done.append(event_counts[i]['count'])
        #     undo.append(undo_event_num)
        # for i in range(count_dispose_unit,len(event_counts)):
        #     undo_event = Event.objects.filter(Q(achieve=3) & Q(dispose_unit=event_counts[i]['dispose_unit']))
        #     undo_event_num = len(undo_event)
        #     sum_of_done = sum_of_done + event_counts[i]['count']
        #     sum_of_undo = sum_of_undo + undo_event_num
        # other_unit_num = len(event_counts) - count_dispose_unit
        # dispose_unit.append("其他"+str(other_unit_num)+"个部门总和")
        # done.append(sum_of_done)
        # undo.append(sum_of_undo)
        # c = (
        #     Bar()
        #         .add_xaxis(dispose_unit)
        #         .add_yaxis("按期完成", done, stack="stack1",category_gap="60%")
        #         .add_yaxis("逾期完成", undo, stack="stack1",category_gap="60%")
        #         .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        #         .set_global_opts(
        #         xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        #         # title_opts=opts.TitleOpts(title="处理事件最多的部门"),
        #         datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
        #
        #         )
        # )
        #
        # grid = Grid()
        #
        # grid.add(c, grid_opts=opts.GridOpts(pos_bottom="20%"))
        #
        # c = grid.dump_options_with_quotes()
        #
        # end = datetime.datetime.now()
        # print("Bar: " + str(end - start))

        start = datetime.date(2016, 6, 6)
        end = datetime.date(2019, 6, 6)
        y_lists = []
        x_list = []
        b = Bar()

        event_counts = DisposeUnit.objects.all().values(
            'name', 'number').order_by('-number')
        for achieve in achieves:
            new_list = [achieve.name]
            limit = 0
            for dispose_unit_node in event_counts:
                dispose_unit = DisposeUnit.objects.get(
                    name=dispose_unit_node['name'])
                if limit < 30:
                    new_len = len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(achieve=achieve)))
                    new_list.append(new_len)
                    new_len = 0
                else:
                    new_len += len(
                        Event.objects.filter(
                            Q(create_time__range=(start, end))
                            & Q(dispose_unit=dispose_unit)
                            & Q(achieve=achieve)))
                limit += 1
            new_list.append(new_len)
            y_lists.append(new_list)
        limit = 0
        for dispose_unit_node in event_counts:
            if limit >= 30:
                break
            x_list.append(dispose_unit_node['name'])
            limit += 1
        x_list.append("其他")

        b.add_xaxis(x_list)
        for y_list in y_lists:
            b.add_yaxis(y_list[0],
                        y_list[1:],
                        stack="stack1",
                        category_gap="60%")
        b.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) \
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
            # title_opts=opts.TitleOpts(title="处理事件最多的部门"),
            datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], )
        c = (b)

        grid = Grid()

        grid.add(c, grid_opts=opts.GridOpts(pos_bottom="20%"))

        c = grid.dump_options_with_quotes()

        return c