Exemple #1
0
 def create_wordcloud(self, json_file, title='词云', column='title'):
     text = self.get_text(json_file, column=column)
     clear_word = self.split_word(text)
     data = self.word_counter(clear_word)
     wd = WordCloud()
     wd.add(series_name=title, data_pair=data, word_size_range=[40, 150])
     wd.set_global_opts(title_opts=opts.TitleOpts(title="你的文章词云", subtitle="基于你的博客数据生成", title_textstyle_opts=opts.TextStyleOpts(font_size=23)), tooltip_opts=opts.TooltipOpts(is_show=True))
     # wd.render_notebook()
     wd.render(self.path + os.sep + 'topic_wordcloud.html')
Exemple #2
0
list = []
for i in range(len(jobNameList)):
    list.append((jobNameList[i], MaxSalaryList[i]))
showJob = []
for i in range(showNum):
    showJob.append(random.choice(list))
showJobnameArr = []
showSalArr = []
for (job, sal) in showJob:
    showJobnameArr.append(job)
    showSalArr.append(sal)
showlist = [str(i) for i in range(1, showNum + 1)]

(Line().set_global_opts(
    tooltip_opts=opts.TooltipOpts(is_show=False),
    xaxis_opts=opts.AxisOpts(type_="category"),
    yaxis_opts=opts.AxisOpts(
        type_="value",
        axistick_opts=opts.AxisTickOpts(is_show=True),
        splitline_opts=opts.SplitLineOpts(is_show=True),
    ),
    title_opts=opts.TitleOpts(title="兰州最高薪水折线图")).add_xaxis(
        xaxis_data=showlist).add_yaxis(
            series_name="",
            y_axis=showSalArr,
            symbol="emptyCircle",
            is_symbol_show=True,
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=False),
        ).render("./view/maxSalaryLineChart.html"))
Exemple #3
0
         48.7,
         18.8,
         6.0,
         2.3,
     ],
     label_opts=opts.LabelOpts(is_show=False),
 ).extend_axis(yaxis=opts.AxisOpts(
     name="温度",
     type_="value",
     min_=0,
     max_=25,
     interval=5,
     axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
 )).set_global_opts(
     tooltip_opts=opts.TooltipOpts(is_show=True,
                                   trigger="axis",
                                   axis_pointer_type="cross"),
     xaxis_opts=opts.AxisOpts(type_="category",
                              axispointer_opts=opts.AxisPointerOpts(
                                  is_show=True, type_="shadow")),
     yaxis_opts=opts.AxisOpts(
         name="水量",
         type_="value",
         min_=0,
         max_=250,
         interval=50,
         axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
         axistick_opts=opts.AxisTickOpts(is_show=True),
         splitline_opts=opts.SplitLineOpts(is_show=True),
     ),
 ))
            "abg": {
                "backgroundColor": "#e3e3e3",
                "width": "100%",
                "align": "right",
                "height": 22,
                "borderRadius": [4, 4, 0, 0],
            },
            "hr": {
                "borderColor": "#aaa",
                "width": "100%",
                "borderWidth": 0.5,
                "height": 0,
            },
            "b": {
                "fontSize": 16,
                "lineHeight": 33
            },
            "per": {
                "color": "#eee",
                "backgroundColor": "#334455",
                "padding": [2, 4],
                "borderRadius": 2,
            },
        },
    ),
).set_global_opts(legend_opts=opts.LegendOpts(
    pos_left='left', orient='vertical')).set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger='item', formatter="{a} <br/>{b}: {c} ({d}%)")).set_colors(
                ['#60acfc', '#32d3eb', '#5bc49f']).render('age_ratio.html'))
    "Southern": "南区",
    "Tai Po": "大埔",
    "Tsuen Wan": "荃湾",
    "Tuen Mun": "屯门",
    "Wan Chai": "湾仔",
    "Wong Tai Sin": "黄大仙",
    "Yau Tsim Mong": "油尖旺",
    "Yuen Long": "元朗",
}

(Map(init_opts=opts.InitOpts(width="1400px", height="800px")).add_js_funcs(
    "echarts.registerMap('HK', {});".format(data)).add(
        series_name="香港18区人口密度",
        maptype="HK",
        data_pair=MAP_DATA,
        name_map=NAME_MAP_DATA,
        is_map_symbol_show=False).set_global_opts(
            title_opts=opts.TitleOpts(title="香港18区人口密度 (2011)",
                                      subtitle="人口密度数据来自Wikipedia",
                                      subtitle_link=WIKI_LINK),
            tooltip_opts=opts.TooltipOpts(trigger="item",
                                          formatter="{b}<br/>{c} (p / km2)"),
            visualmap_opts=opts.VisualMapOpts(
                min_=800,
                max_=50000,
                range_text=["High", "Low"],
                is_calculable=True,
                range_color=["lightskyblue", "yellow", "orangered"],
            ),
        ).render("population_density_of_HongKong.html"))
Exemple #6
0
    def v_tradecost(self, start=None, end=yesterdayobj(), rendered=True):
        """
        visualization giving the average cost line together with netvalue line

        :returns: pyecharts.line
        """
        funddata = []
        costdata = []
        pprice = self.price[self.price["date"] <= end]
        pcftable = self.cftable
        if start is not None:
            pprice = pprice[pprice["date"] >= start]
            pcftable = pcftable[pcftable["date"] >= start]
        for _, row in pprice.iterrows():
            date = row["date"]
            funddata.append(row["netvalue"])
            cost = 0
            if (date - self.cftable.iloc[0].date).days >= 0:
                cost = self.unitcost(date)
            costdata.append(cost)

        coords = []
        for i, r in pcftable.iterrows():
            coords.append([
                r.date, pprice[pprice["date"] <= r.date].iloc[-1]["netvalue"]
            ])

        upper = self.cftable.cash.abs().max()
        lower = self.cftable.cash.abs().min()
        if upper == lower:
            upper = 2 * lower

        def marker_factory(x, y):
            buy = self.cftable[self.cftable["date"] <= x].iloc[-1]["cash"]
            if buy < 0:
                color = "#ff7733"
            else:

                color = "#3366ff"
            size = (abs(buy) - lower) / (upper - lower) * 5 + 5
            return opts.MarkPointItem(
                coord=[x.date(), y],
                itemstyle_opts=opts.ItemStyleOpts(color=color),
                # this nested itemstyle_opts within MarkPointItem is only supported for pyechart>1.7.1
                symbol="circle",
                symbol_size=size,
            )

        line = Line()

        line.add_xaxis([d.date() for d in pprice.date])
        line.add_yaxis(
            series_name="基金净值",
            y_axis=funddata,
            is_symbol_show=False,
        )
        line.add_yaxis(
            series_name="持仓成本",
            y_axis=costdata,
            is_symbol_show=False,
            markpoint_opts=opts.MarkPointOpts(
                data=[marker_factory(*c) for c in coords], ),
        )
        line.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(is_show=True,
                                  type_="slider",
                                  range_start=50,
                                  range_end=100),
                opts.DataZoomOpts(
                    is_show=True,
                    type_="slider",
                    orient="vertical",
                    range_start=50,
                    range_end=100,
                ),
            ],
            tooltip_opts=opts.TooltipOpts(
                is_show=True,
                trigger="axis",
                trigger_on="mousemove",
                axis_pointer_type="cross",
            ),
        )
        if rendered:
            return line.render_notebook()
        else:
            return line
def draw_line_charts(input_data,input_data2,canshu =[],path=''):
    canshu_list = []
    max0 = int(max(input_data[canshu].max())*1.001)
    min0 =  int(min(input_data[canshu].min())*0.995)
    print(max0,min0)
    for i in canshu:
        canshu_dict0 = {}
        canshu_dict0[i] = input_data[i]
        canshu_list.append(canshu_dict0)
    print(input_data.keys())
    print(input_data.tail(100))
    input_data['candle_begin_time'] = pd.to_datetime(input_data['candle_begin_time'])
    time_list = input_data['candle_begin_time'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')).values.tolist()

    tab = Tab()
    line_base = Line(init_opts=opts.InitOpts(width="1500px", height="700px", theme=ThemeType.DARK)).add_xaxis(time_list)
    line_base.add_yaxis(series_name="close:",
                        y_axis=input_data['close'].values,
                        is_symbol_show=False,

                        color="#FF0000")
    line_base.set_global_opts(
        datazoom_opts=[opts.DataZoomOpts(range_start=95,
            range_end=100,), opts.DataZoomOpts(
            type_="inside",
            range_start=95,
            range_end=100,
            )],
        title_opts=opts.TitleOpts(title="资金曲线变化"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            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=True)    )
    for ix,v in enumerate(canshu_list):
        v0:str
        value0:dict
        for k,v0 in v.items():
            name =k
            value0 = v0
        data0 = pd.DataFrame(value0)
        data0.fillna(method='bfill',inplace=True)
        # print(data0)
        line_base.add_yaxis(
            series_name=name,
            y_axis=data0.values.tolist(),
            yaxis_index=2,
            linestyle_opts=opts.LineStyleOpts(),
            label_opts=opts.LabelOpts(is_show=False),
        )
        line_base.extend_axis(
            yaxis=opts.AxisOpts(
            name="资金情况",
            name_location="start",
            type_="value",
            max_= max0,
            min_= min0,
            is_inverse=False,
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),))
    tab.add(line_base,'资金变化')

    table0 = Table().add(list(input_data2.columns), input_data2.values.tolist()).set_global_opts(
                    title_opts=ComponentTitleOpts(title="策略统计", subtitle=str(dt.datetime.now())))
    table0.add_js_funcs('''
    document.write("<p style='color:#FF0000;'>
        注释:none </p>"
                        ''')
    tab.add(table0,'策略统计表')

    html0 =tab.render(path)
    if os.path.exists(html0):
        print("ok!保存在:")
        print(html0)
    else:
        print('保存失败!')
Exemple #8
0
def musics_star_comments_count_scatter(id, num) -> Scatter:
    (key,val,maxx,num) = musics_star_comments_count(id, num)
    if key == 0:
        return 0
    x_data = list(map(float, key))
    y_data = list(map(int, val))
    c = (
        Scatter()  # init_opts=opts.InitOpts(width="1600px", height="1000px")
            .add_xaxis(xaxis_data=x_data)
            .add_yaxis(
            series_name="评论数",
            y_axis=y_data,
            #         symbol_size=20,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_series_opts()
            .set_global_opts(
            title_opts=opts.TitleOpts(title="评论数与评分的关系", subtitle="数据量:" + str(num),),
            xaxis_opts=opts.AxisOpts(
                # 坐标轴类型。可选:
                # 'value': 数值轴,适用于连续数据。
                # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
                # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
                # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
                # 'log' 对数轴。适用于对数数据。
                type_="value",
                name="评分",
                splitline_opts=opts.SplitLineOpts(is_show=True),
                max_=10,
                min_=min(x_data) - 1

            ),
            yaxis_opts=opts.AxisOpts(
                type_="value",
                name="评论数",
                axistick_opts=opts.AxisTickOpts(is_show=True),
                splitline_opts=opts.SplitLineOpts(is_show=True),
            ),
            #         tooltip_opts=opts.TooltipOpts(is_show=True),
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="评分 评论数 <br/>{c}条"
            ),
            visualmap_opts=opts.VisualMapOpts(
                #             type_="size",
                max_=int(maxx),
                #             min_=0,
                range_color=[
                    "#313695",
                    "#4575b4",
                    "#74add1",
                    "#abd9e9",
                    "#e0f3f8",
                    "#ffffbf",
                    "#fee090",
                    "#fdae61",
                    "#f46d43",
                    "#d73027",
                    "#a50026",
                ],
            ),
            toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left="95%",
                                          feature={
                                              "dataZoom": {"yAxisIndex": "none"},
                                              "dataView": {},
                                              "restore": {},
                                              "saveAsImage": {},
                                          },
                                          ),
        )
        .dump_options_with_quotes()
    )
    return c
Exemple #9
0
week_name_list = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
high_temperature = [11, 11, 15, 13, 12, 13, 10]
low_temperature = [1, -2, 2, 5, 3, 2, 0]

(Line(init_opts=opts.InitOpts(width="1600px", height="800px")).add_xaxis(
    xaxis_data=week_name_list).add_yaxis(
        series_name="最高气温",
        y_axis=high_temperature,
        markpoint_opts=opts.MarkPointOpts(data=[
            opts.MarkPointItem(type_="max", name="最大值"),
            opts.MarkPointItem(type_="min", name="最小值"),
        ]),
        markline_opts=opts.MarkLineOpts(
            data=[opts.MarkLineItem(type_="average", name="平均值")]),
    ).add_yaxis(
        series_name="最低气温",
        y_axis=low_temperature,
        markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(value=-2, name="周最低", x=1, y=-1.5)]),
        markline_opts=opts.MarkLineOpts(data=[
            opts.MarkLineItem(type_="average", name="平均值"),
            opts.MarkLineItem(symbol="none", x="90%", y="max"),
            opts.MarkLineItem(symbol="circle", type_="max", name="最高点"),
        ]),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title="未来一周气温变化", subtitle="纯属虚构"),
        tooltip_opts=opts.TooltipOpts(trigger="axis"),
        toolbox_opts=opts.ToolboxOpts(is_show=True),
        xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
    ).render("temperature_change_line_chart.html"))
Exemple #10
0
def music_rating_pie(id,num) -> Pie:
    (genre,num) = music_rating(id,num)
    if genre == 0:
        return 0
    c = (
        #     Pie(init_opts=opts.InitOpts(width="", height="", bg_color=""))
        Pie()
        .add(
            series_name="音乐评分",
            data_pair=[list(z) for z in zip(["评分5", "评分4", "评分3", "评分2", "评分1"], list(map(float, genre)))],
            center=["45%", "50%"],
            radius=["40%", "55%"],
            label_opts=opts.LabelOpts(
                is_show=True,
                position="outside",
                formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}%  {per|{d}%}  ",
                background_color="#eee",
                border_color="#aaa",
                border_width=1,
                border_radius=4,
                rich={
                    "a": {"color": "#999", "lineHeight": 22, "align": "center"},
                    "abg": {
                        "backgroundColor": "#e3e3e3",
                        "width": "100%",
                        "align": "right",
                        "height": 22,
                        "borderRadius": [4, 4, 0, 0],
                    },
                    "hr": {
                        "borderColor": "#aaa",
                        "width": "100%",
                        "borderWidth": 0.5,
                        "height": 0,
                    },
                    "b": {"fontSize": 16, "lineHeight": 33},
                    "per": {
                        "color": "#eee",
                        "backgroundColor": "#334455",
                        "padding": [2, 4],
                        "borderRadius": 2,
                    },
                },
            ),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="音乐评分分布",
                subtitle="数据量:" + str(num),
                #                                   pos_left="center",
                pos_left="38%",
                #                                   pos_top="20",
                #                                   title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
            ),
            legend_opts=opts.LegendOpts(is_show=True,
                                        pos_top="20",
                                        type_="scroll",
                                        pos_left="85%",
                                        orient="vertical"
                                        ),
            toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left="95%",
                                          feature={
                                              "dataZoom": {"yAxisIndex": "none"},
                                              "restore": {},
                                              "saveAsImage": {},
                                          }, ),
        )
        .set_series_opts(
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{a} <br/>{b}: {c}% ({d}%)"
            ),
            #         label_opts=opts.LabelOpts(color="rgba(1, 1, 1, 0.3)"),
        )
        .dump_options_with_quotes()
    )
    return c
Exemple #11
0
def musics_star_pubdate_scatter(id, num) -> Scatter:
    (key,val,num) = musics_star_pubdate(id, num)
    if key == 0:
        return 0
    x_data = list(map(str, key))
    y_data = list(map(float, val))
    c = (
        Scatter()  # init_opts=opts.InitOpts(width="1600px", height="1000px")
            .add_xaxis(xaxis_data=x_data)
            .add_yaxis(
            series_name="评分",
            y_axis=y_data,
            #         symbol_size=20,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_series_opts()
            .set_global_opts(
            title_opts=opts.TitleOpts(title="发行时间与评分的关系", subtitle="数据量:" + str(num),),
            xaxis_opts=opts.AxisOpts(
                #             type_="value",
                type_='time',
                name="发行时间",
                splitline_opts=opts.SplitLineOpts(is_show=True),
                #             max_=10,
                #             min_=min(y_data)-1

            ),
            yaxis_opts=opts.AxisOpts(
                type_="value",
                name="评分",
                axistick_opts=opts.AxisTickOpts(is_show=True),
                splitline_opts=opts.SplitLineOpts(is_show=True),
                max_=10,
                min_=min(y_data) - 1
            ),
            tooltip_opts=opts.TooltipOpts(
                is_show=True, trigger="item", formatter="发行时间 评分 <br/>{c}分"
            ),
            visualmap_opts=opts.VisualMapOpts(
                max_=10,
                range_color=[
                    "#313695",
                    "#4575b4",
                    "#74add1",
                    "#abd9e9",
                    "#e0f3f8",
                    "#ffffbf",
                    "#fee090",
                    "#fdae61",
                    "#f46d43",
                    "#d73027",
                    "#a50026",
                ],
            ),
            toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left="95%",
                                          feature={
                                              "dataZoom": {"yAxisIndex": "none"},
                                              "dataView": {},
                                              "restore": {},
                                              "saveAsImage": {},
                                          },
                                          ),
        )
        .dump_options_with_quotes()
    )
    return c
            # visualMap 组件离容器右侧的距离
            pos_right='right',
        ),
        tooltip_opts=opts.TooltipOpts(
            # 提示框浮层的背景颜色。
            background_color='white',
            # 提示框浮层的边框宽。
            border_width=1,
            # 文字样式配置项,参考 `series_options.TextStyleOpts`
            textstyle_opts=opts.TextStyleOpts(color='#00C791'),
            # 回调函数,回调函数格式:
            # (params: Object|Array) => string
            # 参数 params 是 formatter 需要的单个数据集。
            formatter=(JsCode("""
                                                                            
                                                                            function(params){
                                                                        
                                                                                                return params.name + ' : ' 
                                                                                                + '<br/>'
                                                                                                + '现存确诊:'+params.data.value[3] 
                                                                                                + '<br/>'
                                                                                                + '累积确诊:'+params.data.value[0] 
                                                                                                + '<br/>'
                                                                                                + '死亡人数:'+params.data.value[1] 
                                                                                                + '<br/>'
                                                                                                + '治愈人数:'+params.data.value[2];
                                                                            }
                                                                       """))))
    #   默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置
    .render("China_2019-nCov_map.html"), )
#system函数可以将字符串转化成命令在服务器上运行,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程;
    ["2015/11/09", 15, "DD"],
    ["2015/11/10", 35, "DD"],
    ["2015/11/11", 38, "DD"],
    ["2015/11/12", 22, "DD"],
    ["2015/11/13", 16, "DD"],
    ["2015/11/14", 7, "DD"],
    ["2015/11/15", 2, "DD"],
    ["2015/11/16", 17, "DD"],
    ["2015/11/17", 33, "DD"],
    ["2015/11/18", 4, "DD"],
    ["2015/11/19", 32, "DD"],
    ["2015/11/20", 26, "DD"],
    ["2015/11/21", 35, "DD"],
    ["2015/11/22", 40, "DD"],
    ["2015/11/23", 32, "DD"],
    ["2015/11/24", 26, "DD"],
    ["2015/11/25", 22, "DD"],
    ["2015/11/26", 16, "DD"],
    ["2015/11/27", 22, "DD"],
    ["2015/11/28", 10, "DD"],
]

(ThemeRiver().add(
    series_name=x_data,
    data=y_data,
    singleaxis_opts=opts.SingleAxisOpts(pos_top="50",
                                        pos_bottom="50",
                                        type_="time"),
).set_global_opts(tooltip_opts=opts.TooltipOpts(
    trigger="axis", axis_pointer_type="line")).render("theme_river.html"))
Exemple #14
0
def draw_chan(stock, stock_df, kc, end_time, period):  #
    stock_df_original = stock_df[[
        'date', 'open', 'close', 'low', 'high', 'money'
    ]]
    stock_df_bi = kc.getFenBI_df()[['date', 'chan_price']]
    stock_df_xd = kc.getFenDuan_df()[['date', 'chan_price']]

    kline = (
        #         Kline({"theme": ThemeType.DARK})
        Kline().add_xaxis(
            xaxis_data=stock_df_original['date'].tolist(),
        ).add_yaxis(
            series_name=stock,
            y_axis=stock_df_original[['open', 'close', 'low',
                                      'high']].tolist(),
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ec0000",
                color0="#00da3c"),  #添加用 Hex 字符串表示的红和绿两种颜色,对应着 K线涨和跌的颜色。
        ).set_global_opts(
            title_opts=opts.TitleOpts(title="缠论", ),
            xaxis_opts=opts.AxisOpts(type_="category"),
            # 分割线
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),
            legend_opts=opts.LegendOpts(is_show=True),
            toolbox_opts=opts.ToolboxOpts(),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    #xaxis_index=[0, 1],
                    range_start=
                    0,  #添加两个「数据区域缩放」功能,一个看的到(用鼠标拉缩图最下面的 slider),一个看不到(用鼠标直接在图中拉缩),并且设置 xaxis_index =[0,1],表示用 K 线图(index 0)来控制柱状图(index 1)。
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    #xaxis_index=[0, 1],
                    type_="slider",
                    pos_top="90%",
                    range_start=
                    0,  #index为1和2的两幅图的数据局部伸缩跟着index0那幅图,这样就实现了用一根x轴的slider可以任意缩放三幅图的数据
                    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"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=3,
                is_piecewise=True,
                pieces=[
                    {
                        "value": -1,
                        "color": "#ec0000"
                    },
                    {
                        "value": 1,
                        "color": "#00da3c"
                    },
                ],
            ),  #坐标轴指示器配置和区域选择组件配置使得数据和轴可以一起联动。
            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",
            ),
        ))

    Biline = (
        Line().add_xaxis(xaxis_data=stock_df_bi['date'].tolist()).add_yaxis(
            series_name='笔',
            y_axis=stock_df_bi['chan_price'].tolist(),
            is_smooth=False,
            is_connect_nones=True,
            is_hover_animation=False,
            #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"),
            linestyle_opts=opts.LineStyleOpts(color="red",
                                              width=2,
                                              opacity=0.5),
            label_opts=opts.LabelOpts(is_show=True),
        )
        #         .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
    )

    overlap = kline.overlap(Biline)

    crp = CentralRegionProcess(kc.getFenDuan_df(), kc, isdebug=False)
    crp.define_central_region()
    stock_zs_x, stock_zs_y = crp.convert_to_graph_data()

    if (stock_df_xd is not None) and (len(stock_zs_x) != 0):
        # print('if')
        for i in range(0, len(stock_zs_x), 2):
            XD_line = (
                Line().add_xaxis(xaxis_data=stock_df_xd['date'].tolist()).
                add_yaxis(
                    series_name='段',
                    y_axis=stock_df_xd['chan_price'].tolist(),
                    is_smooth=False,
                    is_connect_nones=True,
                    is_hover_animation=False,
                    #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"),
                    linestyle_opts=opts.LineStyleOpts(color="blue",
                                                      width=2,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
                    is_silent=True,
                    data=[[{
                        'xAxis': stock_zs_x[i],
                        'yAxis': stock_zs_y[i]
                    }, {
                        'xAxis': stock_zs_x[i + 1],
                        'yAxis': stock_zs_y[i + 1]
                    }]]))
                #             .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
            )
    elif stock_df_xd is not None:
        # print('elif')
        XD_line = (
            Line().add_xaxis(xaxis_data=stock_df_xd['date'].tolist()).
            add_yaxis(
                series_name='段',
                y_axis=stock_df_xd['chan_price'].tolist(),
                is_smooth=False,
                is_connect_nones=True,
                is_hover_animation=False,
                #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"),
                linestyle_opts=opts.LineStyleOpts(color="blue",
                                                  width=2,
                                                  opacity=0.5),
                label_opts=opts.LabelOpts(is_show=False),
            ))
    overlap = overlap.overlap(XD_line)
    #     MA_line = (
    #         Line()
    #         .add_xaxis(xaxis_data=stock_df_original['date'].tolist(),)
    #         .add_yaxis(
    #             series_name="MA5",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 5).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .add_yaxis(
    #             series_name="MA10",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 10).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .add_yaxis(
    #             series_name="MA13",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 13).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .add_yaxis(
    #             series_name="MA34",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 34).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
    #     )

    #     Volume_Bar = (
    #         Bar()
    #         .add_xaxis(xaxis_data=stock_df_original['date'].tolist())
    #         .add_yaxis(
    #             series_name="money",
    #             yaxis_data=stock_df_original['money'].tolist(),
    #             xaxis_index=2,
    #             yaxis_index=2,
    #             label_opts=opts.LabelOpts(is_show=False),
    #             markline_opts=opts.MarkLineOpts(
    #                 data=[opts.MarkLineItem(type_="average", name="平均值")]
    #             ),
    #             itemstyle_opts=opts.ItemStyleOpts(
    #                 color=JsCode(
    #                     """
    #                         function(params) {
    #                             var colorList;
    #                             if (params.data >= 0) {
    #                               colorList = '#ef232a';
    #                             } else {
    #                               colorList = '#14b143';
    #                             }
    #                             return colorList;
    #                         }
    #                     """
    #                 #     """
    #                 # 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='',
    #             ),
    #             xaxis_opts=opts.AxisOpts(
    #                 type_="category",
    #                 grid_index=2,
    #                 is_scale=True,
    #                 # axislabel_opts=opts.LabelOpts(is_show=False),
    #                 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=2,
    #                 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),
    #                 splitarea_opts=opts.SplitAreaOpts(
    #                     is_show=True,
    #                     areastyle_opts=opts.AreaStyleOpts(opacity=1)
    #                 ),
    #             ),
    #             # xaxis_opts=opts.AxisOpts(is_scale=True),
    #             legend_opts=opts.LegendOpts(is_show=False),
    #             datazoom_opts=opts.DataZoomOpts(type_="inside"),
    #         )
    #     )
    #
    #     overlap = overlap.overlap(Volume_Bar)
    print("it's here")

    if len(stock_zs_x) != 0:
        for i in range(0, len(stock_zs_x), 2):
            zs1_line = (Line().add_xaxis(
                xaxis_data=stock_zs_x[i:i + 2], ).add_yaxis(
                    series_name="中枢",
                    y_axis=np.append(stock_zs_y[i], stock_zs_y[i]),
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs2_line = (Line().add_xaxis(
                xaxis_data=stock_zs_x[i:i + 2], ).add_yaxis(
                    series_name="中枢",
                    y_axis=np.append(stock_zs_y[i + 1:i + 2],
                                     stock_zs_y[i + 1:i + 2]),
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs3_line = (Line().add_xaxis(xaxis_data=np.append(
                stock_zs_x[i:i + 1], stock_zs_x[i:i + 1])).add_yaxis(
                    series_name="中枢",
                    y_axis=stock_zs_y[i:i + 2],
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs4_line = (Line().add_xaxis(xaxis_data=np.append(
                stock_zs_x[i + 1:i + 2], stock_zs_x[i + 1:i + 2])).add_yaxis(
                    series_name="中枢",
                    y_axis=stock_zs_y[i:i + 2],
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs1 = zs1_line.overlap(zs2_line)
            zs2 = zs3_line.overlap(zs4_line)
            zs = zs1.overlap(zs2)
            overlap.overlap(zs)

    overlap.render("diagram/{0}@{1}#{2}.html".format(stock[0:6],
                                                     end_time[0:10], period))
    print("it's done")
Exemple #15
0
def world_data_all():
    ###############################################


    world_message = pd.DataFrame(pd.read_excel(readPath+'/世界总体疫情信息/世界总体疫情信息.xlsx'))  # 获取当前工作路径下的data数据
    data_gb = world_message.groupby(by='continent')  ####将世界总体的信息以不同的洲进行分组
    world_gb = data_gb.agg(np.sum)
    world_gb
    continent = ['亚洲', '其他', '北美洲', '南美洲', '大洋洲', '欧洲', '非洲']
    world_continent = continent
    continent_isUpdated = list(world_gb['isUpdated'])
    continent_confirmAdd = list(world_gb['confirmAdd'])
    continent_confirm = list(world_gb['confirm'])
    continent_dead = list(world_gb['dead'])
    continent_heal = list(world_gb['heal'])
    continent_nowConfirm = list(world_gb['nowConfirm'])
    continent_nowConfirmCompare = list(world_gb['nowConfirmCompare'])
    continent_ConfirmCompare = list(world_gb['confirmCompare'])
    continent_healCompare = list(world_gb['healCompare'])
    continent_deadCompare = list(world_gb['deadCompare'])
    Line_World = (
        Line()
            .add_xaxis(xaxis_data=world_continent)
            # .add_yaxis(series_name='新增确诊',yaxis_data=world_confirmAdd)
            .add_yaxis(series_name='确诊', y_axis=continent_confirm, label_opts=opts.LabelOpts(is_show=False))
            .add_yaxis(series_name='死亡', y_axis=continent_dead, label_opts=opts.LabelOpts(is_show=False))
            .add_yaxis(series_name='治愈', y_axis=continent_heal, label_opts=opts.LabelOpts(is_show=False))
            .add_yaxis(series_name='现存确诊', y_axis=continent_nowConfirm, label_opts=opts.LabelOpts(is_show=False))
            .set_global_opts(title_opts=opts.TitleOpts(title='各大洲总信息', pos_left='50%', pos_top='10%'),
                             tooltip_opts=opts.TooltipOpts(axis_pointer_type='cross'))

    )
    Pie_continent_confirm = (
        Pie()
            .add(series_name='死亡', data_pair=[(i, j) for i, j in zip(world_continent, continent_dead)],
                 rosetype='radius')
        # .add(series_name='确诊',data_pair=[(i,j) for i,j in zip(continent_continent,continent_confirm)])

    )
    Pie_continent_heal = (
        Pie()
            .add(series_name='治愈', data_pair=[(i, j) for i, j in zip(world_continent, continent_heal)],
                 rosetype='radius')

    )
    Pie_continent_nowconfirm = (
        Pie()
            .add(series_name='现存确诊', data_pair=[(i, j) for i, j in zip(world_continent, continent_nowConfirm)],
                 rosetype='radius')
    )
    # Pie_continent_confirm.render(savaPath + '\\daliy_changes_view\\各大洲确诊信息.html')
    # Pie_continent_heal.render(savaPath + '\\daliy_changes_view\\各大洲治愈信息.html')
    # Pie_continent_nowconfirm.render(savaPath + '\\daliy_changes_view\\各大洲现存确诊信息.html')
    # Line_World.render(savaPath + '\\daliy_changes_view\\各大洲总信息.html')
    if flag:
        dwf.write_to_file(savaPath + '/各大洲确诊信息.txt',str(Pie_continent_confirm.dump_options_with_quotes()))
        dwf.write_to_file(savaPath + '/各大洲治愈信息.txt',str(Pie_continent_heal.dump_options_with_quotes()))
        dwf.write_to_file(savaPath + '/各大洲现存确诊信息.txt',str(Pie_continent_nowconfirm.dump_options_with_quotes()))
        dwf.write_to_file(savaPath + '/各大洲总信息.txt',str(Line_World.dump_options_with_quotes()))
    page.add(Pie_continent_confirm)
    page.add(Pie_continent_heal)
    page.add(Pie_continent_nowconfirm)
    page.add(Line_World)
            'elementType': 'labels.text.fill',
            'stylers': {
                'visibility': 'off'
            }
        }]
    }))
for index, row in X.iterrows():
    c = c.add_coordinate(index, row['y'], row['x'])
for group in X.groupby('labels'):
    c = c.add(series_name=group[0],
              type_="scatter",
              is_large=True,
              large_threshold=2000,
              symbol_size=5,
              label_opts=opts.LabelOpts(is_show=False),
              tooltip_opts=opts.TooltipOpts(formatter='{c}'),
              data_pair=[
                  list(z)
                  for z in zip(list(group[1].index), group[1]['labels'])
              ])
c = (c.add_control_panel(
    navigation_control_opts=opts.BMapNavigationControlOpts(
        position=BMapType.ANCHOR_TOP_LEFT),
    maptype_control_opts=opts.BMapTypeControlOpts()))
c = c.set_global_opts(title_opts=opts.TitleOpts(title="Clusters of Crime"))
c.render(name + 'scatter.html')

# In[393]:

map_c = pd.read_csv('dbscanoutput.csv')[:10000]
map_c.columns = ['x', 'y', 'labels']
Exemple #17
0
            ]
        ],
        "outliers": [],
    },
]

c = (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]
Exemple #18
0
    pos_top="40px",
    pos_left="center",
    title="TITLE",
    subtitle="SUBTITLE",
    title_textstyle_opts=txt_opts
)


# %%
# ## SERIES OPTIONS
# ### Explaination Options
TOOlTIP = {
    "click": opts.TooltipOpts(
        is_show=True,
        trigger="item",
        trigger_on="click",
        axis_pointer_type="shadow",
        formatter="名称:{a} <br/> {b}: {c}%"
    ),
    "mouse": opts.TooltipOpts(
        is_show=True,
        trigger="axis",
        trigger_on="mousemove",
        axis_pointer_type="cross",
        formatter="名称:{a} <br/> {b}: {c}%"
    ),
    "hidden": opts.TooltipOpts(
        is_show=False
    )
}
LABEL_OPTS = {
def grid_muti_yaxis():
    x_data = ["{}月".format(i) for i in range(1, 13)]
    bar = (
        Bar()
        .add_xaxis(x_data)
        .add_yaxis(
            "蒸发量",
            [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
            yaxis_index=0,
            color="#d14a61",
        )
        .add_yaxis(
            "降水量",
            [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
            yaxis_index=1,
            color="#5793f3",
        )
        .extend_axis(
            yaxis=opts.AxisOpts(
                name="蒸发量",
                type_="value",
                min_=0,
                max_=250,
                position="right",
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(color="d14a61")
                ),
                axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
            )
        )
        .extend_axis(
            yaxis=opts.AxisOpts(
                type_="value",
                name="温度",
                min_=0,
                max_=25,
                position="left",
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(color="#675bba")
                ),
                axislabel_opts=opts.LabelOpts(color="#{value} °C"),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
                ),
            )
        )
        .set_global_opts(
            yaxis_opts=opts.AxisOpts(
                name="降水量",
                min_=0,
                max_=250,
                position="right",
                offset=80,
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(color="#5793f3")
                ),
                axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
            ),
            title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        )
    )
    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis(
            "平均温度",
            [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
            yaxis_index=2,
            color="#675bba",
            label_opts=opts.LabelOpts(is_show=False),
        )
    )
    bar.overlap(line)
    return Grid().add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
1、迷之颜色映射的问题
"""

x_data = ["直接访问", "邮件营销", "联盟广告", "视频广告", "搜索引擎"]
y_data = [335, 310, 274, 235, 400]
data_pair = [list(z) for z in zip(x_data, y_data)]
data_pair.sort(key=lambda x: x[1])

(Pie(init_opts=opts.InitOpts(
    width="1600px", height="800px", bg_color="#2c343c")).add(
        series_name="访问来源",
        data_pair=data_pair,
        rosetype="radius",
        radius="55%",
        center=["50%", "50%"],
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    ).set_global_opts(
        title_opts=opts.TitleOpts(
            title="Customized Pie",
            pos_left="center",
            pos_top="20",
            title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    ).set_series_opts(
        tooltip_opts=opts.TooltipOpts(trigger="item",
                                      formatter="{a} <br/>{b}: {c} ({d}%)"),
        label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
    ).render("customized_pie.html"))
def draw_charts(kline_data ,canshu ={} ,canshu2={},vol_bar=False,markline_show1 =False ,markline_show2 =False, path = '0501'):
    '''
    df['candle_begin_time','open','high','low','close','volume']
    [['candle_begin_time','open','high','low','close','volume']]

    kdata = df[['open', 'high', 'low', 'close']].values.tolist()
    df['candle_begin_time'].values.tolist()
    :return:
    '''

    df = kline_data.copy()

    df['candle_begin_time'] = pd.to_datetime(df['candle_begin_time'])
    time_list = df['candle_begin_time'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')).values.tolist()
    vol = df['volume'].values.tolist()
    kline = Kline()
    kline.add_xaxis(xaxis_data=time_list)
    signal_pos_list = []
    if 'signal' in df.columns:
        print('signal,存在!')
        df['pos'] = df['signal'].shift(1)
        for i  in df[df['pos'] > 0].index:
            bar0 = df.iloc[i]
            sig_pos0 = opts.MarkPointItem(name="做多",
                               coord=[bar0['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),bar0.low -2],
                               value='买',
                               symbol ='circle',
                               symbol_size =[20,40],
                               itemstyle_opts = {'color': 'red'})

            signal_pos_list.append(sig_pos0)
        for i in df[df['pos'] < 0].index:
            bar0 = df.iloc[i]
            sig_pos0 = opts.MarkPointItem(name="做空",
                                          coord=[bar0['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),bar0.high +3],
                                          value='卖',
                                          symbol='circle',
                                          symbol_size=[20, 40],
                                          itemstyle_opts={'color': 'blue'})
            signal_pos_list.append(sig_pos0)
        for i  in df[df['pos'] == 0].index:
            bar0 = df.iloc[i]
            sig_pos0 = opts.MarkPointItem(name="平仓",
                               coord=[bar0['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),bar0.low - 2],
                               value='平',
                               symbol ='triangle',
                               symbol_size =[20,40],
                               itemstyle_opts = {'color': 'green'})

            signal_pos_list.append(sig_pos0)
    else :
        df['pos'] =None
    markline =[]
    if markline_show1 and ('signal' in df.columns) :
        area_index_list =[i for i  in df[(df['pos'] ==0)|(df['pos'] >0)|(df['pos'] <0)].index]
        for ix,i in enumerate(area_index_list):
            if ix+1 > len(area_index_list)-1:
                break
            i_now = df.iloc[area_index_list[ix]]
            i_next = df.iloc[area_index_list[ix+1]]
            if (i_now['pos'] >0) or (i_now['pos'] <0) :
                log_info = f"价差:={i_next['open']-i_now['open']}--({i_next['open']}-{i_now['open']})"
            else :
                log_info =f"平仓:{i_next['open']}---开仓:{i_now['open']}"
            sig_area = [{"xAxis": i_now['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),
                            "yAxis": i_now['open'] ,
                            "value": None},
                        {"xAxis": i_next['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),
                         "yAxis": i_now['open'],
                         "value":log_info}]
            sig_area_v = [{"xAxis": i_next['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),
                            "yAxis": i_now['open'] ,
                            "value": None},
                        {"xAxis": i_next['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),
                         "yAxis": i_next['open'],
                         "value":None}]
            markline.append(sig_area)
            markline.append(sig_area_v)

    elif markline_show2 and ('signal' in df.columns):
        area_index_list =[i for i in  df[(df['pos'] ==0)|(df['pos'] >0)|(df['pos'] <0)].index]
        for ix,i in enumerate(area_index_list):
            i_now = df.iloc[area_index_list[ix]]
            i_1_now = df.iloc[area_index_list[ix-1]] if ix != 0 else 0
            if i_now['pos'] == 0:
                log_info = f"交易价: {round(i_now['open'], 1)} +- 2__盈亏:{round(i_now['open'], 1) - round(i_1_now['open'], 1)}"
            else:
                log_info = f"交易价: {round(i_now['open'],1)} +- 2"

            sig_area = [{"xAxis": i_now['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),
                            "yAxis": i_now['open'] ,
                            "value": None},
                        {"xAxis": (i_now['candle_begin_time']+timedelta(minutes=15)).strftime('%Y-%m-%d %H:%M:%S'),
                         "yAxis": i_now['open'],
                         "value":log_info}]

            markline.append(sig_area)


    colors = {'red': 'rgb((220,20,60)','red2': 'rgb((250,20,40)',
              'yangzi': 'rgb(255,0,255)', 'zi': 'rgb(128,0,128)',
              'sehnzi': 'rgb(148,0,211)', 'blue': 'rgb(0,0,255)',
              'qing': 'rgb(0,255,255)', 'black': 'rgb(0,0,0)',
              'shengreen': 'rgb(157,255,212)', 'green': 'rgb(0,255,0)',
              'yellow': 'rgb(255,255,0)', 'glod': 'rgb(218,165,32)',
              'orange': 'rgb(255,165,0)', 'brown': 'rgb(165,42,42)'}
    kline.add_xaxis(xaxis_data=time_list)
    kline.add_yaxis(series_name="oclh",
                    xaxis_index=1,
                    yaxis_index=1,
                    y_axis =df.loc[:, ['open', 'close', 'low', 'high']].values.tolist(),
                    markline_opts=opts.MarkLineOpts(data=markline,
                                                    linestyle_opts=opts.LineStyleOpts(type_='dotted',width=3,color='red',opacity=0.5),
                                                    label_opts=opts.LabelOpts(position="right", color="blue", font_size=13),),
                    #官网给出的样本
                    markpoint_opts=opts.MarkPointOpts(data=signal_pos_list),
                    itemstyle_opts=opts.ItemStyleOpts(color="#ec0090", color0="#00aa3c"), )

    kline.set_global_opts(
                    legend_opts=opts.LegendOpts(is_show=True,pos_top=30, pos_left="left",orient='vertical'),
                    datazoom_opts=[ opts.DataZoomOpts(
                                        is_show=False,
                                        type_="inside",
                                        xaxis_index=[0, 1],
                                        range_start=90,
                                        range_end=100,
                                        orient='vertical'),
                                    opts.DataZoomOpts(
                                        is_show=True,
                                        xaxis_index=[0, 1],
                                        type_="slider",
                                        pos_top="20%",
                                        range_start=90,
                                        range_end=100,orient='vertical'),],
                    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 = 'K_line',
                        pos_top='middle',
                        title_textstyle_opts=opts.TextStyleOpts(
                            color='black',font_weight='bold' ,font_size=20)),
                    tooltip_opts=opts.TooltipOpts(
                                trigger="axis",
                                trigger_on='"mousemove"',#click|mousemove
                                axis_pointer_type="cross",
                                is_show_content=True,
                                is_always_show_content=True,
                                background_color="rgba(20, 105, 245, 0.1)",
                                border_width=1,
                                border_color= "#ccc",
                                position = ['70%','30%'],
                                textstyle_opts=opts.TextStyleOpts(font_size=10,color="#000"),),
                    visualmap_opts=opts.VisualMapOpts(
                                is_show=True,
                                dimension=2,
                                series_index=5,
                                is_piecewise=True,
                                pieces=[{"value": 1, "color": "#00da3c"},{"value": -1, "color": "#ec0000"},],),
                    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",),
    )

    if len(canshu.keys())>0:
        cos = list(colors.values())
        line =  Line()
        for k,v in canshu.items():
            line.add_xaxis(xaxis_data=time_list)
            line.set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
            co = cos.pop()
            line.add_yaxis(
            series_name=k,
            y_axis = [y for y in v.values.tolist() if y != np.nan],
            xaxis_index=1,
            yaxis_index=1,
            is_smooth=False,
            is_connect_nones=False,# 是否连接空数据
            is_symbol_show=False,#是否显示值的位置,默认显示。
            color = co,
            is_hover_animation = False, # 是否开启 hover 在拐点标志上的提示动画效果。
            linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.9,color=co),
            label_opts=opts.LabelOpts(is_show =True,position='middle',distance=2,rotate=5,color = 'rgb(165,42,42)'),
            itemstyle_opts=opts.ItemStyleOpts(color=co),)
        kline = kline.overlap(line)

    grid_chart = Grid(init_opts=opts.InitOpts(width = "1500px",height= "700px",theme=ThemeType.DARK))
    grid_chart.add(kline,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%",pos_top='4%' ,height="70%"))

    if( vol_bar == True) or (len(canshu2.keys())==0):
        bar = Bar()
        bar.add_xaxis(xaxis_data=time_list)
        bar.add_yaxis(
            series_name="volume",
            y_axis=vol,
            xaxis_index=1,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False), )

        bar.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=True), )
        grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="80%", height="15%"),)

    if len(canshu2.keys())>0 :
        line2 = Line()
        line2.add_xaxis(xaxis_data=time_list)
        for i, k in enumerate(canshu2.keys()):
            co = random.choice(list(colors.values()))
            line2.add_yaxis(
                series_name=k,
                y_axis=[y for y in canshu2[k].values.tolist()],
                xaxis_index=1,
                yaxis_index=i + 1,
                is_smooth=True,
                is_symbol_show=False,
                is_hover_animation=True,
                color=co,
                z_level=0,
                linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.5, color=co),
                label_opts=opts.LabelOpts(is_show=False), )
            if k == list(canshu2.keys())[-1]: continue
            line2.extend_axis(yaxis=opts.AxisOpts(name=k, type_="value", position="right", min_=None, max_=None,
                                                  axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=co)),
                                                  axislabel_opts=opts.LabelOpts(formatter="{value}"), ))
        line2.set_global_opts(xaxis_opts=opts.AxisOpts(
            type_="category", is_scale=True, grid_index=1, split_number=20, min_="dataMin", max_="dataMax",
            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), ),
            yaxis_opts=opts.AxisOpts(name=k, grid_index=i + 1, position='right',
                                     splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
                                     min_=None, max_=None, is_scale=True, offset=50, ), )
        grid_chart.add(line2,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="75%", height="23%"),is_control_axis_index=True)


    tab = Tab()

    zijin_data = (kline_data['per_lr'].cumsum())
    zijin_data.fillna(method='ffill', inplace=True)
    zijin_line = Line(init_opts=opts.InitOpts(width = "1500px",height= "700px",theme=ThemeType.DARK)).add_xaxis(time_list)
    zijin_line.add_yaxis(series_name="zijin_line:", y_axis=zijin_data.values, color="#FF0000")
    zijin_line.set_global_opts(

            datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
            title_opts=opts.TitleOpts(title="资金曲线变化"),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
            yaxis_opts = opts.AxisOpts(
                is_scale=True,
                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=True)
    )
    tab.add(grid_chart,'kline' )
    tab.add(zijin_line,'资金曲线变化' )
    tab.render(f"{path}.html")
    html0 = tab.render(f"{path}.html")
    if os.path.exists(html0):
        print("ok!保存在:")
        print(html0)
    else:
        print('保存失败!')
Exemple #22
0
def genGeo(data, datapair):
    c = (
        Geo(init_opts=opts.InitOpts(
            bg_color='#344b58',
        ))
            .add_schema(
            maptype="china",
            itemstyle_opts=opts.ItemStyleOpts(
                border_color='#344b58',
                border_width=2.0,
                area_color='rgba(0,0,0,0)',
                color="#eeeeee",
            ),
            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
            ))
            .add(  # 添加动态散点图
            "",
            data,
            type_=ChartType.EFFECT_SCATTER,
            # symbol_size=20,
            effect_opts=opts.EffectOpts(
                period=5,
                scale=5,
                brush_type='fill'
            ),
            label_opts=opts.LabelOpts(
                is_show=True,
                formatter="{b}",
                color="rgba(255,144,128,1)",
                border_width=2.,
                font_size=18,
            )
        )
            .add(  # 添加线段图
            "geo",
            datapair,
            type_=ChartType.LINES,
            symbol_size=7,
            effect_opts=opts.EffectOpts(
                symbol="circle",
                symbol_size=8,
                trail_length=0.08,
                color="rgba(255,144,128,1)"
            ),
            linestyle_opts=opts.LineStyleOpts(
                curve=0.5,
                width=2.5,
                opacity=0.8,
                color=JsCode(
                    """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                        offset: 0,
                        color: '#00acea'
                    }, {
                        offset: 1,
                        color: '#FF8C00'
                    }])"""
                )
            ),
            label_opts=opts.LabelOpts(
                is_show=False
            )
        )
            .set_global_opts(
            title_opts=opts.TitleOpts(
                title="十一人口流动图"
            ),
            visualmap_opts=opts.VisualMapOpts(
                min_=0,
                max_=1000,
                textstyle_opts=opts.TextStyleOpts(
                    color='white'
                )
            ),
            legend_opts=opts.LegendOpts(
                is_show=False
            ),
            tooltip_opts=opts.TooltipOpts(
                trigger="item",
                formatter='{b}'
            ),
        )
    )
    tl.add(c, "{}年".format(series[i]))
Exemple #23
0
def draw_charts(x_axis_list, oclh_data_list, volume_list, tech_line_dict):
    upColor = '#ec0000'
    downColor = '#00da3c'
    upBorderColor = '#8A0000'
    downBorderColor = '#008F2'

    kline = (Kline().add_xaxis(x_axis_list).add_yaxis(
        series_name="kline",
        y_axis=oclh_data_list,
        markpoint_opts=opts.MarkPointOpts(
            data=gen_mark_points_data_list())).set_series_opts(
                itemstyle_opts=opts.ItemStyleOpts(
                    color=upColor,
                    color0=downColor,
                    border_color=upBorderColor,
                    border_color0=downBorderColor), ).set_global_opts(
                        legend_opts=opts.LegendOpts(pos_bottom=10,
                                                    pos_left="center"),
                        xaxis_opts=opts.AxisOpts(is_scale=True),
                        yaxis_opts=opts.AxisOpts(
                            is_scale=True,
                            splitarea_opts=opts.SplitAreaOpts(
                                areastyle_opts=opts.AreaStyleOpts(opacity=1)),
                        ),
                        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": downColor
                                },
                                {
                                    "value": -1,
                                    "color": upColor
                                },
                            ],
                        ),
                        datazoom_opts=[
                            opts.DataZoomOpts(
                                type_="inside",
                                xaxis_index=[0, 1],
                                range_start=98,
                                range_end=100,
                            ),
                            opts.DataZoomOpts(
                                type_="slider",
                                xaxis_index=[0, 1],
                                range_start=98,
                                range_end=100,
                                pos_top='85%',
                            )
                        ],
                        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",
                        ),
                        title_opts=opts.TitleOpts(title="Kline")))

    if tech_line_dict:
        line = (Line().add_xaxis(xaxis_data=x_axis_list).set_global_opts(
            xaxis_opts=opts.AxisOpts(type_="category")))
        [
            line.add_yaxis(
                series_name=name,
                y_axis=value_list,
                is_smooth=True,
                is_hover_animation=False,
                linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
                label_opts=opts.LabelOpts(is_show=False),
            ) for name, value_list in tech_line_dict.items()
        ]
        kline = kline.overlap(line)

    bar = (Bar().add_xaxis(x_axis_list).add_yaxis(
        series_name="成交量",
        yaxis_data=volume_list,
        xaxis_index=1,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=False)).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),
        ))

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="2000px",
        height="800px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))

    grid_chart.add(kline,
                   grid_opts=opts.GridOpts(pos_left="10%",
                                           pos_right="8%",
                                           height="50%"))
    grid_chart.add(bar,
                   grid_opts=opts.GridOpts(pos_left="10%",
                                           pos_right="8%",
                                           pos_top="63%",
                                           height="16%"))

    folder_path = get_folder_path("backtesting_result_pyecharts")
    file_path = f"{folder_path}/render.html"
    grid_chart.render(path=file_path)

    return file_path
 def draw_bar(cls, title: str, xaxis_data: List[str],
              yaxis_data: pd.DataFrame) -> Bar:
     """
     根据df内容绘制柱状图
     :param title:           标题
     :param xaxis_data:      横轴数据
     :param yaxis_data:      纵轴绘制数据
     :return:
     """
     # 获取dataframe最大最小值
     min_data = yaxis_data.min().min()
     max_data = yaxis_data.max().max()
     c = (
         Bar(init_opts=opts.InitOpts(
             width=DEFAULT_WIDTH,
             animation_opts=opts.AnimationOpts(
                 animation_delay=200,
                 animation_easing="bounceOut"),  #   增加启动动效
         )).add_xaxis(xaxis_data).set_series_opts(label_opts=opts.LabelOpts(
             is_show=True)).
         set_global_opts(
             title_opts=opts.TitleOpts(title=title, pos_left="0%"),
             toolbox_opts=opts.ToolboxOpts(),  # 显示工具箱
             tooltip_opts=opts.TooltipOpts(is_show=True),
             axispointer_opts=opts.AxisPointerOpts(
                 is_show=True, type_="none"),  # 指针移动时显示所有数值
             legend_opts=opts.LegendOpts(
                 is_show=True,
                 selected_mode="multiple",
                 # pos_bottom="0%",
                 # pos_right="0%",
                 # orient="vertical",
             ),  # 显示图例说明
             datazoom_opts=[
                 opts.DataZoomOpts(
                     range_start=0,
                     range_end=100,
                     orient="vertical",
                     pos_left=DATAZOOM_VERTICAL_POS_LEFT,
                 ),
                 opts.DataZoomOpts(range_start=0,
                                   range_end=100,
                                   orient="horizontal"),
             ],  # 增加缩放配置横纵轴都支持缩放
             # visualmap_opts=opts.VisualMapOpts(type_="color", max_=1, min_=-1),
             # visualmap_opts = opts.VisualMapOpts(max_ = max_data, min_ = min_data)
         ))
     # 遍历dataframe 依次添加数据到y轴
     column_list = yaxis_data.columns.tolist()
     for column in column_list:
         c.add_yaxis(
             column,
             yaxis_data[column].tolist(),
             # markpoint_opts=opts.MarkPointOpts(
             #     data=[
             #         opts.MarkPointItem(type_="min"),
             #         opts.MarkPointItem(type_="max"),
             #     ]
             # ),
         )
     return c
    750,
    800,
    700,
    600,
    400,
]

c = (Line().add_xaxis(xaxis_data=x_data).add_yaxis(
    series_name="用电量",
    y_axis=y_data,
    is_smooth=True,
    label_opts=opts.LabelOpts(is_show=False),
    linestyle_opts=opts.LineStyleOpts(width=2),
).set_global_opts(
    title_opts=opts.TitleOpts(title="一天用电量分布", subtitle="纯属虚构"),
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
    xaxis_opts=opts.AxisOpts(boundary_gap=False),
    yaxis_opts=opts.AxisOpts(
        axislabel_opts=opts.LabelOpts(formatter="{value} W"),
        splitline_opts=opts.SplitLineOpts(is_show=True),
    ),
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,
        dimension=0,
        pieces=[
            {
                "lte": 6,
                "color": "green"
            },
            {
                "gt": 6,
Exemple #26
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 = ka.to_df(use_macd=True, ma_params=(
        5,
        20,
    ))
    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)
Exemple #27
0
def find_proportion_render(x, y, z, part_name, main_name, query, table_path,
                           answer):
    x = list(map(str, x))
    y = list(map(float, y))
    z = list(map(float, z))
    colorList = ['#f36c6c', '#e6cf4e', '#20d180', '#0093ff']
    y_part = []
    y_main = []
    for i in range(len(y)):
        percentage = y[i] / z[i] * 100
        percentage = str(percentage).split('.')[0] + '.' + str(
            percentage).split('.')[1][:2]
        y_part.append(
            opts.BarItem(
                name=x[i],
                value=y[i],
                label_opts=opts.LabelOpts(position="insideTop",
                                          formatter=str(percentage) + "%"),
                itemstyle_opts=opts.ItemStyleOpts(color=colorList[2])))
        y_main.append(opts.BarItem(
            name=x[i],
            value=z[i] - y[i],
        ))
    bar = Bar()
    bar.add_xaxis(x)
    bar.add_yaxis('',
                  y_axis=y_part,
                  stack='stack1',
                  label_opts=opts.LabelOpts(position="insideTop"),
                  itemstyle_opts=opts.ItemStyleOpts(color=colorList[2]),
                  tooltip_opts=opts.TooltipOpts(formatter=part_name + ':{c}')),
    bar.add_yaxis('',
                  y_axis=y_main,
                  stack='stack1',
                  label_opts=opts.LabelOpts(is_show=False),
                  color="gray",
                  tooltip_opts=opts.TooltipOpts(formatter=main_name + ':{c}'))
    bar.set_global_opts(
        datazoom_opts=[
            opts.DataZoomOpts(range_start=10, range_end=90),
            opts.DataZoomOpts(type_="inside")
        ],
        legend_opts=opts.LegendOpts(is_show=False),
        graphic_opts=[
            opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center",
                    top="bottom",
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    # 可以通过jsCode添加js代码,也可以直接用字符串
                    text=[
                        '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer
                    ],
                    font="14px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#333")))
        ])
    bar.render("aggregation.html")
    grid = Grid(init_opts=opts.InitOpts(
        width="100%",
        height="100%",
        renderer=globals.RenderType.SVG,
    ))
    grid.add(bar, grid_opts={'left': '20%', 'bottom': '34%'})
    option1 = grid.dump_options_with_quotes()
    option1 = json.loads(option1)
    option = {"option": [option1], "query": query}
    return option
Exemple #28
0
            +(latExtent[0] + lngIndex * cellSizeCoord[0]).toFixed(6),
            +(lngExtent[0] + latIndex * cellSizeCoord[1]).toFixed(6)
        ]));
    }
    """).add(
    series_name="",
    data_pair=j["data"],
    type_=ChartType.CUSTOM,
    render_item=JsCode("renderItem"),
    itemstyle_opts=opts.ItemStyleOpts(color="yellow"),
    encode={
        "tooltip": 2
    },
).set_global_opts(
    title_opts=opts.TitleOpts(title="BMap-Custom 图"),
    tooltip_opts=opts.TooltipOpts(is_show=True, formatter=None),
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,
        pos_top="10",
        pos_left="10",
        is_inverse=True,
        pieces=[{
            "value": i,
            "color": color_list[i]
        } for i in range(len(color_list))],
        dimension=2,
        border_color="#ccc",
        border_width=2,
        background_color="#eee",
        range_opacity=0.7,
    ),
from pyecharts.faker import Faker
# from pyecharts.charts import Page  # 顺序多图
# from pyecharts.globals import SymbolType
# from pyecharts.charts import Page, WordCloud
# from pyecharts.render import make_snapshot
# from snapshot_selenium import snapshot  # 渲染图片

bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))  # 设置主题
bar.add_xaxis(['衬衫', '羊毛衫', '学纺纱', '裤子', '高跟鞋', '袜子'])
bar.add_yaxis('商家A', [5, 20, 36, 10, 75, 90])
bar.add_yaxis('商家B', [15, 6, 45, 20, 35, 66])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.set_global_opts(title_opts=opts.TitleOpts(title='主标题', subtitle='副标题'),
                    toolbox_opts=opts.ToolboxOpts(is_show=True),
                    tooltip_opts=opts.TooltipOpts(is_show=True),
                    visualmap_opts=opts.VisualMapOpts(is_show=True),
                    datazoom_opts=opts.DataZoomOpts(is_show=True))
bar.render(path='C:\\Users\\tangyun\\Desktop\\生成图像\\figure1.html')
# make_snapshot(snapshot, bar.render(), 'bar.png')


def bar_base() -> Bar:
    c = (Bar().add_xaxis(Faker.choose()).add_yaxis(
        '商家A',
        Faker.values()).add_yaxis('商家B', Faker.values()).set_global_opts(
            title_opts=opts.TitleOpts(title='Bar-基本示例', subtitle='副标题'),
            toolbox_opts=opts.ToolboxOpts(is_show=True)))
    return c

Exemple #30
0
import pyecharts.options as opts
from pyecharts.charts import Tree


async def get_json_data(url: str) -> dict:
    async with ClientSession(connector=TCPConnector(ssl=False)) as session:
        async with session.get(url=url) as response:
            return await response.json()


# 获取官方的数据
data = asyncio.run(
    get_json_data(url="https://echarts.baidu.com/examples/data/asset/data/flare.json")
)

(
    Tree(init_opts=opts.InitOpts(width="1400px", height="800px"))
    .add(
        series_name="",
        data=[data],
        pos_top="18%",
        pos_bottom="14%",
        layout="radial",
        symbol="emptyCircle",
        symbol_size=7,
    )
    .set_global_opts(
        tooltip_opts=opts.TooltipOpts(trigger="item", trigger_on="mousemove")
    )
    .render("Radial_tree.html")
)