Esempio n. 1
0
y = []
for i in data.loc[:, ["chicknum"]].values.tolist():
    y.append(int(i[0]))

z = []
for i in data.loc[:, ["title"]].values.tolist():
    z.append(i[0])

(Scatter(init_opts=opts.InitOpts(width="1600px", height="700px")).add_xaxis(
    xaxis_data=x).add_yaxis(
        series_name="点击数",
        y_axis=[list(i) for i in zip(y, z)],
        symbol_size=15,
        label_opts=opts.LabelOpts(is_show=True),
    ).set_series_opts().set_global_opts(
        title_opts=opts.TitleOpts(title="学院官网通知点击数"),
        xaxis_opts=opts.AxisOpts(
            type_="time", splitline_opts=opts.SplitLineOpts(is_show=True)),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        tooltip_opts=opts.TooltipOpts(formatter=JsCode(
            "function (params) {return '标题 : ' + params.value[2];}")),
        visualmap_opts=opts.VisualMapOpts(type_="color",
                                          max_=5000,
                                          min_=0,
                                          dimension=1),
    ).render("showChickNum.html"))
Esempio n. 2
0
def stack_bar_percent() -> Bar:
    list2 = [
        {
            "value": 12,
            "percent": 12 / (12 + 3)
        },
        {
            "value": 23,
            "percent": 23 / (23 + 21)
        },
        {
            "value": 33,
            "percent": 33 / (33 + 5)
        },
        {
            "value": 3,
            "percent": 3 / (3 + 52)
        },
        {
            "value": 33,
            "percent": 33 / (33 + 43)
        },
    ]

    list3 = [
        {
            "value": 3,
            "percent": 3 / (12 + 3)
        },
        {
            "value": 21,
            "percent": 21 / (23 + 21)
        },
        {
            "value": 5,
            "percent": 5 / (33 + 5)
        },
        {
            "value": 52,
            "percent": 52 / (3 + 52)
        },
        {
            "value": 43,
            "percent": 43 / (33 + 43)
        },
    ]

    c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis([
        1, 2, 3, 4, 5
    ]).add_yaxis(
        "product1", list2, stack="stack1", category_gap="50%"
    ).add_yaxis(
        "product2",
        list3, stack="stack1",
        category_gap="50%"
    ).set_series_opts(label_opts=opts.LabelOpts(
        position="right",
        formatter=JsCode(
            "function(x){return Number(x.data.percent * 100).toFixed() + '%';}"
        ),
    )))
    return c
Esempio n. 3
0
def genGeo(data):
    c = (
        Geo(init_opts=opts.InitOpts(
            width='1800px',
            height='1000px',
            bg_color='#0F1C3C',
        ))
        .add_schema(
            maptype='china',
            itemstyle_opts=opts.ItemStyleOpts(
                border_color=JsCode(
                    """
                    new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                    offset: 0,
                    color: '#00F6FF'
                }, {
                    offset: 1,
                    color: '#53D9FF'
                }], false)
                    """
                ),
                color0='rgba(10,76,139,1)',
                border_width=1.0,
                opacity=0.8,
                color="#012366",
            ),
            label_opts=opts.LabelOpts(
                is_show=False,
                color='rgba(255,144,128,1)',
            ),
            emphasis_itemstyle_opts=opts.ItemStyleOpts(
                area_color='rgba(0,0,0,0)'
            ),
            emphasis_label_opts=opts.LabelOpts(
                is_show=False
            ),
            zoom=1.2,
        )
        .add(  # 添加散点图
            "",
            data,
            symbol_size=20,
            color='#EA7552',
            label_opts=opts.LabelOpts(
                is_show=True,
                color="#0f0",
                border_width=2.,
                font_size=18,
                position="inside",
                formatter=JsCode(
                    """
                    function f(param){
                        return param.name + ','+ param.value[2]/10
                    }
                    """
                ),
            )
        )
        .set_series_opts(
            range_size=[12, 40],
            itemstyle_opts=opts.ItemStyleOpts(
                border_width=1.0,
                border_color='#215495',
            ),
            areastyle_opts=opts.AreaStyleOpts(
                color={
                    "x": 0,
                    "y": 0,
                    "x2": 0,
                    "y2": 1,
                    "colorStops": [{
                        "offset": 0,
                        "color": '#073684'
                    }, {
                        "offset": 1,
                        "color": '#061E3D'
                    }],
                }
            )
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="全国本科院校分布图",
                pos_left='40%',
                pos_top='10%',
                title_textstyle_opts=opts.TextStyleOpts(
                    color='white',
                    font_size=20
                )
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                type_='size',
                min_=4*10,
                max_=80*10,
            ),
            legend_opts=opts.LegendOpts(
                is_show=False
            ),
            tooltip_opts=opts.TooltipOpts(
                trigger="item",
                formatter=JsCode(
                    """
                    function f(param){
                        return param.name + ','+ param.value[2]/10
                    }
                    """
                )
            )
        )
        .render("university-geo.html")
    )
from pywebio.output import put_html
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.commons.utils import JsCode
from pyecharts.faker import Faker

x = Faker.choose()
tl = Timeline()
for i in range(2015, 2020):
    bar = (Bar().add_xaxis(x).add_yaxis("商家A", Faker.values()).add_yaxis(
        "商家B", Faker.values()).set_global_opts(
            title_opts=opts.TitleOpts("某商店{}年营业额 - With Graphic 组件".format(i)),
            graphic_opts=[
                opts.GraphicGroup(
                    graphic_item=opts.GraphicItem(
                        rotation=JsCode("Math.PI / 4"),
                        bounding="raw",
                        right=100,
                        bottom=110,
                        z=100,
                    ),
                    children=[
                        opts.GraphicRect(
                            graphic_item=opts.GraphicItem(left="center",
                                                          top="center",
                                                          z=100),
                            graphic_shape_opts=opts.GraphicShapeOpts(
                                width=400, height=50),
                            graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                                fill="rgba(0,0,0,0.3)"),
                        ),
def get_images(x_data, y_data, filename_, series_name='x1_dist'):
    plot_line_path = '.'
    filename = plot_line_path + filename_
    background_color_js = (
        "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
        "[{offset: 0, color: '#c86589'}, {offset: 1, color: '#06a7ff'}], false)"
    )
    area_color_js = (
        "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
        "[{offset: 0, color: '#eb64fb'}, {offset: 1, color: '#3fbbff0d'}], false)"
    )
    c = (Scatter(init_opts=opts.InitOpts(bg_color=JsCode(
        background_color_js))).add_xaxis(xaxis_data=x_data).add_yaxis(
            series_name=series_name,
            y_axis=y_data,
            is_smooth=True,
            is_symbol_show=True,
            symbol="circle",
            symbol_size=6,
            linestyle_opts=opts.LineStyleOpts(color="#fff"),
            label_opts=opts.LabelOpts(is_show=True,
                                      position="top",
                                      color="white"),
            itemstyle_opts=opts.ItemStyleOpts(color="red",
                                              border_color="#fff",
                                              border_width=3),
            tooltip_opts=opts.TooltipOpts(is_show=False),
            areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js),
                                              opacity=1),
        ).set_global_opts(
            title_opts=opts.TitleOpts(
                title="show %s in one image" % series_name,
                pos_top="5%",
                pos_left="center",
                title_textstyle_opts=opts.TextStyleOpts(color="#fff",
                                                        font_size=16),
            ),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                boundary_gap=False,
                axislabel_opts=opts.LabelOpts(margin=30, color="#ffffff63"),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(
                    is_show=True,
                    length=25,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
                ),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")),
            ),
            yaxis_opts=opts.AxisOpts(
                min_='dataMin',
                type_="value",
                position="right",
                axislabel_opts=opts.LabelOpts(margin=20, color="#ffffff63"),
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(width=2, color="#fff")),
                axistick_opts=opts.AxisTickOpts(
                    is_show=True,
                    length=15,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
                ),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")),
            ),
            datazoom_opts=[
                opts.DataZoomOpts(range_start=0, range_end=100),
                opts.DataZoomOpts(type_="inside", range_start=0,
                                  range_end=100),
            ],
            legend_opts=opts.LegendOpts(is_show=False),
        ))
    c.render(filename)
Esempio n. 6
0
def anylize_to_html_01(data={}, info=''):
    from pyecharts import options as opts
    from pyecharts.commons.utils import JsCode
    from pyecharts.charts import Scatter, Bar, Timeline, Line, Page, Tab
    from pyecharts.components import Table
    tab0 = Tab()
    data.loc[(data['max_back_1'] != 0),
             '赢撤比'] = -1 * data['end_1'] / data['max_back_1']
    data.loc[(data['max_back_1'] == 0), '赢撤比'] = 0

    data = data[data['end_1'] != 0]
    clm = list(set(data['celue_name'].tolist()))
    print(clm)

    title = f'所有参数的,每个指标的统计状态:'
    tjdf = pd.DataFrame()
    i = 0
    tj_index = {
        'end_1': '最终收益',
        'sharp_rate_1': '夏普率',
        'max_back_1': '最大回撤',
        'win_rate_2': '胜率',
        'trade_nums_1': '交易次数',
        'profit_days_1': '盈利天数',
        '赢撤比': '赢撤比'
    }

    s_tj_index = []
    for clm0 in clm:
        print(clm0)
        df = data[data['celue_name'] == clm0].copy()

        for k, v in df.groupby('para1'):
            print(k)
            index_0 = i + 1
            i = i + 1
            tjdf.loc[index_0, 'para1'] = k
            tjdf.loc[index_0, 'clm'] = clm0

            for tj_ix in tj_index.keys():
                tjdf.loc[index_0, tj_index[tj_ix]] = v[tj_ix].mean()
            tjdf.loc[index_0, '赢撤比2'] = -1 * v['end_1'].mean(
            ) / v['max_back_1'].mean() if v['max_back_1'].mean() != 0 else 0

    print(tjdf)
    print(tjdf.keys())
    tj_index2 = list(tjdf.keys())
    tj_index2.remove('para1')
    tj_index2.remove('clm')
    clm2 = tj_index2
    for x, clm0 in enumerate(clm):
        df0 = tjdf[tjdf['clm'] == clm0].copy()
        tl = Timeline()
        for k, i in enumerate(tj_index2):
            xdata, ydata1 = df0['para1'], df0[['para1', i]]
            print(xdata)
            print(ydata1)
            # exit()
            bar0 = (Bar().add_xaxis(xdata.tolist()).add_yaxis(
                '均值',
                ydata1.values.tolist(),
                label_opts=opts.LabelOpts(is_show=False, ),
            ).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    offset=0,
                    name='参数名:',
                    type_="value",
                    is_show=True,
                    axistick_opts=opts.AxisTickOpts(is_show=True)),
                yaxis_opts=opts.AxisOpts(
                    offset=0,
                    name='均值:',
                    type_="value",
                    axistick_opts=opts.AxisTickOpts(is_show=True)),
                title_opts=opts.TitleOpts(title=f"{title}==:{i}"),
                legend_opts=opts.LegendOpts(pos_right=True),
                tooltip_opts=opts.TooltipOpts(formatter=JsCode(
                    "function (params) { return '==para1:'+params.value[0] +' <br/>== 指标:'+ params.value[1]}"
                ), ),
            ))

            tl.add(bar0, f"{i}")
        tab0.add(tl, clm0)

    for x, clm0 in enumerate(clm2):
        tl = Timeline()
        tjdf0 = tjdf[tjdf['最终收益'] != 0].copy()
        tjdf0.sort_values(clm0, ascending=True, inplace=True)
        df0 = tjdf0.iloc[-1 * int(tjdf0.shape[0] * 0.12):].copy()
        index_list = list(df0.keys())
        index_list.remove('clm')
        df0 = df0[index_list]
        for k, i in enumerate(index_list):
            xdata, ydata1 = df0['para1'], df0[[i, 'para1']]
            print(ydata1)
            sca0 = (Scatter().add_xaxis(xdata.tolist()).add_yaxis(
                '分布值',
                ydata1.values.tolist(),
                label_opts=opts.LabelOpts(is_show=False, ),
            ).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    offset=0,
                    name='参数名:',
                    type_="value",
                    is_show=True,
                    axistick_opts=opts.AxisTickOpts(is_show=True)),
                yaxis_opts=opts.AxisOpts(
                    offset=0,
                    name='分布值:',
                    type_="value",
                    axistick_opts=opts.AxisTickOpts(is_show=True)),
                title_opts=opts.TitleOpts(title=f"{title}==:{i}"),
                legend_opts=opts.LegendOpts(pos_right=True),
                tooltip_opts=opts.TooltipOpts(formatter=JsCode(
                    "function (params) { return '==para1:'+params.value[0] +' <br/>== 指标:'+ params.value[1]}"
                ), ),
            ))

            tl.add(sca0, f"{i}")
        tab0.add(tl, clm0)

    tab0.render(f"{info}.html")
    print(f"{info}.html")
    return
line_color_js = """
new echarts.graphic.LinearGradient(
    0,0,0,1,
    [{offset: 0,
      color: '#2e9afe'},
     {
      offset: 0.3,
      color: '#01a9db'},
     {
      offset: 0.6,
      color: '#f5bca9'},
     {
      offset: 1,
      color: '#b40404'}]
    )
"""

# 执行绘图
knowledgeGraph = (Graph().set_global_opts(title_opts=opts.TitleOpts(
    title="Python知识图谱")).add(
        series_name="",
        links=linkList,
        nodes=nodeList,
        layout="circular",
        is_rotate_label=True,
        linestyle_opts=opts.LineStyleOpts(color=JsCode(js_code=line_color_js),
                                          curve=0.3,
                                          width=1.5),
        itemstyle_opts=opts.ItemStyleOpts(color="#474747")).render(
            path=os.path.join(resultPath, resultFileName)))
                    "rating": movie["rating"]
                })

    data_pair = []
    tooltip = {}
    for i in range(len(genres)):
        data_pair.append([genres[i], len(meta_data[i])])
        tmp = sorted([[
            t["title"].replace("\"", "&quot").replace("\'", "&apos"),
            t["rating"]
        ] for t in meta_data[i]],
                     key=lambda t: t[1],
                     reverse=True)[:5]
        tooltip[genres[i]] = tmp
    tooltip_json = json.dumps(tooltip)
    # print(tooltip["Drama"])

    pie = Pie()
    pie.add_js_funcs("data = JSON.parse(\'" + tooltip_json + "\');")
    pie.add(
        series_name="",
        data_pair=data_pair,
        tooltip_opts=opts.TooltipOpts(
            is_show=True,
            formatter=JsCode(
                "function(params){ text = \'\'; for (i = 0; i < 5; i++) { title = data[params.name][i][0]; rating = data[params.name][i][1]; text += title + \': \' + rating + '<br>'}; return text;}"
            )))
    pie.set_global_opts(title_opts=opts.TitleOpts(title="IMDB Pie"),
                        legend_opts=opts.LegendOpts(is_show=False))
    pie.render("pie.html")
Esempio n. 9
0
    def kline(self):
        data = self.calculate().to_dict('list')
        kline = (
            Kline().add_xaxis(xaxis_data=data["date"]).add_yaxis(
                series_name="portfolio index",
                y_axis=data["datas"],
                itemstyle_opts=opts.ItemStyleOpts(
                    color="#ef232a",
                    color0="#14b143",
                    border_color="#ef232a",
                    border_color0="#14b143",
                ),
            ).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    is_scale=True,
                    boundary_gap=False,
                    axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                    split_number=20,
                    min_="dataMin",
                    max_="dataMax",
                ),
                yaxis_opts=opts.AxisOpts(
                    is_scale=True,
                    splitline_opts=opts.SplitLineOpts(is_show=True)),
                datazoom_opts=[
                    opts.DataZoomOpts(is_show=False,
                                      type_="inside",
                                      xaxis_index=[0, 0],
                                      range_end=100),
                    opts.DataZoomOpts(is_show=True,
                                      xaxis_index=[0, 1],
                                      pos_top="97%",
                                      range_end=100),
                    opts.DataZoomOpts(is_show=False,
                                      xaxis_index=[0, 2],
                                      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"),
                ),
                brush_opts=opts.BrushOpts(
                    x_axis_index="all",
                    brush_link="all",
                    out_of_brush={"colorAlpha": 0.1},
                    brush_type="lineX",
                ),
                # 三个图的 axis 连在一块
                axispointer_opts=opts.AxisPointerOpts(
                    is_show=True,
                    link=[{
                        "xAxisIndex": "all"
                    }],
                    label=opts.LabelOpts(background_color="#777"),
                ),
            ))

        kline_line = (Line().add_xaxis(xaxis_data=data["date"]).add_yaxis(
            series_name="MA5",
            y_axis=self.calculate_ma(day_count=5, data=data),
            is_smooth=True,
            linestyle_opts=opts.LineStyleOpts(opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="MA10",
            y_axis=self.calculate_ma(day_count=10, data=data),
            is_smooth=True,
            linestyle_opts=opts.LineStyleOpts(opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="MA20",
            y_axis=self.calculate_ma(day_count=20, data=data),
            is_smooth=True,
            linestyle_opts=opts.LineStyleOpts(opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="MA30",
            y_axis=self.calculate_ma(day_count=30, data=data),
            is_smooth=True,
            linestyle_opts=opts.LineStyleOpts(opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                split_number=3,
                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),
            ),
        ))
        # Overlap Kline + Line
        overlap_kline_line = kline.overlap(kline_line)

        # Bar-1
        bar_1 = (Bar().add_xaxis(xaxis_data=data["date"]).add_yaxis(
            series_name="Volumn",
            y_axis=data["volume"],
            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(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

        # Bar-2 (Overlap Bar + Line)
        bar_2 = (Bar().add_xaxis(xaxis_data=data["date"]).add_yaxis(
            series_name="MACD",
            y_axis=data["MACD"],
            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(
            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=False),
        ))

        line_2 = (Line().add_xaxis(xaxis_data=data["date"]).add_yaxis(
            series_name="DIFF",
            y_axis=data["DIFF"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="DEA",
            y_axis=data["DEA"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))
        # 最下面的柱状图和折线图
        overlap_bar_line = bar_2.overlap(line_2)

        # 最后的 Grid
        grid_chart = Grid(
            init_opts=opts.InitOpts(width="1500px", height="750px"))

        # 这个是为了把 data.datas 这个数据写入到 html 中,还没想到怎么跨 series 传值
        # demo 中的代码也是用全局变量传的
        grid_chart.add_js_funcs("var barData = {}".format(data["datas"]))

        # K线图和 MA5 的折线图
        grid_chart.add(
            overlap_kline_line,
            grid_opts=opts.GridOpts(pos_left="3%",
                                    pos_right="1%",
                                    height="60%"),
        )
        # Volumn 柱状图
        grid_chart.add(
            bar_1,
            grid_opts=opts.GridOpts(pos_left="3%",
                                    pos_right="1%",
                                    pos_top="71%",
                                    height="10%"),
        )
        # MACD DIFS DEAS
        grid_chart.add(
            overlap_bar_line,
            grid_opts=opts.GridOpts(pos_left="3%",
                                    pos_right="1%",
                                    pos_top="82%",
                                    height="14%"),
        )
        makedir(self.path, 'kline')
        grid_chart.render(
            f"{self.path}\\kline\\{str(self.names)}_{time.strftime('%Y-%m-%d', time.localtime())}.html"
        )
Esempio n. 10
0
        ),
        datazoom_opts=opts.DataZoomOpts(
            is_show=True,
            pos_bottom='2%',
            pos_top='94%'        
        )
    )
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="本科院校",
        y_axis=y1_data,
        label_opts=opts.LabelOpts(
            is_show=False
        ),
        bar_width='25%',
        itemstyle_opts={
            "normal": {
                "color": JsCode(
                    """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                    offset: 0,
                    color: '#fccb05'
                }, {
                    offset: 1,
                    color: '#f5804d'
                }])"""
                ),
                "barBorderRadius": 11,
            }
        }
    )
).render("university-top.html")

x_data = ["14", "15", "16", "17", "18", "19", "20", "21", "22", "23"]
y_data = [393, 438, 485, 631, 689, 824, 987, 1000, 1100, 1200]

background_color_js = (
    "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
    "[{offset: 0, color: '#c86589'}, {offset: 1, color: '#06a7ff'}], false)"
)
area_color_js = (
    "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
    "[{offset: 0, color: '#eb64fb'}, {offset: 1, color: '#3fbbff0d'}], false)"
)

c = (
    Line(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="注册总量",
        y_axis=y_data,
        is_smooth=True,
        is_symbol_show=True,
        symbol="circle",
        symbol_size=6,
        linestyle_opts=opts.LineStyleOpts(color="#fff"),
        label_opts=opts.LabelOpts(is_show=True, position="top", color="white"),
        itemstyle_opts=opts.ItemStyleOpts(
            color="red", border_color="#fff", border_width=3
        ),
        tooltip_opts=opts.TooltipOpts(is_show=False),
        areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js), opacity=1),
Esempio n. 12
0
        "value": 3,
        "percent": 3 / (12 + 3)
    },
    {
        "value": 21,
        "percent": 21 / (23 + 21)
    },
    {
        "value": 5,
        "percent": 5 / (33 + 5)
    },
    {
        "value": 52,
        "percent": 52 / (3 + 52)
    },
    {
        "value": 43,
        "percent": 43 / (33 + 43)
    },
]

c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis([
    1, 2, 3, 4, 5
]).add_yaxis("product1", list2, stack="stack1", category_gap="50%").add_yaxis(
    "product2", list3, stack="stack1", category_gap="50%"
).set_series_opts(label_opts=opts.LabelOpts(
    position="right",
    formatter=JsCode(
        "function(x){return Number(x.data.percent * 100).toFixed() + '%';}"),
)).render("stack_bar_percent.html"))
Esempio n. 13
0
def create_mixed_line_and_bar(type, title, x_list, data_list, data_unit1, data_unit2 = None):
    """
        :param type: 1-折线用于表示变化率and单柱状图+单折线  2-折线用于表示变化率and多柱状图+多折线
                    3-折线表示占比and单柱状图+单折线         4-折线表示占比and多柱状图+多折线
                    5-折线用于描述另一维度指标(此时data_list中最后一个k-v为折线数据)
        :param title: 图表名称
        :param x_list: 横坐标内容为时间序列,纵坐标高度为多个(同级)指标的总和,具体各个指标的数值、比例以不同颜色标出
        :param data_list: 字典{key1:value1,key2:value2...},构成柱状图的多个不同类型的bar
        :param data_unit1: 第一根y轴的数值单位
        :param data_unit2: 第二根y轴的数值单位
        :return:
        """
    c = Bar(init_opts=opts.InitOpts(height="600px",width="900px",theme=ThemeType.MACARONS))
    c.add_xaxis(x_list)
    if type == 1:                               # 因为有overlap,所以需要自适应调整刻度范围,是的bar和line都能显示出来
        all_rate_list = []
        for key in data_list.keys():            # 单柱状图只有一个bar
            change_rate_list = [0]
            c.add_yaxis(key, data_list[key], bar_width="20%",label_opts=opts.LabelOpts(is_show=True))
            for i in range(1,len(data_list[key])):
                if data_list[key][i-1] == 0 or data_list[key][i-1] is None or data_list[key][i] is None:                     # 注意分母不为0
                    change_rate_list.append(None)
                else:
                    change_rate_list.append(round((data_list[key][i]-data_list[key][i-1])/data_list[key][i-1]*100,2))
            all_rate_list.append(change_rate_list)

        c.extend_axis(yaxis=opts.AxisOpts(
            name="变化率",
            type_="value",
            min_=int(round((getMinRate(all_rate_list)-(getMaxRate(all_rate_list)-getMinRate(all_rate_list)))/10)*10),
            max_=int(round((getMaxRate(all_rate_list)/10)*10)),
            interval=10,
            axislabel_opts=opts.LabelOpts(formatter="{value} %"),
        ))
        line = (
            Line()
                .add_xaxis(xaxis_data=x_list)
                .add_yaxis(
                series_name="增长率",
                yaxis_index=1,
                y_axis=all_rate_list[0],
                label_opts=opts.LabelOpts(is_show=True, formatter=JsCode(
                        "function(x){console.log(x);return Number(x.data[1]).toFixed(2) + '%';}"
                      )),
            )
        )
        c.set_global_opts(title_opts=opts.TitleOpts(title=title,# subtitle="数据来源国家统计局",
                                                    # pos_left="center",pos_bottom="0px",
                                                    # item_gap=2,
                                                    # subtitle_textstyle_opts=opts.TextStyleOpts(color="black")
                                                    ),
                          legend_opts=opts.LegendOpts(pos_left="right"),
                          yaxis_opts=opts.AxisOpts(name="单位:" + data_unit1,
                                               # name_location="end",
                                               # name_gap=5,
                                               # # name_rotate=45,
                                               min_=0,                          # 基本上指标数据都是为正的
                                               max_=int(round(getMaxData(data_list)/10)*10)*2,
                                               interval=10,
                                             ))
        c.overlap(line)
    elif type == 2:
        count = len(data_list.keys())
        all_rate_list = []
        keys_list = []
        for key in data_list.keys():
            keys_list.append(key)
            change_rate_list = [0]
            c.add_yaxis(key, data_list[key], label_opts=opts.LabelOpts(is_show=True))
            for i in range(1,len(data_list[key])):
                if data_list[key][i-1] == 0 or data_list[key][i-1] is None or data_list[key][i] is None:                     # 注意分母不为0
                    change_rate_list.append(None)
                else:
                    change_rate_list.append(round((data_list[key][i]-data_list[key][i-1])/data_list[key][i-1]*100,2))
            all_rate_list.append(change_rate_list)
        c.extend_axis(yaxis=opts.AxisOpts(
            name="变化率",
            type_="value",
            min_=int(
                round((getMinRate(all_rate_list) - (getMaxRate(all_rate_list) - getMinRate(all_rate_list))) / 10) * 10),
            max_=int(round((getMaxRate(all_rate_list) / 10) * 10)),
            interval=10,
            axislabel_opts=opts.LabelOpts(formatter="{value} %"),
        ))
        all_line = []
        for i in range(count):
            line = (
                Line()
                    .add_xaxis(xaxis_data=x_list)
                    .add_yaxis(
                    series_name=keys_list[i] + "增长率",
                    yaxis_index=1,
                    y_axis=all_rate_list[i],
                    label_opts=opts.LabelOpts(is_show=True, formatter=JsCode(
                        "function(x){console.log(x);return Number(x.data[1]).toFixed(2) + '%';}"
                    )),
                )
            )
            all_line.append(line)
        c.set_global_opts(title_opts=opts.TitleOpts(title=title,  # subtitle="数据来源国家统计局",
                                                    pos_left="center",pos_bottom="0px",
                                                    # item_gap=2,
                                                    # subtitle_textstyle_opts=opts.TextStyleOpts(color="black")
                                                    ),
                          legend_opts=opts.LegendOpts(pos_left="right"),
                          yaxis_opts=opts.AxisOpts(name="单位:" + data_unit1,
                                                   # name_location="end",
                                                   # name_gap=5,
                                                   # # name_rotate=45,
                                                   min_=0,
                                                   max_=int(round(getMaxData(data_list)/10)*10)*2,
                                                   interval=10,
                                                   ))
        for line in all_line:
            c.overlap(line)

    src_path = "./指标-年度-图片生成/"
    html_file_name = src_path + title + ".html"
    img_file_name = src_path + title + ".png"
    make_snapshot(snapshot, c.render(html_file_name), img_file_name)
    print(img_file_name+":生成完毕...")
Esempio n. 14
0
def draw_chart(ts_code, start_date, end_date):
    '''
        pyecharts V1 版本开始支持链式调用
       文档地址 https://pyecharts.org/#/zh-cn/
    '''
    stock_data = get_process_datas(ts_code, start_date, end_date)
    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
Esempio n. 15
0
def plot_kline(ka, bs=None, file_html="kline.html", width="1400px", height="680px"):
    """

    :param ka: KlineAnalyze
    :param bs: pd.DataFrame
        买卖点,包含三个字段 ["操作提示", "交易时间", "交易价格"]
    :param file_html: str
    :param width: str
    :param height: str
    :return: None
    """
    df = pd.DataFrame(ka.kline)
    df = macd(df)
    x = df.dt.to_list()
    title = "%s | %s 至 %s" % (ka.symbol, ka.start_dt, ka.end_dt)
    kline = (
        Kline()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="",
            y_axis=df[['open', 'close', 'low', 'high']].values.tolist(),
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ef232a",
                color0="#14b143",
                border_color="#ef232a",
                border_color0="#14b143",
            ),
        )
            .set_series_opts(
            markarea_opts=opts.MarkAreaOpts(is_silent=True)
        )
            .set_global_opts(
            title_opts=opts.TitleOpts(title=title, pos_left="0"),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                is_scale=True, splitline_opts=opts.SplitLineOpts(is_show=True),
                axislabel_opts=opts.LabelOpts(is_show=True, position="inside")
            ),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False, type_="inside", xaxis_index=[0, 0], range_end=100
                ),
                opts.DataZoomOpts(
                    is_show=True, xaxis_index=[0, 1], pos_top="96%", range_end=100
                ),
                opts.DataZoomOpts(is_show=False, xaxis_index=[0, 2], range_end=100),
            ],
            # 三个图的 axis 连在一块
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{"xAxisIndex": "all"}],
                label=opts.LabelOpts(background_color="#777"),
            ),
        )
    )

    kline_line = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="笔",
            y_axis=df.bi.tolist(),
            is_smooth=False,
            is_connect_nones=True,
            symbol='diamond',
            symbol_size=8,
            linestyle_opts=opts.LineStyleOpts(opacity=1, type_='dotted', width=2),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="线段",
            y_axis=df.xd.tolist(),
            is_smooth=False,
            is_connect_nones=True,
            symbol='triangle',
            symbol_size=12,
            linestyle_opts=opts.LineStyleOpts(opacity=1, type_='solid', width=2),
            label_opts=opts.LabelOpts(is_show=True, position='right'),
        )
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                split_number=3,
                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, position="inside"),
            ),
        )
    )
    # Overlap Kline + Line
    overlap_kline_line = kline.overlap(kline_line)

    if isinstance(bs, pd.DataFrame) and len(bs) > 0:
        c = (
            Scatter()
                .add_xaxis(bs['交易时间'].to_list())
                .add_yaxis(
                "买卖点",
                bs['交易价格'].to_list(),
                label_opts=opts.LabelOpts(
                    is_show=True,
                    position="left",
                    formatter=JsCode(
                        "function(params){return bsName[params.dataIndex][0];}"
                    )
                ),
            ))
        overlap_kline_line = overlap_kline_line.overlap(c)

    # draw volume
    bar_1 = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="Volumn",
            yaxis_data=df.vol.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(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(is_show=True, position='inside')
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

    # Bar-2 (Overlap Bar + Line)
    bar_2 = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="MACD",
            yaxis_data=df.macd.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(
            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, position="inside"),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

    line_2 = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="DIF",
            y_axis=df['diff'].tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="DEA",
            y_axis=df['dea'].tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
    )

    # draw MACD
    overlap_bar_line = bar_2.overlap(line_2)

    # 最后的 Grid
    grid_chart = Grid(init_opts=opts.InitOpts(width=width, height=height, page_title=title))
    grid_chart.add_js_funcs("var barData = {}".format(df[['open', 'close', 'low', 'high']].values.tolist()))
    if isinstance(bs, pd.DataFrame) and len(bs) > 0:
        grid_chart.add_js_funcs("var bsName = {}".format(bs[["操作提示", "交易价格"]].values.tolist()))

    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="60%"),
    )
    grid_chart.add(
        bar_1,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="71%", height="10%"),
    )
    grid_chart.add(
        overlap_bar_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="82%", height="14%"),
    )
    grid_chart.render(path=file_html)
Esempio n. 16
0
        "2015-7",
        "2015-8",
        "2015-9",
        "2015-10",
        "2015-11",
        "2015-12",
    ],
    xaxis=opts.AxisOpts(
        type_="category",
        axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
        axisline_opts=opts.AxisLineOpts(
            is_on_zero=False,
            linestyle_opts=opts.LineStyleOpts(color="#6e9ef1")),
        axispointer_opts=opts.AxisPointerOpts(
            is_show=True,
            label=opts.LabelOpts(formatter=JsCode(js_formatter))),
    ),
).add_yaxis(
    series_name="2015 降水量",
    is_smooth=True,
    symbol="emptyCircle",
    is_symbol_show=False,
    # xaxis_index=1,
    color="#d14a61",
    y_axis=[
        2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3
    ],
    label_opts=opts.LabelOpts(is_show=False),
    linestyle_opts=opts.LineStyleOpts(width=2),
).add_yaxis(
    series_name="2016 降水量",
Esempio n. 17
0
                "globalCoord":
                False
            })
    ).set_global_opts(title_opts=opts.TitleOpts(
        title="拜登和川普最新支持率",
        title_link="https://new.qq.com/omn/20201004/20201004A0098Z00.html",
        pos_left="32%",
        pos_top="15%",
        title_textstyle_opts=opts.TextStyleOpts(
            color="white",
            font_size=30,
        ))))
    return l1


l1 = buildLiquid("拜登", [0.65], ["30%", "50%"])
l2 = buildLiquid("川普", [0.35], ["70%", "50%"])

grid = (Grid(init_opts=opts.InitOpts(bg_color=JsCode("""
            new echarts.graphic.RadialGradient(0.3, 0.3, 0.8, [{
            offset: 0,
            color: '#431ab8'
            }, {
            offset: 1,
            color: '#471bba'
            }])
            """))).add(l1, grid_opts=opts.GridOpts()).add(
    l2, grid_opts=opts.GridOpts()))

grid.render("multiple_liquid.html")
Esempio n. 18
0
# 多个水球图显示
l1 = (Liquid().add("lq", [0.6, 0.7], center=["60%", "50%"],
                   shape="diamond").set_global_opts(title_opts=opts.TitleOpts(
                       title="多个Liquid显示")))

# JsCode里面的%只能是单引号,双引号不会报错,但是结果也不会显示
# Math.floor() 向下取整
l2 = Liquid().add(
    "lq",
    [0.3254],
    center=["25%", "50%"],
    shape="diamond",
    label_opts=opts.LabelOpts(
        font_size=50,
        formatter=JsCode("""function (param){
						return (Math.floor(param.value * 10000)/100) + '%';  

					}"""),
        position="inside",
    ),
)

grid = Grid().add(l1, grid_opts=opts.GridOpts()).add(l2,
                                                     grid_opts=opts.GridOpts())
grid.render("multiple_liquid.html")

# Section2 平行坐标系
from pyecharts.charts import Parallel

data = [
    [1, 91, 45, 125, 0.82, 34, 23, "良"],
    [2, 65, 27, 78, 0.86, 45, 29, "良"],
Esempio n. 19
0
def anylize_to_html_02(data={}, fl_style='para1', info='', add_info=''):
    # 根据生成的原始数据
    from pyecharts import options as opts
    from pyecharts.commons.utils import JsCode
    from pyecharts.charts import Scatter, Bar, Timeline, Line, Page, Tab
    from pyecharts.components import Table
    tab0 = Tab()
    data.loc[(data['max_back_1'] != 0),
             '赢撤比'] = -1 * data['end_1'] / data['max_back_1']
    data.loc[(data['max_back_1'] == 0), '赢撤比'] = 0

    data = data[data['end_1'] != 0]

    clm = list(set(data['celue_name'].tolist()))
    print(clm)

    title = f'所有参数的,每个指标的统计状态:'
    tjdf = pd.DataFrame()
    tj_dict = {}
    # 生成分类数据tjdf
    i = 0
    tj_index = {
        'end_1': '最终收益',
        'sharp_rate_1': '夏普率',
        'max_back_1': '最大回撤',
        'win_rate_2': '胜率',
        'trade_nums_1': '交易次数',
        'profit_days_1': '盈利天数',
        '赢撤比': '赢撤比'
    }
    for clm0 in clm:
        print(clm0)
        df = data[data['celue_name'] == clm0].copy()

        for k, v in df.groupby(fl_style):
            print(k)
            index_0 = i + 1
            i = i + 1
            tjdf.loc[index_0, fl_style] = k
            tjdf.loc[index_0, 'clm'] = clm0

            for tj_ix in tj_index.keys():
                tjdf.loc[index_0, tj_index[tj_ix]] = v[tj_ix].mean()
            tjdf.loc[index_0, '赢撤比2'] = -1 * v['end_1'].mean(
            ) / v['max_back_1'].mean() if v['max_back_1'].mean() != 0 else 0

    print(tjdf)
    print(tjdf.keys())
    # exit()
    filter_col = '夏普率'

    df0_dict = {}  #策略名+参数的字典。
    tjdf2 = pd.DataFrame()
    for x, clm0 in enumerate(clm):
        # 每个策略类,按照filter_col排序,根据每个策略回测数量,选取比较高的排名的策略
        df0 = tjdf[tjdf['clm'] == clm0].copy()
        df0.sort_values(filter_col, ascending=True, inplace=True)
        df0 = df0.iloc[-1 * int(df0.shape[0] * 0.35):]
        df0_dict[str(df0.iloc[-1]['clm'])] = list(
            sorted(set(df0[fl_style].tolist())))
        tjdf2 = tjdf2.append(df0, ignore_index=True)
    tjdf2.sort_values('最终收益', ascending=True, inplace=True)
    tjdf2 = tjdf2.iloc[int(tjdf2.shape[0] * 0.1):]
    print(tjdf2)
    tj_index2 = list(tjdf2.keys())
    tj_index2.remove(fl_style)
    tj_index2.remove('clm')
    clm2 = tj_index2
    for x, clm0 in enumerate(clm2):
        tl = Timeline()
        tjdf0 = tjdf2[tjdf2['最终收益'] != 0].copy()
        tjdf0.sort_values(clm0, ascending=True, inplace=True)
        # df0 = tjdf0.iloc[-1*int(tjdf0.shape[0]*0.12):].copy()
        df0 = tjdf0
        index_list = list(df0.keys())
        index_list.remove('clm')
        df0 = df0[index_list]
        for k, i in enumerate(index_list):
            xdata, ydata1 = df0[fl_style], df0[[i, fl_style]]
            print(add_info)
            # print( ydata1)
            sca0 = (Scatter().add_js_funcs(
                f"document.write('%s')" % add_info
            ).add_xaxis(xdata.tolist()).add_yaxis(
                '分布值',
                ydata1.values.tolist(),
                label_opts=opts.LabelOpts(is_show=False, ),
            ).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    offset=0,
                    name='参数名:',
                    type_="value",
                    is_show=True,
                    axistick_opts=opts.AxisTickOpts(is_show=True)),
                yaxis_opts=opts.AxisOpts(
                    offset=0,
                    name='分布值:',
                    type_="value",
                    axistick_opts=opts.AxisTickOpts(is_show=True)),
                title_opts=opts.TitleOpts(title=f"{title}==:{i}"),
                legend_opts=opts.LegendOpts(pos_right=True),
                tooltip_opts=opts.TooltipOpts(formatter=JsCode(
                    "function (params) { return '==canshu:'+params.value[0] +' <br/>== 指标:'+ params.value[1]}"
                ), ),
            ))

            tl.add(sca0, f"{i}")
        tab0.add(tl, clm0)

    tl.render(f"{info}.html")
    print(f"{info}.html")
    return df0_dict
Esempio n. 20
0
    RADAR: str = "radar"
    SANKEY: str = "sankey"
    SCATTER: str = "scatter"
    SCATTER3D: str = "scatter3D"
    SUNBURST: str = "sunburst"
    THEMERIVER: str = "themeRiver"
    TREE: str = "tree"
    TREEMAP: str = "treemap"
    WORDCLOUD: str = "wordCloud"
    CUSTOM: str = "custom"


ToolTipFormatterType = {
    _ChartType.GEO:
    JsCode("""function (params) {
        return params.name + ' : ' + params.value[2];
    }"""),
    _ChartType.GAUGE:
    "{a} <br/>{b} : {c}%",
}


class _ThemeType:
    BUILTIN_THEMES = ["light", "dark", "white"]
    LIGHT = "light"
    DARK = "dark"
    WHITE = "white"
    CHALK: str = "chalk"
    ESSOS: str = "essos"
    INFOGRAPHIC: str = "infographic"
    MACARONS: str = "macarons"
    ("海南", [110.3893, 19.8516, 300]),
    ("上海", [121.4648, 31.2891, 1300]),
]

c = (
    Map3D()
    .add_schema(
        itemstyle_opts=opts.ItemStyleOpts(
            color="rgb(5,101,123)",
            opacity=1,
            border_width=0.8,
            border_color="rgb(62,215,213)",
        ),
        map3d_label=opts.Map3DLabelOpts(
            is_show=False,
            formatter=JsCode("function(data){return data.name + " " + data.value[2];}"),
        ),
        emphasis_label_opts=opts.LabelOpts(
            is_show=False,
            color="#fff",
            font_size=10,
            background_color="rgba(0,23,11,0)",
        ),
        light_opts=opts.Map3DLightOpts(
            main_color="#fff",
            main_intensity=1.2,
            main_shadow_quality="high",
            is_main_shadow=False,
            main_beta=10,
            ambient_intensity=0.3,
        ),
                197.20820681141507,
            ],
        ],
        "outliers": [],
    },
]

(Boxplot(init_opts=opts.InitOpts(width="1600px", height="800px")).add_xaxis(
    xaxis_data=axis_data).add_yaxis(
        series_name="category0",
        y_axis=data[0]["boxData"],
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode("""function(param) { return [
                            'Experiment ' + param.name + ': ',
                            'upper: ' + param.data[0],
                            'Q1: ' + param.data[1],
                            'median: ' + param.data[2],
                            'Q3: ' + param.data[3],
                            'lower: ' + param.data[4]
                        ].join('<br/>') }""")),
    ).add_yaxis(
        series_name="category1",
        y_axis=data[1]["boxData"],
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode("""function(param) { return [
                            'Experiment ' + param.name + ': ',
                            'upper: ' + param.data[0],
                            'Q1: ' + param.data[1],
                            'median: ' + param.data[2],
                            'Q3: ' + param.data[3],
                            'lower: ' + param.data[4]
                        ].join('<br/>') }""")),
def line_color_with_js_func() -> Line:
    x_data = ["14", "15", "16", "17", "18", "19", "20", "21", "22", "23"]
    y_data = [393, 438, 485, 631, 689, 824, 987, 1000, 1100, 1200]

    background_color_js = (
        "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
        "[{offset: 0, color: '#c86589'}, {offset: 1, color: '#06a7ff'}], false)"
    )
    area_color_js = (
        "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
        "[{offset: 0, color: '#eb64fb'}, {offset: 1, color: '#3fbbff0d'}], false)"
    )

    c = (Line(init_opts=opts.InitOpts(bg_color=JsCode(
        background_color_js))).add_xaxis(xaxis_data=x_data).add_yaxis(
            series_name="注册总量",
            y_axis=y_data,
            is_smooth=True,
            is_symbol_show=True,
            symbol="circle",
            symbol_size=6,
            linestyle_opts=opts.LineStyleOpts(color="#fff"),
            label_opts=opts.LabelOpts(is_show=True,
                                      position="top",
                                      color="white"),
            itemstyle_opts=opts.ItemStyleOpts(color="red",
                                              border_color="#fff",
                                              border_width=3),
            tooltip_opts=opts.TooltipOpts(is_show=False),
            areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js),
                                              opacity=1),
        ).set_global_opts(
            title_opts=opts.TitleOpts(
                title="OCTOBER 2015",
                pos_bottom="5%",
                pos_left="center",
                title_textstyle_opts=opts.TextStyleOpts(color="#fff",
                                                        font_size=16),
            ),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                boundary_gap=False,
                axislabel_opts=opts.LabelOpts(margin=30, color="#ffffff63"),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(
                    is_show=True,
                    length=25,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
                ),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")),
            ),
            yaxis_opts=opts.AxisOpts(
                type_="value",
                position="right",
                axislabel_opts=opts.LabelOpts(margin=20, color="#ffffff63"),
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(width=2, color="#fff")),
                axistick_opts=opts.AxisTickOpts(
                    is_show=True,
                    length=15,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
                ),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))
    return c
Esempio n. 24
0
def new_label_opts():
    return opts.LabelOpts(formatter=JsCode(fn), position="center")
Esempio n. 25
0
def plot_kline(df, rendered=True, ucolor="#ef232a", dcolor="#14b143", col=""):
    """
    针对 dataframe 直接画出标准看盘软件的上k线图下成交量图的形式

    :param df:
    :param rendered:
    :param ucolor: str for color when going up, default red in A stock as "#ef232a"
    :param dcolor: str for color when going down, default green in A stock as "#14b143"
    :param col:
    :return:
    """
    # TODO: color changing seems to make no effect, possible issue with pyecharts
    kline = (
        Kline().add_xaxis(xaxis_data=list(df["date"])).add_yaxis(
            series_name="",
            itemstyle_opts=opts.ItemStyleOpts(
                color=ucolor,
                color0=dcolor,
                border_color=ucolor,
                border_color0=dcolor,
            ),
            y_axis=list(zip(df["open"], df["close"], df["low"], df["high"])),
            markpoint_opts=opts.MarkPointOpts(
                data=[
                    opts.MarkPointItem(type_="max", name="最大值"),
                    opts.MarkPointItem(type_="min", name="最小值"),
                ],
                symbol="pin",
                symbol_size=[56, 40],
                # label_opts=opts.LabelOpts(color="#CCFFFF",position=["top", "bottom"])
            ),
        ).set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=True,
                    type_="slider",
                    range_start=50,
                    range_end=100,
                    xaxis_index=[0, 1],
                ),
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    range_start=50,
                    range_end=100,
                    xaxis_index=1,
                ),
            ],
            tooltip_opts=opts.TooltipOpts(
                is_show=True,
                trigger="axis",
                trigger_on="mousemove",
                axis_pointer_type="cross",
            ),
        ))
    if col:
        line = (Line().add_xaxis(xaxis_data=list(df["date"])).add_yaxis(
            series_name="",
            y_axis=list(df[col]),
            is_smooth=True,
            linestyle_opts=opts.LineStyleOpts(opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        ))
        kline = kline.overlap(line)

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

    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="1%",
                                pos_top="71%",
                                height="22%"),
    )
    if rendered:
        return grid_chart.render_notebook()
    else:
        return grid_chart
Esempio n. 26
0
def draw_charts(echarts_data):
    kline_data = echarts_data["data"]
    date = echarts_data["date"]
    kline = (
        Kline().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="Dow-Jones index",
            y_axis=kline_data,
            itemstyle_opts=opts.ItemStyleOpts(color="#ec0000",
                                              color0="#00da3c"),
        ).set_global_opts(
            legend_opts=opts.LegendOpts(is_show=False,
                                        pos_bottom=10,
                                        pos_left="center"),

            # 其中inside是支持鼠标缩放
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=True,
                    type_="inside",
                    xaxis_index=[0, 1, 2, 3, 4],
                    range_start=50,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0, 1, 2, 3, 4],
                    type_="slider",
                    range_start=50,
                    range_end=100,
                ),
            ],
            # # 不知道为什么要分开三个写,可能是想通过xaxis_index分别配置
            # datazoom_opts=[
            #     opts.DataZoomOpts(
            #         is_show=False, type_="inside", xaxis_index=[0, 0], range_end=100
            #     ),
            #     opts.DataZoomOpts(
            #         is_show=True, xaxis_index=[0, 1], pos_top="97%", range_end=100
            #     ),
            #     opts.DataZoomOpts(is_show=False, xaxis_index=[0, 2], range_end=100),
            # ],
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),
            title_opts=opts.TitleOpts(title="my_echart"),
            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"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=5,
                is_piecewise=True,
                pieces=[
                    {
                        "value": 1,
                        "color": "#00da3c"
                    },
                    {
                        "value": -1,
                        "color": "#ec0000"
                    },
                ],
            ),
            # 所有图的axis 连在一块
            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",
            ),
        ))

    line = (
        Line().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="MA5",
            y_axis=echarts_data['ma5'],
            is_smooth=True,
            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="MA20",
            y_axis=echarts_data['ma20'],
            is_smooth=True,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
            is_symbol_show=False,  # 去掉折线上的小圆点
        ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

    # Kline And Line
    overlap_kline_line = kline.overlap(line)

    bar = (
        Bar().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="Volume",
            y_axis=echarts_data['volume'],
            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(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                grid_index=1,
                boundary_gap=False,
                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=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                is_scale=True,
                split_number=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

    # Bar-2 (Overlap Bar + Line)
    bar_2 = (
        Bar().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="MACD",
            y_axis=echarts_data['macd'],
            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(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),

                # 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=False),
                # split_number=20,
            ),
            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=False),
        ))

    macd_line = (
        Line().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="DIFF",
            y_axis=echarts_data['macd_diff'],
            # xaxis_index=2,
            # yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="DEA",
            y_axis=echarts_data["macd_dea"],
            # xaxis_index=2,
            # yaxis_index=2,
            is_symbol_show=False,  # 去掉折线上的小圆点
            label_opts=opts.LabelOpts(is_show=False),
        )
        # .set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
        # .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
    )
    # MACD BAR And MACD Line
    bar_macd_line = bar_2.overlap(macd_line)

    # KDJ
    kdj_line = (
        Line().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="K",
            y_axis=echarts_data['kdj_k'],
            is_symbol_show=False,  # 去掉折线上的小圆点
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="D",
            y_axis=echarts_data["kdj_d"],
            is_symbol_show=False,  # 去掉折线上的小圆点
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="J",
            y_axis=echarts_data["kdj_j"],
            is_symbol_show=False,  # 去掉折线上的小圆点
            label_opts=opts.LabelOpts(is_show=False),
            # markline_opts=opts.MarkLineOpts(
            #     data=[100]
            # ),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),

                # 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=False),
                # split_number=20,
            ), ))

    ######################
    ## kdj的macd

    # Bar-2 (Overlap Bar + Line)
    macd_kdj_bar = (
        Bar().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="MACD_KDJ",
            y_axis=echarts_data['kdj_macd'],
            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(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),

                # 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=False),
                # split_number=20,
            ),
            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=False),
        ))

    macd_kdj_line = (
        Line().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="KDJ_DIFF",
            y_axis=echarts_data['kdj_macd_diff'],
            # xaxis_index=2,
            # yaxis_index=2,
            is_symbol_show=False,  # 去掉折线上的小圆点
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="KDJ_DEA",
            y_axis=echarts_data["kdj_macd_dea"],
            # xaxis_index=2,
            # yaxis_index=2,
            is_symbol_show=False,  # 去掉折线上的小圆点
            label_opts=opts.LabelOpts(is_show=False),
        )
        # .set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
        # .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
    )
    # MACD BAR And MACD Line
    bar_macd_kdj_line = macd_kdj_bar.overlap(macd_kdj_line)

    ######################

    # Grid Overlap + Bar
    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1000px",
        height="800px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))

    # 这个是为了把 data.datas 这个数据写入到 html 中,还没想到怎么跨 series 传值
    # demo 中的代码也是用全局变量传的
    grid_chart.add_js_funcs("var barData = {}".format(kline_data))

    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="30%"),
    )
    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="35%",
                                height="10%"),
    )

    # 加上MACD
    grid_chart.add(
        bar_macd_line,
        grid_opts=opts.GridOpts(
            pos_left="10%",
            pos_right="8%",
            pos_top="45%",
            height="10%",
        ),
    )

    # 加上KDJ
    grid_chart.add(
        kdj_line,
        grid_opts=opts.GridOpts(
            pos_left="10%",
            pos_right="8%",
            pos_top="55%",
            height="10%",
        ),
    )

    # 加上KDJ的MACD
    grid_chart.add(
        bar_macd_kdj_line,
        grid_opts=opts.GridOpts(
            pos_left="10%",
            pos_right="8%",
            pos_top="65%",
            height="10%",
        ),
    )

    grid_chart.render("300368.html")
Esempio n. 27
0
def get_year_chart(year: str):
    map_data = [[[x["name"], x["value"]] for x in d["data"]] for d in MapData
                if d["time"] == year][0]
    min_data, max_data = (minNum, maxNum)
    data_mark: List = []
    i = 0
    for x in time_list:
        if x == year:
            data_mark.append(total_num[i])
        else:
            data_mark.append("")
        i = i + 1

    map_chart = (Map().add(
        series_name="",
        data_pair=map_data,
        zoom=1,
        center=[119.5, 34.5],
        is_map_symbol_show=False,
        itemstyle_opts={
            "normal": {
                "areaColor": "#323c48",
                "borderColor": "#404a59"
            },
            "emphasis": {
                "label": {
                    "show": Timeline
                },
                "areaColor": "rgba(255,255,255, 0.5)",
            },
        },
    ).set_global_opts(
        title_opts=opts.TitleOpts(
            title="" + str(year) +
            "全国各省份NCP实时动态(数据来源:丁香园; 数据仓库:BlankerL/DXY-2019-nCoV-Data)",
            subtitle="",
            pos_left="center",
            pos_top="top",
            title_textstyle_opts=opts.TextStyleOpts(
                font_size=25, color="rgba(255,255,255, 0.9)"),
        ),
        tooltip_opts=opts.TooltipOpts(
            is_show=True,
            formatter=JsCode("""function(params) {
                    if ('value' in params.data) {
                        return params.data.value[2] + ': ' + params.data.value[0];
                    }
                }"""),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_calculable=True,
            dimension=0,
            pos_left="30",
            pos_top="center",
            range_text=["High", "Low"],
            range_color=["lightskyblue", "yellow", "orangered"],
            textstyle_opts=opts.TextStyleOpts(color="#ddd"),
            min_=min_data,
            max_=max_data,
        ),
    ))

    line_chart = (Line().add_xaxis(time_list).add_yaxis(
        "", total_num).add_yaxis(
            "",
            data_mark,
            markpoint_opts=opts.MarkPointOpts(
                data=[opts.MarkPointItem(type_="max")]),
        ).set_series_opts(label_opts=opts.LabelOpts(
            is_show=False)).set_global_opts(title_opts=opts.TitleOpts(
                title="全国各省份NCP实时动态(单位: K)", pos_left="62%", pos_top="5%")))
    bar_x_data = [x[0] for x in map_data]
    bar_y_data = [{"name": x[0], "value": x[1][0]} for x in map_data]
    bar = (Bar().add_xaxis(xaxis_data=bar_x_data).add_yaxis(
        series_name="",
        yaxis_data=bar_y_data,
        label_opts=opts.LabelOpts(is_show=True,
                                  position="right",
                                  formatter="{b} : {c}"),
    ).reversal_axis().set_global_opts(
        xaxis_opts=opts.AxisOpts(max_=40000,
                                 axislabel_opts=opts.LabelOpts(is_show=False)),
        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
        tooltip_opts=opts.TooltipOpts(is_show=False),
        visualmap_opts=opts.VisualMapOpts(
            is_calculable=True,
            dimension=0,
            pos_left="10",
            pos_top="top",
            range_text=["High", "Low"],
            range_color=["lightskyblue", "yellow", "orangered"],
            textstyle_opts=opts.TextStyleOpts(color="#ddd"),
            min_=min_data,
            max_=max_data,
        ),
    ))

    pie_data = [[x[0], x[1][0]] for x in map_data]
    pie = (Pie().add(
        series_name="",
        data_pair=pie_data,
        radius=["15%", "35%"],
        center=["80%", "82%"],
        itemstyle_opts=opts.ItemStyleOpts(border_width=1,
                                          border_color="rgba(0,0,0,0.5)"),
    ).set_global_opts(
        tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} {d}%"),
        legend_opts=opts.LegendOpts(is_show=False),
    ))

    grid_chart = (Grid().add(
        bar,
        grid_opts=opts.GridOpts(pos_left="10",
                                pos_right="45%",
                                pos_top="50%",
                                pos_bottom="5"),
    ).add(
        line_chart,
        grid_opts=opts.GridOpts(pos_left="65%",
                                pos_right="80",
                                pos_top="10%",
                                pos_bottom="50%"),
    ).add(pie, grid_opts=opts.GridOpts(pos_left="45%", pos_top="60%")).add(
        map_chart, grid_opts=opts.GridOpts()))

    return grid_chart
Esempio n. 28
0
iron_man= [{"value": [6, 3, 5, 3, 5, 3], "name": "钢铁侠"}]
black_widow = [{"value": [3, 3, 2, 3, 2, 7], "name": "黑寡妇"}]
hawkeye = [{"value": [3, 3, 3, 2, 3, 7], "name": "鹰眼"}]
hulk = [{"value": [2, 7, 3, 7, 1, 3], "name": "绿巨人"}]
thor =  [{"value": [2, 7, 6, 7, 7, 6], "name": "雷神"}]

myschema = [
    {"name": '智力', "max": 7, "min": 0},
    {"name": '力量', "max": 7, "min": 0},
    {"name": '速度', "max": 7, "min": 0},
    {"name": '耐力', "max": 7, "min": 0},
    {"name": '能量发射', "max": 7, "min": 0},
    {"name": '战斗技能', "max": 7, "min": 0}
] #设置雷达图的属性
r = Radar(init_opts=opts.InitOpts(
            bg_color={"type": "pattern", "image": JsCode("img"), "repeat": "no-repeat"}
        )
) #初始化雷达图
r.add_js_funcs(
    """
    var img = new Image(); img.src = 'a5.png';
    """
) #执行js代码

(
    r.add_schema(
        schema=myschema,
        shape="circle", #图片形状
        center=["50%", "50%"], #图片中心位置
        radius="80%", #图片半径大小
        angleaxis_opts=opts.AngleAxisOpts(
Esempio n. 29
0
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.commons.utils import JsCode
from pyecharts.faker import Faker

c = (Bar().add_xaxis(Faker.choose()).add_yaxis(
    "商家A", Faker.values(), category_gap="60%").set_series_opts(
        itemstyle_opts={
            "normal": {
                "color":
                JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                offset: 0,
                color: 'rgba(0, 244, 255, 1)'
            }, {
                offset: 1,
                color: 'rgba(0, 77, 167, 1)'
            }], false)"""),
                "barBorderRadius": [30, 30, 30, 30],
                "shadowColor":
                "rgb(0, 160, 221)",
            }
        }).set_global_opts(title_opts=opts.TitleOpts(
            title="Bar-渐变圆柱")).render("Bar_border_radius.html"))
Esempio n. 30
0
def generate_line_html(rows, select=None):
    # 用散点图展示
    line = Line(
        opts.InitOpts(height='700px', width='1424px', theme=ThemeType.LIGHT))

    x = []
    y1 = []
    y2 = []
    y3 = []
    y4 = []
    y5 = []

    for row in rows:
        x.append(row['时间'])
        y3.append(row['低溢价率策略累积收益率'])
        y2.append(row['高收益率策略累积收益率'])
        y1.append(row['低余额+双低策略累积收益率'])
        y1.append(row['低溢价率+双低策略累积收益率'])
        # y4.append(row['可转债指数累积收益率'])
        # y5.append(row['沪深300累积收益率'])

    line.add_xaxis(x)

    line.add_yaxis("低溢价率策略", y3)
    line.add_yaxis("高收益率策略", y2)
    line.add_yaxis("低余额+双低策略", y1)
    line.add_yaxis("低溢价+双低策略", y1)
    # line.add_yaxis("可转债指数", y4)
    # line.add_yaxis("沪深300", y5)

    line.set_global_opts(
        title_opts=opts.TitleOpts(title="策略组合收益率",
                                  pos_left='center',
                                  pos_top=-5),
        tooltip_opts=opts.TooltipOpts(
            trigger='axis',
            formatter=JsCode(
                "function (params) {"
                "return '<table style=\"width:150px;\">'+"
                "'<tr ><td style=\"height:20px;background-color:white;border:0px\" colspan=2>'+ params[0].data[0] +'</td></tr>' +"
                "'<tr><td style=\"height:15px;background-color:white;border:0px;text-align: left;color:'+params[1].color+'\">高收益率策略</td><td style=\"height:15px;background-color:white;border:0px\">' + params[1].value[1] + '%</td></tr>' +"
                "'<tr><td style=\"height:15px;background-color:white;border:0px;text-align: left;color:'+params[2].color+'\">低溢价率策略</td><td style=\"height:15px;background-color:white;border:0px\">' + params[2].value[1] + '%</td></tr>' +"
                "'<tr ><td style=\"height:15px;background-color:white;border:0px;text-align: left;color:'+params[0].color+'\">低余额+双低策略</td><td style=\"height:15px;background-color:white;border:0px\">' + params[3].value[1] + '%</td></tr>' +"
                "'<tr ><td style=\"height:15px;background-color:white;border:0px;text-align: left;color:'+params[0].color+'\">低溢价率+双低策略</td><td style=\"height:15px;background-color:white;border:0px\">' + params[4].value[1] + '%</td></tr>' +"
                "'<tr><td style=\"height:15px;background-color:white;border:0px;text-align: left;color:'+params[3].color+'\">可转债指数</td><td style=\"height:15px;background-color:white;border:0px\">' + params[5].value[1] + '%</td></tr>' +"
                "'<tr><td style=\"height:15px;background-color:white;border:0px;text-align: left;color:'+params[4].color+'\">沪深300</td><td style=\"height:15px;background-color:white;border:0px\">' + params[6].value[1] + '%</td></tr>' +"
                "'</table>';}")),
        legend_opts=opts.LegendOpts(pos_top=50,
                                    # selected_mode='single'
                                    ),
        datazoom_opts={
            'start': 0,
            'end': 100
        },
        toolbox_opts=opts.ToolboxOpts(feature={
            'dataZoom': {},
        }),
        # visualmap_opts=opts.VisualMapOpts(
        #     type_="color", max_=150, min_=20, dimension=1
        # ),
        xaxis_opts=opts.AxisOpts(
            # data=None,
            type_='time',
            name='时间',
            name_gap=30,
            is_scale=True,
            name_location='middle',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            # axislabel_opts=opts.LabelOpts(formatter="{value}"), #echarts.format.formatTime('yy-MM-dd', value*1000)
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            symbol=['none', 'arrow'])),
        yaxis_opts=opts.AxisOpts(
            type_='value',
            name='收益率(%)',
            name_rotate=90,
            name_gap=55,
            name_location='middle',
            is_scale=True,
            axislabel_opts=opts.LabelOpts(formatter='{value}%'),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            symbol=['none', 'arrow'])))
    line.set_series_opts(
        symbol='none',
        smooth=False,
        label_opts=opts.LabelOpts(is_show=False),
    )
    line_html = line.render_embed('template.html', env)
    return line_html