예제 #1
0
 def dayloss_line_base(self, x, y, t, st):
     c = (Line(
         init_opts=opts.InitOpts(width="1000px", height="500px")
     ).add_xaxis(x).add_yaxis("线损率(%)", y, is_smooth=True).set_global_opts(
         tooltip_opts=opts.TooltipOpts(is_show=True,
                                       trigger="axis",
                                       axis_pointer_type="cross"),
         title_opts=opts.TitleOpts(title=t, subtitle=st),
         xaxis_opts=opts.AxisOpts(
             axislabel_opts=opts.LabelOpts(rotate=-90),
             max_interval=366,
             type_="category",
             axispointer_opts=opts.AxisPointerOpts(is_show=True,
                                                   type_="shadow"),
         ),
         yaxis_opts=opts.AxisOpts(
             axislabel_opts=opts.LabelOpts(formatter="{value} %"),
             axistick_opts=opts.AxisTickOpts(is_show=True),
             splitline_opts=opts.SplitLineOpts(is_show=True),
         ),
         toolbox_opts=opts.ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
             save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                 pixel_ratio=2, background_color='white'),
             restore=opts.ToolBoxFeatureRestoreOpts(is_show=False),
             data_view=opts.ToolBoxFeatureDataViewOpts(is_show=False),
             data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
             magic_type=opts.ToolBoxFeatureMagicTypeOpts(is_show=False),
             brush=opts.ToolBoxFeatureBrushOpts(type_='clear'),
         ))).set_series_opts(
             label_opts=opts.LabelOpts(is_show=False),
             markline_opts=opts.MarkLineOpts(
                 data=[
                     opts.MarkLineItem(y=6),
                 ],
                 label_opts=opts.LabelOpts(is_show=False),
             ),
         ))
     return c
 def __init__(self, title: str, output: str):
     self.title = title
     self.output = output
     self.datas = []
     self.chart = (Line(init_opts=opts.InitOpts(
         page_title=self.title,
         theme=ThemeType.DARK,
         width="1280px",
         height="720px",
     )).set_global_opts(
         title_opts=opts.TitleOpts(title=self.title),
         xaxis_opts=opts.AxisOpts(type_="value",
                                  is_scale=True,
                                  split_number=10,
                                  name="bitrate/kbps"),
         yaxis_opts=opts.AxisOpts(type_="value", is_scale=True,
                                  name="vmaf"),
         toolbox_opts=opts.ToolboxOpts(
             is_show=True,
             orient="vertical",
             pos_left="right",
             feature=opts.ToolBoxFeatureOpts(
                 save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                     title="save as image", is_show=True),
                 restore=opts.ToolBoxFeatureRestoreOpts(is_show=False),
                 data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
                 data_view=opts.ToolBoxFeatureDataViewOpts(
                     is_show=False, is_read_only=True, title="data"),
                 magic_type=opts.ToolBoxFeatureMagicTypeOpts(is_show=False),
                 brush=opts.ToolBoxFeatureBrushOpts(type_=[]))),
         legend_opts=opts.LegendOpts(pos_top="bottom"),
         tooltip_opts=opts.TooltipOpts(
             is_show=True,
             formatter=pyecharts_utils.JsCode(
                 "function(x) {return x.seriesName + '<br/>bitrate&nbsp;&nbsp;'+ x.data[0] + '&nbsp;kbps<br/>vmaf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + x.data[1];}"
             ))))
예제 #3
0
            # 配置各个工具箱
            feature=opts.ToolBoxFeatureOpts(

                # 保存工具
                opts.ToolBoxFeatureSaveAsImageOpts(
                    # 是否显示
                    is_show=True,
                    # 提示语
                    title="保存为图片",
                ),

                # 还原工具
                opts.ToolBoxFeatureRestoreOpts(
                    # 是否显示该工具
                    is_show=True,
                    # 提示语
                    title="还原",
                ),

                # 数据视图工具
                opts.ToolBoxFeatureDataViewOpts(
                    # 是否显示该工具
                    is_show=True,
                    # 提示语
                    title="数据视图",
                    # 是否不可编辑
                    is_read_only=False,
                ),

                # 缩放工具配置项,直角坐标系适用
                opts.ToolBoxFeatureDataZoomOpts(
예제 #4
0
    def plot_ground_truth_analysis(
        all_score_columns: typing.List[str],
        title: str,
        output_path: str,
        df: pd.DataFrame,
        add_wrong_candidates: bool = False,
        wrong_candidates_score_column: str = None,
    ) -> None:
        """
        use pyechart to plot html interactive figure
        """
        df_processed = copy.deepcopy(df)
        for each_col in df_processed.columns:
            df_processed[each_col] = pd.to_numeric(df_processed[each_col],
                                                   errors='ignore')

        xaxis_labels = []
        memo = defaultdict(list)

        groupby_res = df_processed[df_processed["evaluation_label"] ==
                                   1].groupby(["column", "row"])
        for key, each_group in reversed(tuple(groupby_res)):
            if add_wrong_candidates:
                df_wrong_examples = df_processed[(df_processed["column"] == key[0]) &
                                                 (df_processed["row"] == key[1]) &
                                                 (df_processed["evaluation_label"] == -1)] \
                                        .sort_values(by=[wrong_candidates_score_column], ascending=False).iloc[:3, :]
                # add wrong candidate information
                for _, each_row in df_wrong_examples.iterrows():
                    longest_string = max(each_row["kg_labels"].split("|"),
                                         key=len)
                    xaxis_labels.append(each_row["label_clean"] +
                                        " \n({})".format(longest_string))
                    for each_score_column in all_score_columns:
                        memo[each_score_column].append("{:.2f}".format(
                            each_row[each_score_column]))

            # add ground truth information
            xaxis_labels.append(each_group["label_clean"].iloc[0])
            for each_score_column in all_score_columns:
                memo[each_score_column].append("{:.2f}".format(
                    each_group[each_score_column].iloc[0]))
        # build figure
        bar = Bar()
        bar.add_xaxis(xaxis_labels)
        for k, v in memo.items():
            bar.add_yaxis(k, v)

        # set the global options
        bar.set_global_opts(
            title_opts=opts.TitleOpts(title=title, pos_left='40%'),
            legend_opts=opts.LegendOpts(pos_left="center",
                                        pos_top="bottom",
                                        orient='horizontal'),
            brush_opts=opts.BrushOpts(),
            toolbox_opts=opts.ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
                save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                    title="save as image"),
                magic_type=opts.ToolBoxFeatureMagicTypeOpts(
                    line_title="switch to line chart",
                    bar_title="switch to bar chart",
                    stack_title="switch to stacked values",
                    tiled_title="switch to tiled values"),
                data_zoom=opts.ToolBoxFeatureDataZoomOpts(
                    zoom_title="zoom in", back_title="zoom reset"),
                restore=opts.ToolBoxFeatureRestoreOpts(title="reset"),
                data_view=opts.ToolBoxFeatureDataViewOpts(
                    title="Data table view",
                    lang=["Table view", "Close", "Refresh"],
                ),
                brush=opts.ToolBoxFeatureBrushOpts(
                    rect_title="rectangle choice",
                    polygon_title="polygon choice",
                    clear_title="clear choices",
                    keep_title="keep choices"))),
            datazoom_opts=opts.DataZoomOpts(orient="vertical"),
            # yaxis_opts=opts.AxisOpts(name='labels', name_gap=5000, name_rotate=15),
            tooltip_opts=opts.TooltipOpts(is_show=True,
                                          trigger="axis",
                                          axis_pointer_type="shadow"),
            xaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(
                is_inside=True,
                length=850,
                linestyle_opts=opts.LineStyleOpts(type_="dotted",
                                                  opacity=0.5))))

        # do not shown bar label values
        bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

        bar.reversal_axis()

        grid = (Grid(init_opts=opts.InitOpts(
            width="1500px",
            height="1000px",
            page_title="Table Linker visualization page")).add(
                bar,
                grid_opts=opts.GridOpts(pos_top='5%',
                                        pos_bottom="10%",
                                        pos_right='5%',
                                        pos_left="20%")))
        grid.render(output_path + ".html")
예제 #5
0
파일: cal_dy.py 프로젝트: merrygreek/loss
    def day_sxdl(self, x, mc, a, b, c, k):
        c = (Line(
            init_opts=opts.InitOpts(width="1000px", height="500px")
        ).add_xaxis(x).add_yaxis("电压A", a, is_smooth=True).add_yaxis(
            "电压B", b, is_smooth=True).add_yaxis(
                "电压C", c, is_smooth=True).set_global_opts(
                    tooltip_opts=opts.TooltipOpts(is_show=True,
                                                  trigger="axis",
                                                  axis_pointer_type="cross"),
                    title_opts={
                        'text': mc,
                        'subtext': None
                    },
                    xaxis_opts=opts.AxisOpts(
                        axislabel_opts=opts.LabelOpts(rotate=-90),
                        max_interval=366,
                        type_="category",
                        axispointer_opts=opts.AxisPointerOpts(is_show=True,
                                                              type_="shadow"),
                    ),
                    yaxis_opts=opts.AxisOpts(
                        axislabel_opts=opts.LabelOpts(formatter="{value} v"),
                        axistick_opts=opts.AxisTickOpts(is_show=True),
                        splitline_opts=opts.SplitLineOpts(is_show=True),
                    ),
                    toolbox_opts=opts.
                    ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
                        save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                            pixel_ratio=2, background_color='white'),
                        restore=opts.ToolBoxFeatureRestoreOpts(is_show=False),
                        data_view=opts.ToolBoxFeatureDataViewOpts(
                            is_show=False),
                        data_zoom=opts.ToolBoxFeatureDataZoomOpts(
                            is_show=False),
                        magic_type=opts.ToolBoxFeatureMagicTypeOpts(
                            is_show=False),
                        brush=opts.ToolBoxFeatureBrushOpts(type_='clear'),
                    ))).set_series_opts(label_opts=opts.LabelOpts(
                        is_show=False), ).extend_axis(
                            yaxis=opts.AxisOpts(name='方差',
                                                axislabel_opts=opts.LabelOpts(
                                                    formatter="{value} "))))
        line1 = Line().add_xaxis(x).add_yaxis(
            "方差",
            k,
            yaxis_index=1,
            is_smooth=True,
            linestyle_opts=opts.LineStyleOpts(
                color="black", width=2, type_="solid")).set_series_opts(
                    label_opts=opts.LabelOpts(is_show=False), )
        c.overlap(line1)
        return c


#     def day_loss_1(self,x,y,t,st,z,m):
#         c = self.dayloss_line_base(x,y,t,st)
#         c = c.extend_axis(
#                 yaxis=opts.AxisOpts(
#                     axislabel_opts=opts.LabelOpts(formatter="{value} kWh")
#                 )
#             ).extend_axis(
#                 yaxis=opts.AxisOpts(
#                     name = '数据完整率',
#                     position = 'right',
#                     offset = 62,
#                     axislabel_opts=opts.LabelOpts(formatter="{value} "),
#                     axisline_opts=opts.AxisLineOpts(
#                         linestyle_opts=opts.LineStyleOpts(color="#675bba")
#                     ),

#                 )
#             )

#         line = Line().add_xaxis(x).add_yaxis("供入电量", z,yaxis_index=1,is_smooth=True).set_series_opts(
#                 label_opts=opts.LabelOpts(is_show=False), )

#         line_1 = Line().add_xaxis(x).add_yaxis("数据完整率", m,yaxis_index=2).set_series_opts(
#                 label_opts=opts.LabelOpts(is_show=False), )

#         c.overlap(line)
#         c.overlap(line_1)
#         return c

#     def day_loss_2(self,x,y,t,st,a,b):
#         c = self.dayloss_line_base(x,y,t,st)
#         c = c.extend_axis(
#                 yaxis=opts.AxisOpts(
#                     axislabel_opts=opts.LabelOpts(formatter="{value} kWh")
#                 )
#             )
#         line = Line().add_xaxis(a).add_yaxis("用电量", b,yaxis_index=1,is_smooth=True).set_series_opts(
#             label_opts=opts.LabelOpts(is_show=False), )

#         c.overlap(line)
#         return c

# class electricity():
#     """docstring for electricity"""
#     def __init__(self,df):
#         self.df = df

#     def day_data(self,a):
#         tq = self.df[self.df.测量点号==a][['数据时间','正向']].set_index('数据时间').sort_values(by='数据时间')
#         x = [i[-5:] for i in tq.index]
#         y = [float(i[0]) for i in tq.values]
#         t = a
#         return x,y,t

#     def measure_num(self):
#         num = set(i for i in self.df.测量点号)
#         num = list(num)[1:]
#         return num

# class relation(object):
#     """docstring for relation"""

#     def curr_relation(self,x,y,a,b):
#         lineloss = pd.Series(y,index=x)
#         day_electricity = pd.Series(b,index= a)
#         c = lineloss.corr(day_electricity)
# #         c1 = lineloss.cov(day_electricity)
#         return c

# IO = '石鼓12月.xls'
# k = []
# day_loss = data(IO)

# tq_index = day_loss.day_lineloss_index()

# for i in tq_index:
#     x,y,a,z,m = data(IO).day_lineloss(i)
#     nc = relation().curr_relation(x,y,x,z)
#     c = drawing().day_loss_1(x,y, a+ str(nc),z,m)

#     k.append(c)

# drawing().all_day_lineloss(k,'石鼓12')

# IO = '石鼓12月.xls'
# name = '宝丰12.xlsx'
# num = electricity(name).measure_num()
# day_loss = data(IO)
# a,b,j,z,m = data(IO).day_lineloss('宝丰公用台变')

# k1 = []
# for i in num:
#     x,y,t = electricity(name).day_data(i)
#     c = relation().curr_relation(a,b,x,y)
#     c1 = drawing().day_loss_2(a,b,str(t)+' & '+str(c),x,y)
#     k1.append(c1)

# ny = np.array(electricity(name).day_data(92)[1]) + np.array(electricity(name).day_data(37)[1])

# c = relation().curr_relation(a,b,x,ny)

# c1 = drawing().day_loss_2(a,b,'9237'+str(c),x,ny)

# k1.append(c1)

# drawing().all_day_lineloss(k1,'宝丰12')

# k2 = []
# for i in num:
#     x,y,t = electricity(name).day_data(i)
#     c = relation().curr_relation(a,b,x,y)
#     k2.append(c)
#     print(str(c) + 10*'-'+str(i))
#     print(10*'--')

# k3 = []
# nyy= []
# for i in num:
#     x,y,t = electricity(name).day_data(i)
#     c = relation().curr_relation(a,b,x,y)
#     print(c[0])
#     if c[0] > 0.5:
#         nyy.append(np.array(y))
#         c1 = drawing().day_loss_2(a,b,t,x,y)
#         k3.append(c1)

# c2 = drawing().day_loss_2(a,b,'all',x,sum(nyy))
# k3.append(c2)

# drawing().all_day_lineloss(k3,'test_class_5')
# c = relation().curr_relation(a,b,x,sum(nyy))
# print(c)
예제 #6
0
def html_plot(file):
    sp = file.split(".")
    with open(file) as f:
        l = f.readlines()
        i = 0
        ks = {}
        for line in l:
            if i == 0:
                head = line.strip().split("\t")
                i = 1
            else:
                t = line.strip().split("\t")
                name = t[0]
                del t[0]
                ks[name] = t
        bar = Bar(init_opts=opts.InitOpts(
            page_title=sp[0] + "-ks.htmlpolt", width="1500px", height="700px"))
        bar.add_xaxis(head)
        for key, value in ks.items():
            bar.add_yaxis(key,
                          value,
                          category_gap=0,
                          stack="stack1",
                          is_large=True)
        bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        bar.set_global_opts(
            title_opts=opts.TitleOpts(title=sp[0] + ".ks.polt",
                                      subtitle="Plot by Tree2gd v1.0"),
            toolbox_opts=opts.ToolboxOpts(
                is_show=True,
                pos_top='10%',
                orient='vertical',
                pos_left='right',
                feature=opts.ToolBoxFeatureOpts(
                    save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                        title="Save as png"),
                    restore=opts.ToolBoxFeatureRestoreOpts(title="Recovery"),
                    data_view=opts.ToolBoxFeatureDataViewOpts(
                        title="Data", lang=['Data View', 'Close', 'Refresh']),
                    data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
                    magic_type=opts.ToolBoxFeatureMagicTypeOpts(
                        line_title="Switch to line plot",
                        bar_title="Switch to histogram plot",
                        stack_title="Switch to stack plot",
                        tiled_title="Switch to tiled plot"),
                    brush=opts.ToolBoxFeatureBrushOpts(
                        rect_title="Rectangle selection",
                        polygon_title="Circle selection",
                        line_x_title="X line selection",
                        line_y_title="Y line selection",
                        keep_title="Keep selection",
                        clear_title="Clear selection"),
                )),
            legend_opts=opts.LegendOpts(pos_left='right', ),
            datazoom_opts=[
                opts.DataZoomOpts(range_start=0, range_end=60),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(name="Ks"),
        )
        bar.render(os.sep.join(["..", "ks_html_plot",
                                sp[0] + ".ks.plot.html"]))
예제 #7
0
파일: cal_dl.py 프로젝트: merrygreek/loss
    def day_sxdl(self, x, mc, a, b, c, m, n, rca, rcb, rcc, j, rcj):
        c = (Line(
            init_opts=opts.InitOpts(width="1000px", height="500px")
        ).add_xaxis(x).add_yaxis(
            "电流A",
            a,
            is_smooth=True,
            itemstyle_opts=opts.ItemStyleOpts(color='black')).add_yaxis(
                "电流B",
                b,
                is_smooth=True,
                itemstyle_opts=opts.ItemStyleOpts(color='blue')).add_yaxis(
                    "电流C",
                    c,
                    is_smooth=True,
                    itemstyle_opts=opts.ItemStyleOpts(
                        color='green')).set_global_opts(
                            tooltip_opts=opts.TooltipOpts(
                                is_show=True,
                                trigger="axis",
                                axis_pointer_type="cross"),
                            title_opts=opts.TitleOpts(
                                title=mc,
                                subtitle='A: ' + str(rca)[:12] + '  ' + 'B: ' +
                                str(rcb)[:12] + '  ' + 'C: ' + str(rcc)[:12] +
                                '  '),
                            xaxis_opts=opts.AxisOpts(
                                axislabel_opts=opts.LabelOpts(rotate=-90),
                                max_interval=366,
                                type_="category",
                                axispointer_opts=opts.AxisPointerOpts(
                                    is_show=True, type_="shadow"),
                            ),
                            yaxis_opts=opts.AxisOpts(
                                axislabel_opts=opts.LabelOpts(
                                    formatter="{value} A"),
                                axistick_opts=opts.AxisTickOpts(is_show=True),
                                splitline_opts=opts.SplitLineOpts(
                                    is_show=True),
                            ),
                            toolbox_opts=opts.
                            ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
                                save_as_image=opts.
                                ToolBoxFeatureSaveAsImageOpts(
                                    pixel_ratio=2, background_color='white'),
                                restore=opts.ToolBoxFeatureRestoreOpts(
                                    is_show=False),
                                data_view=opts.ToolBoxFeatureDataViewOpts(
                                    is_show=False),
                                data_zoom=opts.ToolBoxFeatureDataZoomOpts(
                                    is_show=False),
                                magic_type=opts.ToolBoxFeatureMagicTypeOpts(
                                    is_show=False),
                                brush=opts.ToolBoxFeatureBrushOpts(
                                    type_='clear'),
                            ))).set_series_opts(
                                label_opts=opts.LabelOpts(is_show=False), ).
             extend_axis(yaxis=opts.AxisOpts(name='线损率',
                                             axislabel_opts=opts.LabelOpts(
                                                 formatter="{value} %"))))

        line = (Line(init_opts=opts.InitOpts(
            width="1000px", height="500px")).add_xaxis(m).add_yaxis(
                "线损率",
                n,
                is_smooth=True,
                linestyle_opts=opts.LineStyleOpts(color="red",
                                                  width=2,
                                                  type_="solid")
            ).set_series_opts(
                label_opts=opts.LabelOpts(is_show=False), ).set_global_opts(
                    tooltip_opts=opts.TooltipOpts(is_show=True,
                                                  trigger="axis",
                                                  axis_pointer_type="cross"),
                    title_opts=opts.TitleOpts(title=mc,
                                              subtitle='相关性系数: ' +
                                              str(rcj)[:12]),
                    xaxis_opts=opts.AxisOpts(
                        axislabel_opts=opts.LabelOpts(rotate=-90),
                        max_interval=366,
                        type_="category",
                        axispointer_opts=opts.AxisPointerOpts(is_show=True,
                                                              type_="shadow"),
                    ),
                    yaxis_opts=opts.AxisOpts(
                        axislabel_opts=opts.LabelOpts(formatter="{value} %"),
                        axistick_opts=opts.AxisTickOpts(is_show=True),
                        splitline_opts=opts.SplitLineOpts(is_show=True),
                    ),
                    toolbox_opts=opts.
                    ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
                        save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                            pixel_ratio=2, background_color='white'),
                        restore=opts.ToolBoxFeatureRestoreOpts(is_show=False),
                        data_view=opts.ToolBoxFeatureDataViewOpts(
                            is_show=False),
                        data_zoom=opts.ToolBoxFeatureDataZoomOpts(
                            is_show=False),
                        magic_type=opts.ToolBoxFeatureMagicTypeOpts(
                            is_show=False),
                        brush=opts.ToolBoxFeatureBrushOpts(type_='clear'),
                    ))).set_series_opts(label_opts=opts.LabelOpts(
                        is_show=False), ).extend_axis(
                            yaxis=opts.AxisOpts(name='方差',
                                                axislabel_opts=opts.LabelOpts(
                                                    formatter="{value} "))))

        line3 = (Line().add_xaxis(m).add_yaxis(
            "线损率",
            n,
            yaxis_index=1,
            is_smooth=True,
            is_selected=False,
            linestyle_opts=opts.LineStyleOpts(
                color="red", width=2, type_="dotted")).set_series_opts(
                    label_opts=opts.LabelOpts(is_show=False), ))

        line1 = Line().add_xaxis(x).add_yaxis(
            "方差",
            j,
            yaxis_index=1,
            is_smooth=True,
            linestyle_opts=opts.LineStyleOpts(
                color="black", width=2, type_="solid")).set_series_opts(
                    label_opts=opts.LabelOpts(is_show=False), )

        d = line.overlap(line1)

        c.overlap(line3)
        return c, d
예제 #8
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