Beispiel #1
0
    def plot_positions(self, position_list):
        lst_xaxis = self.df_unitAxis.loc[
            self.df_unitAxis['timeAxis'] >=
            self.trade_start]['unit_intdate'].astype(str).values.tolist(
            )  # xaxis values has to be STRING type, int will not work
        linechart = (Line().add_xaxis(lst_xaxis))
        # heartbeat的dateindex个数会>=position的timeindex个数,因为并不是没一轮market event循环都会有signal,order等事件触发,由此并不是每天都会生成position
        for pos in position_list:
            if pos.fname is not None:
                df = pd.read_csv(pos.fname, encoding=cfg.FILE_ENCODE)
                df_cash = df.loc[df['ts_code'] == 'cash'].groupby(
                    'timeindex').agg({'market_value': 'sum'})
                df = df.groupby('timeindex').agg({'market_value': 'sum'})
                linename = '{}持仓'.format(pos.name)
                linename_cash = '{}现金持仓'.format(pos.name)

                assert lst_xaxis == df.index.astype(str).values.tolist()
                lst_values = df['market_value'].values.tolist()
                lst_valuesCash = df_cash['market_value'].values.tolist()
                linechart.add_yaxis(
                    linename,
                    lst_values,
                    is_smooth=True,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.3),
                    label_opts=opts.LabelOpts(is_show=False),
                )
                linechart.add_yaxis(
                    linename_cash,
                    lst_valuesCash,
                    is_smooth=True,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.3),
                    label_opts=opts.LabelOpts(is_show=False),
                    itemstyle_opts=opts.ItemStyleOpts(color="#bbbbbb", ),
                )
                linechart.set_global_opts(
                    title_opts=opts.TitleOpts(title='持仓曲线', ),
                    xaxis_opts=opts.AxisOpts(type_="category"),
                    yaxis_opts=opts.AxisOpts(
                        name="市场价值(元)",
                        is_scale=True,
                    ),
                    legend_opts=opts.LegendOpts(is_show=True,
                                                pos_top='5%',
                                                pos_left="center"),
                    datazoom_opts=[
                        opts.DataZoomOpts(
                            is_show=False,
                            type_="inside",
                            xaxis_index=[0],
                            range_start=75,
                            range_end=100,
                        ),
                        opts.DataZoomOpts(
                            is_show=True,
                            xaxis_index=[0],
                            type_="slider",
                            pos_top="90%",
                            range_start=75,
                            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",
                                                          font_size=10),
                    ),
                    axispointer_opts=opts.AxisPointerOpts(
                        is_show=True,
                        link=[{
                            "xAxisIndex": "all"
                        }],
                        label=opts.LabelOpts(background_color="#777"),
                    ),
                    brush_opts=opts.BrushOpts(
                        x_axis_index="all",
                        brush_link="all",
                        out_of_brush={"colorAlpha": 0.1},
                        brush_type="lineX",
                    ),
                )
                # put everything in a grid for easy resizing and positioning
                gridChart = Grid()
                gridChart.add(
                    linechart,
                    grid_opts=opts.GridOpts(pos_left="10%",
                                            pos_right="8%",
                                            pos_top='25%'),
                )

                fname = f'{cfg.PATH_POSFILE}{pos.name}.html'
                gridChart.render(fname)
                self.chart = gridChart  #输出至可访问对象属性中
Beispiel #2
0
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts(
            name="水量",
            type_="value",
            min_=0,
            max_=250,
            interval=50,
            axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
    )
)

line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="平均温度",
        yaxis_index=1,
        y_axis=[2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
        label_opts=opts.LabelOpts(is_show=False),
    )
)

bar.overlap(line).render("mixed_bar_and_line.html")
Beispiel #3
0
def zhaopin():
    zhaopin_data, zhaopin_account = pip_data(keyword='招聘')
    cve_data, cve_account = pip_data(keyword='cve')
    yujing_data, yujing_account = pip_data(keyword='预警')
    loudong_data, loudong_account = pip_data(keyword='漏洞')
    fuxain_data, fuxain_account = pip_data(keyword='复现')
    zongjie_data, zongjie_account = pip_data(keyword='总结')
    paixu = {}
    quanneng = {}
    accounts_list = list(
        set(cve_data[0:20] + yujing_data[0:20] + loudong_data[0:20] +
            fuxain_data[0:20] + zongjie_data[0:20]))
    for i in list(
            set(cve_data[0:20] + yujing_data[0:20] + loudong_data[0:20] +
                fuxain_data[0:20] + zongjie_data[0:20])):
        print(i)
        paixu[i]=cve_account.get(i,0)/1094/5+\
        yujing_account.get(i,0)/834/5+\
        loudong_account.get(i,0)/5399/5+\
        fuxain_account.get(i,0)/255/5+\
        zongjie_account.get(i,0)/603/5
        quanneng[i] = [
            cve_account.get(i, 0) / 1094 * 100,
            yujing_account.get(i, 0) / 834 * 100,
            loudong_account.get(i, 0) / 5399 * 100,
            fuxain_account.get(i, 0) / 255 * 100,
            zongjie_account.get(i, 0) / 603 * 100,
        ]
        print(
            cve_account.get(i, 0) / 1094,
            yujing_account.get(i, 0) / 834,
            loudong_account.get(i, 0) / 5399,
            fuxain_account.get(i, 0) / 255,
            zongjie_account.get(i, 0) / 603,
        )

    from operator import itemgetter
    print(sorted(paixu.items(), key=itemgetter(1), reverse=True))
    print('招聘信息条数', (sum(x for x in zhaopin_account.values())))

    print('cve信息条数top20', (sum(cve_account.get(x, 0) for x in cve_data[0:20])))
    print('预警信息条数top20',
          (sum(yujing_account.get(x, 0) for x in yujing_data[0:20])))
    print('漏洞信息条数top20',
          (sum(loudong_account.get(x, 0) for x in loudong_data[0:20])))
    print('复现信息条数top20',
          (sum(fuxain_account.get(x, 0) for x in fuxain_data[0:20])))
    print('总结信息条数top20',
          (sum(zongjie_account.get(x, 0) for x in zongjie_data[0:20])))
    print('预警信息条数', (sum(x for x in yujing_account.values())))
    print('漏洞信息条数', (sum(x for x in loudong_account.values())))
    print('复现信息条数', (sum(x for x in fuxain_account.values())))
    print('总结信息条数', (sum(x for x in zongjie_account.values())))
    #     c = (
    #         Pie({"width": "1700px", "height": "900px"})
    #
    #         .add(
    #             "‘cve’发布统计",
    #
    #             cve_data[0:20],
    #             radius=[46, 80],
    #             center=["30%", "30%"],
    #             is_clockwise=False,
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #
    #             .add(
    #             "‘预警’发布统计",
    #             yujing_data[0:20],
    #             radius=[46, 80],
    #             center=["58%", "30%"],
    #             is_clockwise=False,
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #             .add(
    #             "‘漏洞’发布统计",
    #             loudong_data[0:20],
    #             radius=[46, 80],
    #             center=["85%", "30%"],
    #             is_clockwise=False,
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #             .add(
    #             "‘复现’发布统计",
    #             fuxain_data[0:20],
    #             radius=[46, 80],
    #             center=["30%", "70%"],
    #             is_clockwise=False,
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #             .add(
    #             "‘总结’发布统计",
    #             zongjie_data[0:20],
    #             radius=[46, 80],
    #             center=["58%", "70%"],
    #             is_clockwise=False,
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #             .add(
    #             "‘招聘’发布统计",
    #             zhaopin_data[0:20],
    #             radius=[46, 80],
    #             center=["85%", "70%"],
    #             is_clockwise=False,
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .set_global_opts(title_opts=opts.TitleOpts(title="2019年微信公众号文章主题数据统计图(top20)", pos_left='center'),
    #                              legend_opts=opts.LegendOpts(type_='scroll', is_show=True, pos_left="5%", pos_top='5%',
    #                                                          orient="vertical"))
    #             .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    #     )
    #
    #
    # #    page = Page(layout=Page.SimplePageLayout)
    #     # 需要自行调整每个 chart 的 height/width,显示效果在不同的显示器上可能不同
    #  #   page.add(c)
    #  #    c.render(path='./static/year/pie.html')
    #     return c
    c = (
        Line({
            "width": "1500px",
            "height": "700px"
        }).add_xaxis(['cve', '预警', '漏洞', '复现', '总结']).add_yaxis(
            "嘶吼专业版",
            quanneng['嘶吼专业版'],
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                "FreeBuf",
                quanneng['FreeBuf'],
                is_smooth=True,
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    "邑安全",
                    quanneng['邑安全'],
                    is_smooth=True,
                    label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                        "山石瞭望",
                        quanneng['山石瞭望'],
                        is_smooth=True,
                        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                            "360CERT",
                            quanneng['360CERT'],
                            is_smooth=True,
                            label_opts=opts.LabelOpts(
                                is_show=False)).add_yaxis(
                                    "腾讯御见威胁情报中心",
                                    quanneng['腾讯御见威胁情报中心'],
                                    is_smooth=True,
                                    label_opts=opts.LabelOpts(is_show=False)).
        add_yaxis(
            "绿盟科技",
            quanneng['绿盟科技'],
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                "Timeline Sec",
                quanneng['Timeline Sec'],
                is_smooth=True,
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    "长亭安全课堂",
                    quanneng['长亭安全课堂'],
                    is_smooth=True,
                    label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                        "合天智汇",
                        quanneng['合天智汇'],
                        is_smooth=True,
                        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                            "绿盟科技安全情报",
                            quanneng['绿盟科技安全情报'],
                            is_smooth=True,
                            label_opts=opts.LabelOpts(
                                is_show=False)).add_yaxis(
                                    "E安全",
                                    quanneng['E安全'],
                                    is_smooth=True,
                                    label_opts=opts.LabelOpts(is_show=False)).
        add_yaxis(
            "信安之路",
            quanneng['信安之路'],
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                "黑白之道",
                quanneng['Seebug漏洞平台'],
                is_smooth=True,
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    "维他命安全",
                    quanneng['维他命安全'],
                    is_smooth=True,
                    label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                        "无级安全",
                        quanneng['无级安全'],
                        is_smooth=True,
                        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                            "安全客",
                            quanneng['安全客'],
                            is_smooth=True,
                            label_opts=opts.LabelOpts(
                                is_show=False)).add_yaxis(
                                    "弥天安全实验室",
                                    quanneng['弥天安全实验室'],
                                    is_smooth=True,
                                    label_opts=opts.LabelOpts(is_show=False)).
        add_yaxis(
            "HACK学习呀",
            quanneng['HACK学习呀'],
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                "Tide安全团队",
                quanneng['Tide安全团队'],
                is_smooth=True,
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    "SecPulse安全脉搏",
                    quanneng['SecPulse安全脉搏'],
                    is_smooth=True,
                    label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                        "雷神众测",
                        quanneng['雷神众测'],
                        is_smooth=True,
                        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                            "安全祖师爷",
                            quanneng['安全祖师爷'],
                            is_smooth=True,
                            label_opts=opts.LabelOpts(
                                is_show=False)).add_yaxis(
                                    "洛米唯熊",
                                    quanneng['洛米唯熊'],
                                    is_smooth=True,
                                    label_opts=opts.LabelOpts(is_show=False)).
        add_yaxis("飓风网络安全",
                  quanneng['飓风网络安全'],
                  is_smooth=True,
                  label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                      "网信防务",
                      quanneng['网信防务'],
                      is_smooth=True,
                      label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                          "小白帽学习之路",
                          quanneng['小白帽学习之路'],
                          is_smooth=True,
                          label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                              "西子实验室",
                              quanneng['西子实验室'],
                              is_smooth=True,
                              label_opts=opts.LabelOpts(is_show=False))

        #     .set_series_opts(
        #     areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
        # )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="2019年微信公众号主题折线图",
                                      pos_left='43%',
                                      pos_top='8%'),
            # xaxis_opts=opts.AxisOpts(
            #     axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
            #     is_scale=False,
            #     boundary_gap=False,
            # ),
            # legend_opts=opts.LegendOpts(is_show=False),
        ))
    c.render(path='./static/year/quanneng.html')
    print('生成全能公众号')
 def picture2(self):
     df = pd.read_sql(
         f"select * from {self.table_name} where 检查时间 LIKE '%{self.last_month}%'",
         self.conn)
     df['time'] = pd.to_datetime(df['检查时间'])
     df['time_H'] = df['time'].apply(lambda x: x.hour)
     x = df['time_H'].sort_values(ascending=True).unique()
     ya = []
     for i in x:
         try:
             bkk = df[df['time_H'] == i]['性质'].value_counts()['A类']
             ya.append(str(bkk))
         except:
             bkk = 0
             ya.append(str(bkk))
     # print(ya, len(ya))
     yb = []
     for i in x:
         try:
             bkk = df[df['time_H'] == i]['性质'].value_counts()['B类']
             yb.append(str(bkk))
         except:
             bkk = 0
             yb.append(str(bkk))
     # print(yb, len(yb))
     yc = []
     for i in x:
         try:
             bkk = df[df['time_H'] == i]['性质'].value_counts()['C类']
             yc.append(str(bkk))
         except:
             bkk = 0
             yc.append(str(bkk))
     # print(yc, len(yc))
     yd = []
     for i in x:
         try:
             bkk = df[df['time_H'] == i]['性质'].value_counts()['D类']
             yd.append(str(bkk))
         except:
             bkk = 0
             yd.append(str(bkk))
     # print(yd, len(yd))
     a = []
     for i in x:
         m = str(i) + ':00'
         a.append(m)
     e = (
         Line().add_xaxis(a).add_yaxis("A类", ya).add_yaxis(
             "B类",
             yb).add_yaxis("C类", yc).add_yaxis("D类", yd).set_global_opts(
                 title_opts=opts.TitleOpts(
                     title=f"现场安全信息性质分布(时)",
                     subtitle=f"统计时间:{self.last_month}"),
                 tooltip_opts=opts.TooltipOpts(trigger="axis"),
                 xaxis_opts=opts.AxisOpts(name="时间"),
                 toolbox_opts=opts.ToolboxOpts(is_show=True,
                                               feature={
                                                   "saveAsImage": {
                                                       'backgroundColor':
                                                       'white'
                                                   },
                                                   "dataZoom": {},
                                                   "restore": {},
                                                   "magicType": {
                                                       "show": True,
                                                       "type":
                                                       ["line", "bar"]
                                                   },
                                                   "dataView": {}
                                               }))
         # .render(f"safe_message_hour_{self.table_name}.html")
     )
     print('已画图成功')
     return e
from pywebio.output import put_html
from pyecharts import options as opts
from pyecharts.charts import Line, Scatter
from pyecharts.faker import Faker

x = Faker.choose()
line = (
    Line()
    .add_xaxis(x)
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .set_global_opts(title_opts=opts.TitleOpts(title="Overlap-line+scatter"))
)
scatter = (
    Scatter()
    .add_xaxis(x)
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
)
line.overlap(scatter)
put_html(line.render_notebook())

Beispiel #6
0
def TREND_render(x,y,z,y_up,y_down,max_index,min_index,x_name,y_name,query,answer):
    x=list(map(str,x))
    y=list(map(float,y))
    bar = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="increase_value",
            y_axis=y_up,
            markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(type_='max')]
            ),

        )
        #     .add_yaxis(series_name="increase", yaxis_data=y_up, stack="GDP",markpoint_opts=opts.MarkPointOpts(
        #     data=[opts.MarkPointItem(name=x[max_index], coord=[x[max_index], y[max_index]+y_up[max_index]+z[max_index]], value="Max")]
        # ),)
            .add_yaxis(series_name="decrease_value", y_axis=y_down, stack="GDP",markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(type_='max')]
        ),)
            .set_global_opts(
            datazoom_opts=[opts.DataZoomOpts(range_start=10, range_end=90),
                           opts.DataZoomOpts(type_="inside")],
            yaxis_opts=opts.AxisOpts(
                name=y_name,
                type_="value",
                axislabel_opts=opts.LabelOpts(formatter="{value}"),
                axistick_opts=opts.AxisTickOpts(is_show=True),
                splitline_opts=opts.SplitLineOpts(is_show=True),
            ),
            xaxis_opts=opts.AxisOpts(name=x_name),
            graphic_opts=[opts.GraphicText(
            graphic_item=opts.GraphicItem(
              left="center",
              top="bottom",

        ),
          graphic_textstyle_opts=opts.GraphicTextStyleOpts(
            # 可以通过jsCode添加js代码,也可以直接用字符串
            text=['\n'+"Q:"+' '+query+'\n'+"\n"+'A:'+' '+answer],
            font="14px Microsoft YaHei",
            graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                fill="#333"
            )
        )
    )]
        )
    )

    line = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name='food',
            yaxis_index=0,
            y_axis=y,
            label_opts=opts.LabelOpts(is_show=True),
            # markpoint_opts=opts.MarkPointOpts(
            #     data=[opts.MarkPointItem(type_='max', value='Max'),opts.MarkPointItem(type_='min',value='Max')],
            # ),
        )

        .set_global_opts(legend_opts=opts.LegendOpts(is_show=False),  )
    )
    # line.overlap(bar).render("TREND.html")
    grid = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG, ))
    grid.add(bar.overlap(line), grid_opts={'left': '20%', 'bottom': '34%'})
    option1 = grid.dump_options_with_quotes()
    option1 = json.loads(option1)
    option = {"option": [option1], "query": query}
    return option
Beispiel #7
0
class TsdaChart(base_chart.BaseChart):
    chart = None
    max_x = None
    min_x = None

    def __init__(self, title, xaxis_name, yaxis_name):
        base_chart.BaseChart.__init__(self, title, xaxis_name, yaxis_name)

    def clear(self):
        self.data.clear()

    def set_data(self, **data):
        if ('x' in data) & ('y' in data):
            self.max_x = max(data['x'])
            self.min_x = min(data['x'])
            if 'label' in data:
                self.data.append([data['x'], data['y'], data['label']])
            else:
                self.data.append([data['x'], data['y']])
        return self

    def show(self):
        return self.chart

    def plot(self):
        self.chart = Line(init_opts=opts.InitOpts(page_title=self.title))

        # load data
        self.chart.add_xaxis(self.data[0][0])
        index = 0
        for data_set in self.data:
            if len(data_set) > 2:  # get label from data set
                label = data_set[2]
            else:
                label = self.yaxis_name + str(index)

            if index == 0:
                print('append line:', data_set[0])
                print(data_set[1])
                self.chart.add_yaxis(label, data_set[1])
            else:
                print('append bar:', data_set[0])
                print(data_set[1])
                bar = Bar()
                bar.add_xaxis(data_set[0])
                bar.add_yaxis(label, data_set[1])

                self.chart.overlap(bar)
            index += 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=25,
                splitline_opts=opts.SplitLineOpts(is_show=True)))

        self.chart.set_series_opts(
            label_opts=opts.LabelOpts(is_show=False, position='inside'))

        return self
Beispiel #8
0
def report(request):
    """返回慢SQL历史趋势"""
    checksum = request.GET.get('checksum')
    cnt_data = ChartDao().slow_query_review_history_by_cnt(checksum)
    pct_data = ChartDao().slow_query_review_history_by_pct_95_time(checksum)
    cnt_x_data = [row[1] for row in cnt_data['rows']]
    cnt_y_data = [int(row[0]) for row in cnt_data['rows']]
    pct_y_data = [str(row[0]) for row in pct_data['rows']]
    line = Line(init_opts=opts.InitOpts(width='800', height='380px'))
    line.add_xaxis(cnt_x_data)
    line.add_yaxis("慢查次数",
                   cnt_y_data,
                   is_smooth=True,
                   markline_opts=opts.MarkLineOpts(data=[
                       opts.MarkLineItem(type_="max", name='最大值'),
                       opts.MarkLineItem(type_="average", name='平均值')
                   ]))
    line.add_yaxis("慢查时长(95%)",
                   pct_y_data,
                   is_smooth=True,
                   is_symbol_show=False)
    line.set_series_opts(areastyle_opts=opts.AreaStyleOpts(opacity=0.5, ))
    line.set_global_opts(
        title_opts=opts.TitleOpts(title='SQL历史趋势'),
        legend_opts=opts.LegendOpts(selected_mode='single'),
        xaxis_opts=opts.AxisOpts(
            axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
            is_scale=False,
            boundary_gap=False,
        ),
    )

    result = {"status": 0, "msg": '', "data": line.render_embed()}
    return HttpResponse(json.dumps(result), content_type='application/json')
Beispiel #9
0
def draw_balance_line(xaxis, yaxis, title="消费统计", markline=None, width=2000) -> Line:
    """
        x = [月_日, 月_日, 月_日, ....]
        y = [(title1, [num1, num2, num3, num4, ...]), (title2, [num1, num2, num3, num4, ...])]
        :param xaxis: x轴
        :param yaxis: y轴
        :param title: 标题
        :param markline: 标记辅助线
        :param width: 宽
        :return: Line
        """
    line = Line()
    line.add_xaxis(xaxis)
    for name, axis in yaxis:
        line.add_yaxis(name, axis)
    line.set_global_opts(title_opts=opts.TitleOpts(title=title, ),
                        datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=100),
                                       opts.DataZoomOpts(type_="inside")],
                        tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='shadow'))
    line.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

    if markline is not None:
        line.set_series_opts(markline_opts=opts.MarkLineOpts(
            data=[opts.MarkLineItem(
                y=markline,
                name='预算')
            ])
        )

    return line
Beispiel #10
0
def draw_pnl(trader_sim_obj) -> Grid:
    # 【1】 画Returns
    trader_name = trader_sim_obj.name
    df_Pnl = pd.DataFrame(trader_sim_obj.Data.Pnl)
    df_Pnl = df_Pnl.sort_values(by='Date')
    df_Pnl['cumsum'] = df_Pnl['Returns'].cumsum()
    x_list = df_Pnl['Date'].dt.date.to_list()
    y_list = df_Pnl['cumsum'].to_list()

    line_returns = (Line().add_xaxis(x_list).add_yaxis(
        series_name=trader_name, y_axis=y_list).set_global_opts(
            title_opts=opts.TitleOpts(title='Returns', pos_top='10%'),
            legend_opts=opts.LegendOpts(pos_top='0%'),
            datazoom_opts=opts.DataZoomOpts(is_show=True,
                                            xaxis_index=[0, 1],
                                            pos_top='60%'),
            xaxis_opts=opts.AxisOpts(
                splitline_opts=opts.SplitLineOpts(is_show=True),
                is_scale=True,
            ),
            yaxis_opts=opts.AxisOpts(is_scale=True),
        ).set_series_opts(
            label_opts='False',
            markpoint_opts=opts.MarkPointOpts(data=[
                opts.MarkPointItem(type_='max', symbol='circle'),
            ]),
        ))

    # 【2】 画MDD
    df_Pnl['cummax'] = df_Pnl['cumsum'].cummax()
    df_Pnl['drawDown'] = df_Pnl['cumsum'] - df_Pnl['cummax']
    x_list = df_Pnl['Date'].dt.date.to_list()
    round_n = get_round_pos(df_Pnl['drawDown'])
    y_list = round(df_Pnl['drawDown'], round_n).to_list()

    line_mdd = (
        Line().add_xaxis(x_list).add_yaxis(
            series_name=trader_name,
            y_axis=y_list,
        ).set_global_opts(
            title_opts=opts.TitleOpts(title='MDD', pos_top='75%'),
            legend_opts=opts.LegendOpts(is_show=False),
            datazoom_opts=opts.DataZoomOpts(is_show=False, xaxis_index=[0, 1]),
            xaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitline_opts=opts.SplitLineOpts(is_show=True)),
            yaxis_opts=opts.AxisOpts(
                # max_=0,
                # min_=y_min - abs((y_max - y_min)) * 0.1 ,
                is_scale=True,
                splitline_opts=opts.SplitLineOpts(is_show=True, )),
        ).set_series_opts(
            label_opts='False',
            markpoint_opts=opts.MarkPointOpts(data=[
                # opts.MarkPointItem(type_='max', symbol='roundRect'),
                opts.MarkPointItem(type_='min', symbol='circle'),
            ]),
        ))

    # 组合gird
    grid = (Grid(init_opts=opts.InitOpts(width='1200px', height='800px')).add(
        line_returns, grid_opts=opts.GridOpts(pos_bottom='40%')).add(
            line_mdd, grid_opts=opts.GridOpts(pos_top='65%', pos_bottom='5%')))
    return grid
Beispiel #11
0
def draw_band_and_trades(trader_sim_obj) -> Grid:
    def band1(x):
        l = list(x)
        l.sort()
        m = sum(l[1:3]) / 2
        l2 = [i for i in l if (i > m * 0.95) * (i < m * 1.05)]
        return max(l2)

    def band2(x):
        l = list(x)
        l.sort()
        m = sum(l[1:3]) / 2
        l2 = [i for i in l if (i > m * 0.95) * (i < m * 1.05)]
        return min(l2)

    # 【1】 Band
    trader_name = trader_sim_obj.name
    # 拿数据
    df_band = pd.DataFrame(trader_sim_obj.Data.Band)
    df_band.set_index(keys='DateTime', drop=True, inplace=True)
    df_bar = pd.DataFrame(trader_sim_obj.Data.Bar)
    # 转换 计算 BarPx
    df_bar_open_pv = df_bar.pivot_table(values='Open',
                                        index='DateTime',
                                        columns='ticker',
                                        aggfunc='mean')
    ticker1 = df_bar[df_bar['tickerNum'] == '1']['ticker'].to_list()[-1]
    ticker2 = df_bar[df_bar['tickerNum'] == '2']['ticker'].to_list()[-1]
    df_bar_open_pv['px'] = df_bar_open_pv[ticker1] / df_bar_open_pv[ticker2]
    # 筛选Band  合并 Band和BarPx
    df_band_px = pd.concat([df_band, df_bar_open_pv[['px']]], axis=1)
    df_band_px['Band1'] = df_band_px[[
        'BuyEntry', 'BuyExit', 'SellEntry', 'SellExit'
    ]].apply(func=band1, axis=1)
    df_band_px['Band2'] = df_band_px[[
        'BuyEntry', 'BuyExit', 'SellEntry', 'SellExit'
    ]].apply(func=band2, axis=1)
    df_band_px = df_band_px[['Band1', 'Band2', 'px']]
    round_n = get_round_pos(df_band_px['px'])
    df_band_px['px'] = round(df_band_px['px'], round_n)

    x_list = df_band_px.index.to_list()

    line_band = (
        Line().add_xaxis(xaxis_data=x_list).add_yaxis(
            series_name='Band1',
            y_axis=df_band_px['Band1'].to_list(),
        ).add_yaxis(
            series_name='Band2',
            y_axis=df_band_px['Band2'].to_list(),
        ).add_yaxis(
            series_name='BarPx',
            y_axis=df_band_px['px'].to_list(),
        ).set_global_opts(
            title_opts=opts.TitleOpts(title='Band', pos_top='10%'),
            legend_opts=opts.LegendOpts(pos_top='5%'),
            datazoom_opts=opts.DataZoomOpts(is_show=True,
                                            xaxis_index=[0, 1, 2],
                                            pos_top='50%'),
            yaxis_opts=opts.AxisOpts(is_scale=True,
                                     splitline_opts=opts.SplitLineOpts(
                                         is_show=True, )),
            xaxis_opts=opts.AxisOpts(is_scale=True,
                                     splitline_opts=opts.SplitLineOpts(
                                         is_show=True, )),
            # yaxis_opts=opts.AxisOpts(
            # 	max_=y_max+abs((y_max-y_min))*0.15,
            # 	min_=y_min-abs((y_max-y_min))*0.15
            # )
        ))

    # 【2】 画Trades
    # 数据
    df_position = pd.DataFrame()
    df_trades = pd.DataFrame(trader_sim_obj.Data.Trades)
    list_ticker = df_trades['Ticker'].unique().tolist()

    # 用trades 计算 position
    # 使用的方法比较复杂,
    #       能处理 对有跨交易日持仓的情况;
    #       用于显示持仓,而不是成交,因为只是成交的话无法对成交盈亏有所了然
    ticker_position = {}
    for ticker_i in list_ticker[0]:
        ticker_position[ticker_i] = {'Buy': [0], 'Sell': [0], 'netPos': [0]}
        df_i_trades = df_trades[df_trades['Ticker'] == ticker_i]
        df_i_trades = df_i_trades[[
            'DateTime', 'Direction', 'OffsetFlag', 'TradedPrice',
            'TradedVolume'
        ]]
        df_i_trades.sort_values(by='DateTime', inplace=True)
        l_data = df_i_trades[['OffsetFlag', 'Direction',
                              'TradedVolume']].to_dict('record')
        for d in l_data:
            offset_flag = d['OffsetFlag']
            direction = d['Direction']
            traded_volume = d['TradedVolume']
            tv = ((offset_flag == 'Open') * 2 - 1) * traded_volume
            td = ['Sell', 'Buy'][int(({
                'Buy': 1,
                'Sell': -1
            }[direction] * ((offset_flag == 'Open') * 2 - 1)) / 2 + 0.5)]

            volume0 = {}
            volume0['Buy'] = ticker_position[ticker_i]['Buy'][-1]
            volume0['Sell'] = ticker_position[ticker_i]['Sell'][-1]
            volume0['netPos'] = ticker_position[ticker_i]['netPos'][-1]
            if volume0 == 0 and tv < 0:
                ticker_position[ticker_i]['Buy'].append(volume0['Buy'])
                ticker_position[ticker_i]['Sell'].append(volume0['Sell'])
                ticker_position[ticker_i]['netPos'].append(volume0['netPos'])
            else:
                for bs in ['Buy', 'Sell']:
                    if bs == td:
                        ticker_position[ticker_i][bs].append(volume0[bs] + tv)
                    else:
                        ticker_position[ticker_i][bs].append(volume0[bs])
                ticker_position[ticker_i]['netPos'].append(
                    ticker_position[ticker_i]['Buy'][-1] -
                    ticker_position[ticker_i]['Sell'][-1])
        # print(df_position, ticker_position[ticker_i])
        df_position[ticker_i] = ticker_position[ticker_i]['netPos'][1:]

    # position 数据处理, 规整index轴
    df_position['DateTime'] = df_trades['DateTime']
    df_position.drop_duplicates(subset='DateTime', keep='last', inplace=True)
    df_position.set_index('DateTime', inplace=True, drop=True)
    df_position_all = df_position.reindex(index=df_band_px.index.to_list(),
                                          method='ffill')
    df_position_all.fillna(value=0, inplace=True)
    x = df_position_all.index.to_list()

    # 画图
    # 仅显示 某一个 ticker的 trades和px
    # TODO arb(pair成交)的情况,用arbPx图,也是一个图啊
    i_ticker = df_position_all.columns.to_list()[0]

    y_trades = df_position_all[i_ticker].to_list()
    line_trades = (Line().add_xaxis(x).add_yaxis(
        series_name=i_ticker,
        y_axis=y_trades,
        yaxis_index=0,
    ).set_global_opts(
        title_opts=opts.TitleOpts(title='Trades', pos_top='65%'),
        legend_opts=opts.LegendOpts(pos_top='60%'),
        datazoom_opts=opts.DataZoomOpts(is_show=False, xaxis_index=[0, 1, 2]),
        yaxis_opts=opts.AxisOpts(is_scale=True,
                                 splitline_opts=opts.SplitLineOpts(
                                     is_show=True, )),
        xaxis_opts=opts.AxisOpts(is_scale=True,
                                 splitline_opts=opts.SplitLineOpts(
                                     is_show=True, )),
    ))

    # ticker 的bar px
    df_ticker_i_px = pd.DataFrame(df_bar.loc[df_bar['ticker'] == i_ticker,
                                             ['DateTime', 'Open']])
    df_ticker_i_px.set_index(keys='DateTime', drop=True, inplace=True)
    df_ticker_i_px = df_ticker_i_px.reindex(index=df_band_px.index.to_list(),
                                            method='ffill')
    y_px_open = df_ticker_i_px['Open'].to_list()
    line_ticker_px = (
        Line().add_xaxis(x).add_yaxis(
            "价格",
            y_px_open,
            yaxis_index=1,
        ).set_global_opts(
            title_opts=opts.TitleOpts(title='Px-Open',
                                      pos_top='65%',
                                      pos_right='0%'),
            legend_opts=opts.LegendOpts(pos_top='63%'),
            datazoom_opts=opts.DataZoomOpts(is_show=False,
                                            xaxis_index=[0, 1, 2]),
            # yaxis_opts=opts.AxisOpts(is_scale=True, splitline_opts=opts.SplitLineOpts(is_show=True, )),
            xaxis_opts=opts.AxisOpts(is_scale=True),
            yaxis_opts=opts.AxisOpts(position='right',
                                     is_scale=True,
                                     name='Px'),
        ))

    # 组合gird
    grid = (Grid(init_opts=opts.InitOpts(width='1200px', height='800px')).add(
        line_band,
        grid_opts=opts.GridOpts(pos_top='5%', pos_bottom='50%')).add(
            line_trades,
            grid_opts=opts.GridOpts(pos_top='55%', pos_bottom='5%')).add(
                line_ticker_px,
                grid_opts=opts.GridOpts(pos_top='55%', pos_bottom='5%')))
    return grid
Beispiel #12
0
def kline_pro(kline: List[dict],
              fx: List[dict] = None,
              bi: List[dict] = None,
              xd: List[dict] = None,
              bs: List[dict] = None,
              title: str = "缠中说禅K线分析",
              width: str = "1400px",
              height: str = '580px') -> Grid:
    """绘制缠中说禅K线分析结果

    :param kline: K线
    :param fx: 分型识别结果
    :param bi: 笔识别结果
        {'dt': Timestamp('2020-11-26 00:00:00'),
          'fx_mark': 'd',
          'start_dt': Timestamp('2020-11-25 00:00:00'),
          'end_dt': Timestamp('2020-11-27 00:00:00'),
          'fx_high': 144.87,
          'fx_low': 138.0,
          'bi': 138.0}
    :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], range_start=80, range_end=100)
    dz_slider = opts.DataZoomOpts(True, "slider", xaxis_index=[0, 1, 2], pos_top="96%",
                                  pos_bottom="0%", range_start=80, 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['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['vol'], 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)
    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
    )

    # 均线图
    # ------------------------------------------------------------------------------------------------------------------
    chart_ma = Line()
    chart_ma.add_xaxis(xaxis_data=dts)

    ma_keys = {"MA5": ma5, "MA34": ma34, "MA233": ma233}
    ma_colors = ["#39afe6", "#da6ee8", "#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:
        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 = Line()
        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)", ),
                           linestyle_opts=opts.LineStyleOpts(width=1.5))

        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 = Line()
        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['price'] 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['price'] 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
Beispiel #13
0
def line_step() -> Line:
    c = (Line().add_xaxis(Faker.choose()).add_yaxis(
        "商家A", Faker.values(), is_step=True).set_global_opts(
            title_opts=opts.TitleOpts(title="Line-阶梯图")))
    return c
Beispiel #14
0
def line_base() -> Line:
    c = (Line().add_xaxis(Faker.choose()).add_yaxis(
        "商家A",
        Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(
            title_opts=opts.TitleOpts(title="Line-基本示例")))
    return c
def draw_chart(stock_data):
    '''
        pyecharts V1 版本开始支持链式调用
       文档地址 https://pyecharts.org/#/zh-cn/
    '''
    stock_data.index = pd.to_datetime(stock_data['TIME'], format="%Y/%m/%d")
    x = stock_data["TIME"].values.tolist()
    stock_basic_data = stock_data[[
        "TIME", "OPEN", "CLOSE", "LOW", "HIGH", "VOLUME"
    ]]
    # stock_data = stock_data.sort_index(ascending=True)  # 倒序,看时间顺序是否正常决定是不是要用
    # k线图
    kline = (
        Kline().add_xaxis(x).add_yaxis(
            "K线图",
            stock_basic_data.iloc[:, 1:5].values.tolist(),
            itemstyle_opts=opts.ItemStyleOpts(color="#ec0000",
                                              color0="#00da3c"),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(is_scale=True, is_show=False),
            # axis_opts=opts.AxisOpts(is_scale=True,min_=0), #y轴起始坐标可以设为0
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),  # y轴起始坐标可自动调整
            tooltip_opts=opts.TooltipOpts(trigger="axis",
                                          axis_pointer_type="line"),
            legend_opts=opts.LegendOpts(is_show=True,
                                        orient='vertical',
                                        pos_right="5%",
                                        pos_top='20%'),
            title_opts=opts.TitleOpts(title="股票价格",
                                      subtitle=ts_code,
                                      pos_left='22%',
                                      pos_top="20%"),
            #把所有的x轴连接在一起
            # axispointer_opts=opts.AxisPointerOpts(is_show=True,
            #                                       link=[{"xAxisIndex": "all"}],
            #                                       label=opts.LabelOpts(background_color="#777"),
            #                                       ),
            datazoom_opts=[  # 设置zoom参数后即可缩放
                opts.DataZoomOpts(
                    is_show=True,
                    type_="inside",
                    xaxis_index=[0, 1, 2, 3, 4],  # 设置第0轴和第1轴同时缩放
                    range_start=0,
                    range_end=100,
                ),
            ],
        ))
    # 成交量柱形图
    bar_volumn = (Bar().add_xaxis(x).add_yaxis(
        "成交量",
        stock_basic_data["VOLUME"].values.tolist(),
        xaxis_index=1,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                           function(params) {
                               var colorList;
                               if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) {
                                   colorList = '#ef232a';

                               } else {
                                   colorList = '#14b143';
                               }
                               return colorList;
                           }
                           """)),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title="成交量", pos_left='22%', pos_top="48%"),
        legend_opts=opts.LegendOpts(is_show=True,
                                    orient='vertical',
                                    pos_right="5%",
                                    pos_top='48%'),
    ))
    #绘制均线图
    line_ma = (
        Line().add_xaxis(x).add_yaxis(
            series_name="MA5",
            y_axis=stock_data["MA5"].values.tolist(),
            is_hover_animation=False,
            # linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
            is_symbol_show=False,
        ).add_yaxis(
            series_name="MA10",
            y_axis=stock_data["MA10"].values.tolist(),
            is_hover_animation=False,
            label_opts=opts.LabelOpts(is_show=False),
            is_symbol_show=False,
        ).add_yaxis(
            series_name="MA20",
            y_axis=stock_data["MA20"].values.tolist(),
            is_hover_animation=False,
            label_opts=opts.LabelOpts(is_show=False),
            is_symbol_show=False,
        ).set_global_opts(
            title_opts=opts.TitleOpts(title="MA",
                                      pos_left='22%',
                                      pos_top="88%"),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                axislabel_opts=opts.LabelOpts(is_show=False),
                is_scale=True),
            datazoom_opts=[opts.DataZoomOpts(type_="inside")],
            legend_opts=opts.LegendOpts(is_show=True,
                                        orient='vertical',
                                        pos_right="5%",
                                        pos_top='85%'),
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),
        ))
    #绘制jdk线
    line_kdj = (Line().add_xaxis(x).add_yaxis(
        series_name="K",
        y_axis=stock_data["K"].values.tolist(),
        linestyle_opts=opts.LineStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).add_yaxis(
        series_name="D",
        y_axis=stock_data["D"].values.tolist(),
        linestyle_opts=opts.LineStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).add_yaxis(
        series_name="J",
        y_axis=stock_data["J"].values.tolist(),
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).set_global_opts(
        title_opts=opts.TitleOpts(title="KDJ", pos_left='22%', pos_top="62%"),
        datazoom_opts=[opts.DataZoomOpts(type_="inside", )],
        legend_opts=opts.LegendOpts(is_show=True,
                                    orient='vertical',
                                    pos_right="7%",
                                    pos_top='60%'),
        xaxis_opts=opts.AxisOpts(
            is_scale=True,
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
        ),
    ))
    #绘制macd柱状图
    bar_macd = (Bar().add_xaxis(x).add_yaxis(
        series_name='MACD',
        yaxis_data=stock_data['MACD'].values.tolist(),
        xaxis_index=2,
        yaxis_index=2,
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                               function(params) {
                                   var colorList;
                                   if (params.data >= 0) {
                                     colorList = '#ef232a';
                                   } else {
                                     colorList = '#14b143';
                                   }
                                   return colorList;
                               }
                               """)),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title="MACD", pos_left='22%', pos_top="75%"),
        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),
        ),
        legend_opts=opts.LegendOpts(is_show=True,
                                    orient='vertical',
                                    pos_right="5%",
                                    pos_top='70%'),
    ))
    #绘制DIF和DEA
    line_macd = (Line().add_xaxis(x).add_yaxis(
        series_name="DIF",
        y_axis=stock_data['DIF'].values.tolist(),
        xaxis_index=2,
        yaxis_index=2,
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).add_yaxis(
        series_name="DEA",
        y_axis=stock_data['DEA'].values.tolist(),
        xaxis_index=2,
        yaxis_index=2,
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))
    #绘制布林线
    line_boll = (Line().add_xaxis(x).add_yaxis(
        series_name="MID",
        y_axis=stock_data["MID"].values.tolist(),
        linestyle_opts=opts.LineStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).add_yaxis(
        series_name="UPPER",
        y_axis=stock_data["UPPER"].values.tolist(),
        linestyle_opts=opts.LineStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).add_yaxis(
        series_name="LOWER",
        y_axis=stock_data["LOWER"].values.tolist(),
        linestyle_opts=opts.LineStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
    ).set_global_opts(
        datazoom_opts=[opts.DataZoomOpts(type_="inside", )],
        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)),
        ),
    ))

    overlap_kline_linema = kline.overlap(line_boll)
    overlap_macd = bar_macd.overlap(line_macd)
    # 使用网格将多张图标组合到一起显示
    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1400px",
        height="700px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))

    # 为了把 data.datas 的数据写入到html中作为全局变量,目前无法跨 series 传值
    # demo 中的代码也是用全局变量传的
    grid_chart.add_js_funcs("var barData = {}".format(
        stock_basic_data.iloc[:, 1:5].values.tolist()))
    grid_chart.add(
        overlap_kline_linema,
        grid_opts=opts.GridOpts(pos_left="35%",
                                pos_right="15%",
                                pos_top="3%",
                                height="40%"),
    )

    grid_chart.add(
        bar_volumn,
        grid_opts=opts.GridOpts(pos_left="35%",
                                pos_right="15%",
                                pos_top="45%",
                                height="10%"),
    )

    grid_chart.add(line_kdj,
                   grid_opts=opts.GridOpts(pos_left="35%",
                                           pos_right="15%",
                                           pos_top="60%",
                                           height="10%"))
    grid_chart.add(overlap_macd,
                   grid_opts=opts.GridOpts(pos_left="35%",
                                           pos_right="15%",
                                           pos_top="72%",
                                           height="10%"))

    grid_chart.add(line_ma,
                   grid_opts=opts.GridOpts(pos_left="35%",
                                           pos_right="15%",
                                           pos_top="85%",
                                           height="10%"))

    grid_chart.render('stock_{}/stock_{}.html'.format(
        ts_code, ts_code))  # 保存成用股票代码命名的文档
    return 0
Beispiel #16
0
(Line().add_xaxis(xaxis_data=x_data).add_yaxis(
    series_name="QPS",
    # stack="总量",
    y_axis=[0, 6512.09, 11408.77, 17198.11, 21451.15, 26426.46, 25311.42],
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    label_opts=opts.LabelOpts(is_show=True),
).add_yaxis(
    series_name="请求总量",
    # stack="总量",
    y_axis=[0, 3908017, 6845695, 10320806, 12871444, 15867653, 15188519],
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    label_opts=opts.LabelOpts(is_show=True),
).add_yaxis(
    series_name="TPS",
    # stack="总量",
    y_axis=[0, 6512.09, 11408.77, 17198.11, 21451.15, 26426.46, 25311.42],
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    label_opts=opts.LabelOpts(is_show=True),
).add_yaxis(
    series_name="事物总量",
    # stack="总量",
    y_axis=[0, 3908017, 6845695, 10320806, 12871444, 15867653, 15188519],
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    label_opts=opts.LabelOpts(is_show=True),
).set_global_opts(
    title_opts=opts.TitleOpts(title="oltp_point_select-索引查询"),
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
    yaxis_opts=opts.AxisOpts(
        type_="value",
        axistick_opts=opts.AxisTickOpts(is_show=False),
        splitline_opts=opts.SplitLineOpts(is_show=False),
    ),
    xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
).render("oltp_point_select.html"))
Beispiel #17
0
    )
    .set_global_opts(legend_opts=opts.LegendOpts(pos_left="legft", orient="vertical"))
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        ),
    label_opts=opts.LabelOpts(formatter="{b}: {c}")
    )
)
pie.render_notebook()


# 折线图
line = (
    Line()
    .add_xaxis(x)
    .add_yaxis('china', data_china)
    .set_global_opts(title_opts=opts.TitleOpts(title="Line - 基本示例"))
)
line.render_notebook()


line = (
    Line()
    .add_xaxis(x)
    .add_yaxis('china', data_china)
    .add_yaxis('russis', data_russia)
    .set_global_opts(title_opts=opts.TitleOpts(title="Line - 双折线图"))
)
line.render_notebook()

 Line()
 .add_xaxis(xaxis_data=x_data)
 .add_yaxis(
     series_name="邮件营销",
     stack="总量",
     y_axis=[120, 132, 101, 134, 90, 230, 210],
     label_opts=opts.LabelOpts(is_show=False),
 )
 .add_yaxis(
     series_name="联盟广告",
     stack="总量",
     y_axis=[220, 182, 191, 234, 290, 330, 310],
     label_opts=opts.LabelOpts(is_show=False),
 )
 .add_yaxis(
     series_name="视频广告",
     stack="总量",
     y_axis=[150, 232, 201, 154, 190, 330, 410],
     label_opts=opts.LabelOpts(is_show=False),
 )
 .add_yaxis(
     series_name="直接访问",
     stack="总量",
     y_axis=[320, 332, 301, 334, 390, 330, 320],
     label_opts=opts.LabelOpts(is_show=False),
 )
 .add_yaxis(
     series_name="搜索引擎",
     stack="总量",
     y_axis=[820, 932, 901, 934, 1290, 1330, 1320],
     label_opts=opts.LabelOpts(is_show=False),
 )
 .set_global_opts(
     title_opts=opts.TitleOpts(title="折线图堆叠"),
     tooltip_opts=opts.TooltipOpts(trigger="axis"),
     yaxis_opts=opts.AxisOpts(
         type_="value",
         axistick_opts=opts.AxisTickOpts(is_show=True),
         splitline_opts=opts.SplitLineOpts(is_show=True),
     ),
     xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
 )
 .render("stacked_line_chart.html")
            min_=0,
            max_=250,
            position="right",
            offset=80,
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="#5793f3")
            ),
            axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
        ),
        title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
    )
)

line = (
    Line()
    .add_xaxis(x_data)
    .add_yaxis(
        "平均温度",
        [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
        yaxis_index=2,
        color="#675bba",
        label_opts=opts.LabelOpts(is_show=False),
    )
)

bar.overlap(line)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
grid.render("grid_multi_yaxis.html")
    [(0, 730), (1, 1471), (2, 1768), (3, 3914), (4, 5929), (5, 15821),
     (6, 34954), (7, 76019), (8, 69751), (9, 21495), (10, 2288)],
    sort_="ascending",
    label_opts=opts.LabelOpts(position="inside"),
).set_global_opts(title_opts=opts.TitleOpts(title="用户等级分布")))

# 歌单数和粉丝数的关系
d = (Scatter().add_xaxis([i for i in range(0, 13)]).add_yaxis(
    "粉丝数", [j for j in range(100, 1300, 100)]).set_global_opts(
        title_opts=opts.TitleOpts(title="歌单数和粉丝数关系")))

# 男女粉丝的粉丝数TOP10
ee = (Line().add_xaxis([
    str(i) for i in range(1, 11)
]).add_yaxis("男性", [
    2331948, 436372, 328108, 254534, 146967, 78094, 76079, 67013, 65588, 63676
]).add_yaxis(
    "女性",
    [273930, 207547, 138289, 132198, 88809, 47306, 39272, 36877, 35043, 34579
     ]).set_global_opts(title_opts=opts.TitleOpts(title="男女粉丝的粉丝数TOP20")))

e = (Line().add_xaxis(
    [i for i in range(1, 9)]).add_yaxis("A", Faker.values()).add_yaxis(
        "B",
        Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="测试")))

# e.render('mycharts.html')
# ee.render('test.html')
# make_snapshot(snapshot, pie.render(), "pie.png")

pemysql.gender(5771)
pemysql.level(5771)
Beispiel #21
0
def to_grid(ka,
              kline_mode: str = "new",
              with_bi: bool = False,
              with_xd: bool = False,
              with_zs: bool = False,
              with_bs: bool = False,
              with_ma: bool = False,
              with_vol: bool = False,
              with_macd: bool = False,
              title: str = "ChanLun In Practise",
              width: str = "1440px",
              height: str = '900px') -> Grid:
    """绘制缠中说禅K线分析结果
    :param kline: K线 new / raw,new标识标准化后的k线,raw标识原始k线
    :param with_bi: 是否显示笔识别结果,默认True,不输出False
    :param with_xd: 是否显示线段识别结果
    :param with_zs: 是否显示中枢识别结果
    :param with_bs: 是否显示买卖点
    :param with_ma: 是否显示均线,默认True,不输出False
    :param with_macd: 是否显示macd,默认True,不输出False
    :param with_vol: 是否显示成交量,默认True,不输出False
    :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='1400px', height='800px')
    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",
        textstyle_opts=opts.TextStyleOpts(color="#000"),
    )


    # 数据预处理
    # ------------------------------------------------------------------------------------------------------------------
    kline = ka.kline_new if kline_mode == 'new' else ka.kline_raw
    dts = [x['dt'] for x in kline]
    k_data = [[x['open'], x['close'], x['low'], x['high']] for x in kline]

    # seriesname
    aggregation = len(ka.ka_list)>0
    # {'freq': {'kline', 'ma', 'vol', 'macd'}}
    agg_dict = {}    
    agg_dict[ka.freq] = {
        "kline": k_data,
        "ma": ka.ma,
        "vol": kline,
        "macd": ka.macd
    }
    if aggregation:
        for high_ka in ka.ka_list:
            agg_dict[high_ka.freq] = {}
            _high_k_data = high_ka.kline_new if kline_mode == 'new' else high_ka.kline_raw
            high_k_data = []
            high_ma_data = []
            high_vol_data = []
            high_macd_data = []
            for i in range(len(dts)):
                high_k_data.append([])
                high_ma_data.append({})
                high_vol_data.append(None)
                high_macd_data.append(None)
            for ki in range(len(kline)):
                k = kline[ki]  
                _start = 0                              
                for h_ki in range(_start, len(_high_k_data)):
                    h_k = _high_k_data[h_ki]                    
                    if (h_k['dt'] == k['dt']):                        
                        high_k_data[ki] = [h_k['open'], h_k['close'], h_k['low'], h_k['high']]
                        high_ma_data[ki] = high_ka.ma[h_ki]
                        high_vol_data[ki] = h_k
                        high_macd_data[ki] = high_ka.macd[h_ki]
                        _start = h_ki+1
                        break
            agg_dict[high_ka.freq] = {
                "kline": high_k_data,
                "ma": high_ma_data,
                "vol": high_vol_data,
                "macd": high_macd_data
            }
            
    # K 线主图
    # ------------------------------------------------------------------------------------------------------------------
    chart_k = Kline()
    chart_k.add_xaxis(xaxis_data=dts)
    for k, v in agg_dict.items():
        chart_k.add_yaxis(series_name=k if aggregation else 'kline', y_axis=v['kline'], itemstyle_opts=k_style_opts)
        is_selected = False

    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 with_ma:
        # 均线图
        # ------------------------------------------------------------------------------------------------------------------
        ma_keys = [x for x in agg_dict[ka.freq]['ma'][0].keys() if "ma" in x][:3]
        ma_colors = ["#39afe6", "#da6ee8", "#00940b"]

        chart_ma = Line()
        chart_ma.add_xaxis(xaxis_data=dts)

        for key, vals in agg_dict.items():
            for i, k in enumerate(ma_keys):
                y_data = [x[k] if k in x else None for x in v['ma']]
                chart_ma.add_yaxis(series_name=key if aggregation else k.upper(), y_axis=y_data, is_smooth=True,
                                is_selected=True, is_connect_nones=True, 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)

    # 缠论结果
    # ------------------------------------------------------------------------------------------------------------------
    def __draw_bi_line(_ka):
        bi_dts = [x['dt'] for x in _ka.bi_list]
        bi_val = [x['bi'] for x in _ka.bi_list]
        chart_bi = Line()
        chart_bi.add_xaxis(bi_dts)
        chart_bi.add_yaxis(series_name=_ka.freq if aggregation else "BI", y_axis=bi_val, is_selected=True,
                        symbol="diamond", symbol_size=10, label_opts=label_not_show_opts,)

        chart_bi.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
        return chart_bi

    if with_bi:
        chark_k = chart_k.overlap(__draw_bi_line(ka))
        for _ka in ka.ka_list:
            chark_k = chart_k.overlap(__draw_bi_line(_ka))

    def __draw_xd_line(_ka):
        
        xd_dts = [x['dt'] for x in _ka.xd_list]
        xd_val = [x['xd'] for x in _ka.xd_list]
        chart_xd = Line()
        chart_xd.add_xaxis(xd_dts)
        chart_xd.add_yaxis(series_name=_ka.freq if aggregation else "XD", y_axis=xd_val, is_selected=True, symbol="triangle", symbol_size=10,)

        chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
        return chart_xd

    if with_xd:
        chark_k = chart_k.overlap(__draw_xd_line(ka))
        for _ka in ka.ka_list:
            chark_k = chart_k.overlap(__draw_xd_line(_ka))

    def __draw_zs_area(_ka):
        lines = []
        scatters = []
        for _zs in _ka.zs_list:
            x_start = _zs['start_point']['dt']

            if _zs['zs_finished']:# 中枢完成
                x_end = _zs['end_point']['dt']

                chart_b = EffectScatter()

                if 'buy3' in _zs:
                    chart_b.add_xaxis([_zs['buy3']['dt']])
                    chart_b.add_yaxis(series_name=_ka.freq if aggregation else "B", y_axis=[_zs['buy3']['xd']], is_selected=False, symbol="circle", symbol_size=8,
                                itemstyle_opts=opts.ItemStyleOpts(color="red",))
                    chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
                    scatters.append(chart_b)
                elif 'sell3' in _zs:
                    chart_b.add_xaxis([_zs['sell3']['dt']])
                    chart_b.add_yaxis(series_name=_ka.freq if aggregation else "S", y_axis=[_zs['sell3']['xd']], is_selected=False, symbol="circle", symbol_size=8,
                                itemstyle_opts=opts.ItemStyleOpts(color="green",))
                    chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
                    scatters.append(chart_b)
            elif len(_zs['points'])>=5:# 中枢成立但未完成,有3笔或段以上
                x_end = _zs['points'][-1]['dt']
            else:                       # 中枢未完成,且未确定
                continue
            
            ZD = _zs['ZD']
            ZG = _zs['ZG']
            area_data=[[ {'xAxis': x_start, 'yAxis': ZD, 'value': ZD }, {'xAxis': x_end, 'yAxis': ZG, 'value': ZG }]]
            line = (Line()
            .add_xaxis([x_start, x_end])
            .add_yaxis(series_name=_ka.freq if aggregation else "ZS", y_axis=[ZD, ZG], symbol='none' 
            """        
            , markpoint_opts = opts.MarkPointOpts(
                data=[
                    opts.MarkPointItem(type_="max", name="ZG"),
                    opts.MarkPointItem(type_="min", name="ZD"),
                ]
            )
            """
            , markline_opts=opts.MarkLineOpts(
                label_opts=opts.LabelOpts(
                    position="middle", color="blue", font_size=15,
                ),
                linestyle_opts=opts.LineStyleOpts(type_="dashed"),
                data=area_data,
                symbol=["none", "none"],
            )
            )
            .set_series_opts(
                markarea_opts=opts.MarkAreaOpts(data=area_data, itemstyle_opts=opts.ItemStyleOpts(color="#dcdcdc",opacity=0.1))
            ))
            lines.append(line)
        return lines, scatters

    if with_zs:
        _areas, _scatters = __draw_zs_area(ka)
        for _ka in ka.ka_list:
            _a, _s = __draw_zs_area(_ka)
            _areas.extend(_a)
            _scatters.extend(_s)
        for _area in _areas:
            chark_k = chart_k.overlap(_area)
        for _scatter in _scatters:
            chark_k = chart_k.overlap(_scatter)

    # if with_vol:
    # 成交量图
    # ------------------------------------------------------------------------------------------------------------------
    chart_vol = Bar()
    chart_vol.add_xaxis(dts)
    for k, v in agg_dict.items():
        vol = []
        for row in v['vol']:
            if not row:
                row = {'close': 0, 'open': 0, 'vol': 0}
            item_style = red_item_style if row['close'] > row['open'] else green_item_style
            bar = opts.BarItem(name=None, value=row['vol'], itemstyle_opts=item_style, label_opts=label_not_show_opts)
            vol.append(bar)
        chart_vol.add_yaxis(series_name=k if aggregation else "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,
        )

    #if with_macd:
    # MACD图
    # ------------------------------------------------------------------------------------------------------------------
    
    chart_macd = Bar()
    chart_macd.add_xaxis(dts)
    
    for k, v in agg_dict.items():
        macd_bar = []
        for row in v['macd']:
            if not row:
                row = {'macd': 0}
            item_style = red_item_style if row['macd'] > 0 else green_item_style
            bar = opts.BarItem(name=None, value=round(row['macd'], 4), itemstyle_opts=item_style, label_opts=label_not_show_opts)
            macd_bar.append(bar)

        chart_macd.add_yaxis(series_name=k if aggregation else "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)
    for k, v in agg_dict.items():
        macd = v['macd']
        diff = [round(x['diff'], 4) if x else None for x in macd]
        dea = [round(x['dea'], 4) if x else None for x in macd]        
        line.add_yaxis(series_name=k if aggregation else "DIFF", y_axis=diff, label_opts=label_not_show_opts, is_symbol_show=False
                    , is_connect_nones=True, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#EDCB89"))
        line.add_yaxis(series_name=k if aggregation else "DEA", y_axis=dea, label_opts=label_not_show_opts, is_symbol_show=False
                    , is_connect_nones=True, linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#FFFFFF"))

    chart_macd = chart_macd.overlap(line)
    
    grid0_opts = opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="12%", height="58%")
    grid1_opts = opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="74%", height="8%")
    grid2_opts = opts.GridOpts(pos_left="3%", 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
Beispiel #22
0
def _create_line():
    return Line().add_xaxis([
        'Sunday', 'Saturday', 'Friday', 'Thursday', 'Wednesday', 'Tuesday',
        'Monday'
    ]).add_yaxis("商家A", [7, 6, 5, 4, 3, 2, 1])
    def picture1(self):
        df = pd.read_sql(
            f"select * from {self.table_name} where 检查时间 LIKE '%{self.last_month}%'",
            self.conn)
        df['time'] = pd.to_datetime(df['检查时间'])
        df['time'] = df['time'].apply(lambda x: x.strftime('%Y%m%d'))
        ya = []
        for i in df['time'].unique():
            i = str(i)
            try:
                bkk = df[df['time'] == i]['性质'].value_counts()['A类']
                ya.append(str(bkk))
            except:
                bkk = 0
                ya.append(str(bkk))
        # print(ya, len(ya))
        yb = []
        for i in df['time'].unique():
            i = str(i)
            try:
                bkk = df[df['time'] == i]['性质'].value_counts()['B类']
                yb.append(str(bkk))

            except:
                bkk = 0
                yb.append(str(bkk))
        # print(yb, len(yb))
        yc = []
        for i in df['time'].unique():
            i = str(i)
            try:
                bkk = df[df['time'] == i]['性质'].value_counts()['C类']
                yc.append(str(bkk))
                print(yc)
            except:
                bkk = 0
                yc.append(str(bkk))
        print(yc, len(yc))
        yd = []
        for i in df['time'].unique():
            i = str(i)
            try:
                bkk = df[df['time'] == i]['性质'].value_counts()['D类']
                yd.append(str(bkk))
            except:
                bkk = 0
                yd.append(str(bkk))
        x = df['time'].unique()
        # chart = picture(x,ya,yb,yc,yd)
        a = []
        for i in x:
            a.append(str(i))
        c = (
            Line(init_opts=opts.InitOpts(
                page_title=f"现场安全信息性质分布(月)")).add_xaxis(a).add_yaxis(
                    "A类", ya).add_yaxis("B类", yb).add_yaxis("C类", yc).
            add_yaxis("D类", yd).set_global_opts(
                title_opts=opts.TitleOpts(title=f"现场安全信息性质分布(月)",
                                          subtitle=f"统计时间:{self.last_month}"),
                tooltip_opts=opts.TooltipOpts(trigger="axis"),
                xaxis_opts=opts.AxisOpts(
                    axislabel_opts=opts.LabelOpts(rotate=45), name="日期"),
                # toolbox_opts=opts.ToolBoxFeatureSaveAsImageOpts(background_color= "auto",type_='jpg'),
                toolbox_opts=opts.ToolboxOpts(is_show=True,
                                              feature={
                                                  "saveAsImage": {
                                                      'backgroundColor':
                                                      'white'
                                                  },
                                                  "dataZoom": {},
                                                  "restore": {},
                                                  "magicType": {
                                                      "show": True,
                                                      "type": ["line", "bar"]
                                                  },
                                                  "dataView": {}
                                              }),
            ))
        print('已画图成功')
        return c
def draw_line_with_two_y(xaxis_data, y1_series_name, y1_axis, y2_series_name,
                         y2_axis, y3_series_name, y3_axis, y1_name, y2_name,
                         to_file, unit, svg_name):
    """
    左边是  两条线; 右边是 一条线。
    :param svg_name: svg文件
    :param xaxis_data: 横轴
    :param y1_series_name: 左边第一条线的系列名
    :param y1_axis: 左边第一条线的数值
    :param y2_series_name: 左边第二条线的系列名
    :param y2_axis: 左边第二条线的数值
    :param y3_series_name: 右边第一条线的系列名
    :param y3_axis: 右边第一条线的数值
    :param y1_name: 左边的纵轴名称
    :param y2_name: 右边的纵轴名称
    :param to_file: 结果文件
    :param unit: 横轴的数值的单位(加在每个横轴值后面,比如 月)
    :return:
    """
    xaxis_data = [str(i) + unit for i in xaxis_data]
    bar = Line(init_opts=opts.InitOpts(
        width="800px", height="600px", bg_color='white'
    )).add_xaxis(
        xaxis_data=xaxis_data,
        # add_xaxis=opts.LabelOpts(formatter="{value}" + unit),
    ).add_yaxis(
        series_name=y1_series_name,
        is_smooth=True,
        symbol="circle",
        symbol_size=8,
        is_symbol_show=True,
        # color="#d14a61",
        y_axis=y1_axis,
        yaxis_index=0,
        label_opts=opts.LabelOpts(is_show=False),
        linestyle_opts=opts.LineStyleOpts(width=2),
    ).add_yaxis(
        series_name=y2_series_name,
        is_smooth=True,
        symbol="circle",
        symbol_size=8,
        is_symbol_show=True,
        # color="#d14a61",
        y_axis=y2_axis,
        yaxis_index=0,
        label_opts=opts.LabelOpts(is_show=False),
        linestyle_opts=opts.LineStyleOpts(width=2),
    ).add_yaxis(
        series_name=y3_series_name,
        is_smooth=True,
        symbol="circle",
        symbol_size=8,
        is_symbol_show=True,
        # color="#d14a61",
        y_axis=y3_axis,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=False),
        linestyle_opts=opts.LineStyleOpts(width=2),
    ).extend_axis(yaxis=opts.AxisOpts(
        type_="value",
        name=y2_name,
        # min_=0,
        # max_=25,
        position="right",
        axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts()),
        axislabel_opts=opts.LabelOpts(formatter="{value}", font_size=15),
        splitline_opts=opts.SplitLineOpts(
            is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)),
        name_textstyle_opts=opts.TextStyleOpts(font_size=15))).set_global_opts(
            yaxis_opts=opts.AxisOpts(
                type_="value",
                name=y1_name,
                # min_=0,
                # max_=250,
                position="left",
                offset=0,
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts()),
                axislabel_opts=opts.LabelOpts(formatter="{value}",
                                              font_size=15),
                name_textstyle_opts=opts.TextStyleOpts(font_size=15)),
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(
                formatter="{value}", font_size=15), ),
            tooltip_opts=opts.TooltipOpts(trigger="axis",
                                          axis_pointer_type="cross"),
            toolbox_opts=opts.ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
                data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
                # brush=opts.ToolBoxFeatureBrushOpts(is_show=False),
            )),
            legend_opts=opts.LegendOpts(
                item_width=25,
                item_height=10,
                textstyle_opts=opts.TextStyleOpts(font_size=15)),
        )
    make_snapshot(snapshot, bar.render(to_file), svg_name)  # 生成svg图片
Beispiel #25
0
def Line_ele(name, model_names, datas, y_name, y_max):
    x = [n for n in range(len(datas[0]))]
    line = Line(init_opts=opts.InitOpts(bg_color='rgba(255,250,205,0.2)',
                                        width='1500px',
                                        height='600px',
                                        page_title=name))
    line.add_xaxis(xaxis_data=x)

    average = []
    for i in range(len(datas)):
        sum = 0
        num = 0
        y = [n[0] for n in datas[i]]
        line.add_yaxis(series_name=model_names[i],
                       y_axis=y,
                       symbol="arrow",
                       is_symbol_show=False)
        for j in datas[i]:
            sum += j[0]
            num = num + 1 if j[0] > 0 else num
        average.append(sum / num)
        print(sum, num, average[i])
    line.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markpoint_opts=opts.MarkPointOpts(data=[
            opts.MarkPointItem(type_="min", name="最小值"),
            opts.MarkPointItem(type_="max", name="最大值"),
        ]),
        markline_opts=opts.MarkLineOpts(data=[
            opts.MarkLineItem(name="multi", y=average[0]),
            opts.MarkLineItem(name="multis", y=average[1]),
            opts.MarkLineItem(name="plans", y=average[2])
        ]),
    )
    line.set_global_opts(
        title_opts=opts.TitleOpts(title=name),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=30),
                                 name='TEST_PICS'),
        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=30),
                                 name=y_name,
                                 min_=0,
                                 max_=y_max),
        legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(
            font_size=30)))

    util.mkdir('./analysis')
    line.render('./analysis/' + name + '.html')
def draw_line_picture(xaxis_data, data, to_file, unit, svg_name, stack,
                      y_name):
    """
    多条线,是否堆叠要确认下
    :param label_right:
    :param y_name: y轴名称
    :param stack: boolean, 是否要堆叠
    :param xaxis_data: x轴
    :param data: {series_name, data}
    :param svg_name: svg文件
    :param to_file: 结果文件
    :param unit: 横轴的数值的单位(加在每个横轴值后面,比如 月)
    :return:
    """
    xaxis_data = [str(i) + unit for i in xaxis_data]
    bar = Line(init_opts=opts.InitOpts(
        width="800px", height="600px", bg_color='white')).add_xaxis(
            xaxis_data=xaxis_data,
            # add_xaxis=opts.LabelOpts(formatter="{value}" + unit),
        )
    for series_name, y_axis in data.items():
        if stack:
            bar = bar.add_yaxis(
                series_name=series_name,
                is_smooth=True,
                symbol="circle",
                # symbol_size=8,
                stack='1',
                is_symbol_show=False,
                # color="#d14a61",
                y_axis=y_axis,
                yaxis_index=0,
                label_opts=opts.LabelOpts(is_show=False),
                # linestyle_opts=opts.LineStyleOpts(width=2),
                areastyle_opts=opts.AreaStyleOpts(opacity=1))
        else:
            bar = bar.add_yaxis(
                series_name=series_name,
                is_smooth=True,
                symbol="circle",
                symbol_size=8,
                is_symbol_show=True,
                # color="#d14a61",
                y_axis=y_axis,
                yaxis_index=0,
                label_opts=opts.LabelOpts(is_show=False),
                linestyle_opts=opts.LineStyleOpts(width=2),
            )
    bar = bar.set_global_opts(
        yaxis_opts=opts.AxisOpts(
            type_="value",
            name=y_name,
            name_textstyle_opts=opts.TextStyleOpts(font_size=25),
            # min_=0,
            # max_=250,
            position="left",
            offset=0,
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts()),
            axislabel_opts=opts.LabelOpts(formatter="{value}", font_size=25),
        ),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(
            formatter="{value}", font_size=25, interval=0), ),
        tooltip_opts=opts.TooltipOpts(trigger="axis",
                                      axis_pointer_type="cross"),
        toolbox_opts=opts.ToolboxOpts(feature=opts.ToolBoxFeatureOpts(
            data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
            # brush=opts.ToolBoxFeatureBrushOpts(is_show=False),
        )),
        legend_opts=opts.LegendOpts(
            pos_left="12%",
            pos_top="10%",
            orient="vertical",
            # backgroundColor='rgb(255, 255, 255)',
            item_width=40,
            item_height=20,
            textstyle_opts=opts.TextStyleOpts(font_size=25)),
    )
    make_snapshot(snapshot, bar.render(to_file), svg_name)  # 生成svg图片
Beispiel #27
0
def line_smooth() -> Line:
    c = (Line().add_xaxis(b).add_yaxis(
        "住宅", [
            len(z4),
            len(z6),
            len(z8),
            len(z10),
            len(z12),
            len(z14),
            len(z16),
            len(z18),
            len(z20),
            len(z22),
            len(z24),
            len(z26),
            len(z28),
            len(z30),
            len(z40)
        ],
        is_smooth=True).add_yaxis(
            "商业", [
                len(s4),
                len(s6),
                len(s8),
                len(s10),
                len(s12),
                len(s14),
                len(s16),
                len(s18),
                len(s20),
                len(s22),
                len(s24),
                len(s26),
                len(s28),
                len(s30),
                len(s40)
            ],
            is_smooth=True).add_yaxis(
                "写字楼", [
                    len(x4),
                    len(x6),
                    len(x8),
                    len(x10),
                    len(x12),
                    len(x14),
                    len(x16),
                    len(x18),
                    len(x20),
                    len(x22),
                    len(x24),
                    len(x26),
                    len(x28),
                    len(x30),
                    len(x40)
                ],
                is_smooth=True).add_yaxis(
                    "别墅", [
                        len(b4),
                        len(b6),
                        len(b8),
                        len(b10),
                        len(b12),
                        len(b14),
                        len(b16),
                        len(b18),
                        len(b20),
                        len(b22),
                        len(b24),
                        len(b26),
                        len(b28),
                        len(b30),
                        len(b40)
                    ],
                    is_smooth=True).set_global_opts(title_opts=opts.TitleOpts(
                        title="各区域各区间房价房源数量")))
    return c
def draw_line_picture_right_legend(xaxis_data,
                                   data,
                                   to_file,
                                   unit,
                                   svg_name,
                                   stack,
                                   y_name,
                                   pos_right,
                                   width='800px'):
    """
    多条线,是否堆叠要确认下
    :param width:
    :param pos_right:
    :param y_name: y轴名称
    :param stack: boolean, 是否要堆叠
    :param xaxis_data: x轴
    :param data: {series_name, data}
    :param svg_name: svg文件
    :param to_file: 结果文件
    :param unit: 横轴的数值的单位(加在每个横轴值后面,比如 月)
    :return:
    """
    xaxis_data = [str(i) + unit for i in xaxis_data]
    bar = Line(init_opts=opts.InitOpts(
        width="800px", height="600px", bg_color='white')).add_xaxis(
            xaxis_data=xaxis_data,
            # add_xaxis=opts.LabelOpts(formatter="{value}" + unit),
        )
    for series_name, y_axis in data.items():
        if stack:
            bar = bar.add_yaxis(
                series_name=series_name,
                is_smooth=True,
                symbol="circle",
                # symbol_size=8,
                stack='1',
                is_symbol_show=False,
                # color="#d14a61",
                y_axis=y_axis,
                yaxis_index=0,
                label_opts=opts.LabelOpts(is_show=False),
                # linestyle_opts=opts.LineStyleOpts(width=2),
                areastyle_opts=opts.AreaStyleOpts(opacity=1))
        else:
            bar = bar.add_yaxis(
                series_name=series_name,
                is_smooth=True,
                symbol="circle",
                symbol_size=8,
                is_symbol_show=True,
                # color="#d14a61",
                y_axis=y_axis,
                yaxis_index=0,
                label_opts=opts.LabelOpts(is_show=False),
                linestyle_opts=opts.LineStyleOpts(width=2),
            )
    bar = bar.set_global_opts(
        yaxis_opts=opts.AxisOpts(
            type_="value",
            name=y_name,
            # min_=0,
            # max_=250,
            position="left",
            offset=0,
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts()),
            axislabel_opts=opts.LabelOpts(formatter="{value}"),
        ),
        tooltip_opts=opts.TooltipOpts(trigger="axis",
                                      axis_pointer_type="cross"),
        # toolbox_opts=opts.ToolboxOpts(
        #     feature=opts.ToolBoxFeatureOpts(
        #         data_zoom=opts.ToolBoxFeatureDataZoomOpts(is_show=False),
        #         # brush=opts.ToolBoxFeatureBrushOpts(is_show=False),
        #     )
        # ),
        legend_opts=opts.LegendOpts(pos_right='10%',
                                    pos_top="2%",
                                    orient="vertical"),
    )
    grid = (Grid(init_opts=opts.InitOpts(
        width=width, height="600px", bg_color='rgb(255, 255, 255)')).add(
            bar,
            grid_opts=opts.GridOpts(pos_right=pos_right),
            is_control_axis_index=True))
    grid.render(to_file)
    to_svg(to_file, svg_name)
Beispiel #29
0
                       category_gap='30%')

    blue_bar.set_global_opts(
        title_opts=opts.TitleOpts(title='大乐透彩票', subtitle='开奖至今数据'),
        # toolbox_opts=opts.ToolboxOpts(),
        # datazoom_opts=opts.DataZoomOpts(),
        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(
            formatter="{value}/次")),
        xaxis_opts=opts.AxisOpts(name='开奖号码',
                                 axislabel_opts=opts.LabelOpts(rotate=-90)))
    blue_bar.set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[
        opts.MarkPointItem(type_='max', name='最大值'),
        opts.MarkPointItem(type_='min', name='最小值')
    ]))

    blue_line = Line(init_opts=opts.InitOpts(width="1800px", height="800px"))
    blue_line.set_global_opts(
        title_opts=opts.TitleOpts(title="篮球"),
        toolbox_opts=opts.ToolboxOpts(is_show=True),
        datazoom_opts=opts.DataZoomOpts(),
        xaxis_opts=opts.AxisOpts(type_="category",
                                 boundary_gap=False,
                                 name="开奖期数",
                                 axislabel_opts=opts.LabelOpts(rotate=-90)),
    )
    blue_line.add_xaxis(xaxis_data=blue_num)
    blue_line.add_yaxis(
        series_name="篮球号码",
        y_axis=blue_balls,
        symbol="emptyCircle",
        is_symbol_show=True,
Beispiel #30
0
import pyecharts.options as opts
from pyecharts.charts import Line
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.baidu.com/examples/editor.html?c=line-simple
目前无法实现的功能:
暂无
"""

x_data = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
y_data = [820, 932, 901, 934, 1290, 1330, 1320]

(Line().set_global_opts(
    tooltip_opts=opts.TooltipOpts(is_show=False),
    xaxis_opts=opts.AxisOpts(type_="category"),
    yaxis_opts=opts.AxisOpts(
        type_="value",
        axistick_opts=opts.AxisTickOpts(is_show=True),
        splitline_opts=opts.SplitLineOpts(is_show=True),
    ),
).add_xaxis(xaxis_data=x_data).add_yaxis(
    series_name="",
    y_axis=y_data,
    symbol="emptyCircle",
    is_symbol_show=True,
    label_opts=opts.LabelOpts(is_show=False),
).render("render/basic_line_chart.html"))