Пример #1
0
def bar_histogram_color() -> Bar:
    x = Faker.dogs + Faker.animal
    xlen = len(x)
    y = []
    for idx, item in enumerate(x):
        if idx <= xlen / 2:
            y.append(
                opts.BarItem(
                    name=item,
                    value=(idx + 1) * 10,
                    itemstyle_opts=opts.ItemStyleOpts(color="#749f83"),
                ))
        else:
            y.append(
                opts.BarItem(
                    name=item,
                    value=(xlen + 1 - idx) * 10,
                    itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
                ))

    c = (Bar().add_xaxis(x).add_yaxis(
        "series0", y, category_gap=0,
        color=Faker.rand_color()).set_global_opts(title_opts=opts.TitleOpts(
            title="Bar-直方图(颜色区分)")))
    return c
Пример #2
0
def bar_histogram():
    x = Faker.dogs + Faker.animal
    xlen = len(x)
    y = []
    for idx, item in enumerate(x):
        if idx <= xlen / 2:
            bar_item = opts.BarItem(
                    name=item,
                    value=(idx + 1) * 10,
                    itemstyle_opts=opts.ItemStyleOpts(color="#749f83")
                )
        else:
            bar_item = opts.BarItem(
                    name=item,
                    value=(xlen + 1 - idx) * 10,
                    itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
                )
        y.append(bar_item)

    obj_bar = Bar()
    obj_bar.add_xaxis(x)
    #直方图就是紧挨着的系列柱category_gap=0调节系列柱之间距离,
    # color=Faker.rand_color()因为上面设置了柱的颜色,这里只对图例legend的颜色起作用
    obj_bar.add_yaxis("series0", y, category_gap=0,color=Faker.rand_color())
    obj_bar.set_global_opts(
        title_opts=opts.TitleOpts(title="Bar-直方图(颜色区分)", subtitle="副标题")
    )
    return obj_bar
Пример #3
0
def draw_bar_like(data,user_id,title="偏爱曲风统计"):
    """
    柱状图 偏爱统计
    :param data:
    :param user_id:
    :param title:
    :return:
    """
    file_name = "user_data/" + str(user_id) + "_bar_like.html"
    x = ["古风", "古典", "电子", "民谣", "流行", "说唱", "摇滚"]
    color = ["#C43C3C", "#7D573E", "#E6E65D", "#69DA69", "#70D4D4", "#9B7CC7", "#A2A2A2"]
    xlen = len(x)
    y = []
    for idx, item in enumerate(x):
        y.append(
            opts.BarItem(
                name=item,
                value=data[idx][1],
                itemstyle_opts=opts.ItemStyleOpts(color=color[idx]),
            )
        )
    c = (
        Bar()
            .add_xaxis(x)
            .add_yaxis("", y, color=Faker.rand_color())
            .set_global_opts(title_opts=opts.TitleOpts(title=title),
                             toolbox_opts=opts.ToolboxOpts()
                             )
            #.render(file_name)
    )
    return c
def get_XY(bins, pct, label, color):
    # 分箱获取Y轴的数据

    result = pd.cut(pct, bins, ordered=True, labels=label)
    v = pd.value_counts(result)
    result_dict = {}
    for i in label:
        if i == "-90":
            j = '-20+'
        else:
            j = i
        result_dict[j] = v.loc[i]

    gte_20 = pct[pct >= 20].count()
    result_dict.update({'20+': gte_20})
    y_list = []
    for k, v in result_dict.items():
        if k.startswith('-'):
            color_ = color[0]
        else:
            color_ = color[1]

        y_list.append(
            opts.BarItem(
                name=str(v),
                value=int(v),
                itemstyle_opts=opts.ItemStyleOpts(color=color_),
            ))

    return result_dict, y_list
Пример #5
0
def charts():
    fp = open('./oldData.txt', 'r')

    # Timeline
    timeline = Timeline(init_opts=opts.InitOpts(
        width="1660px",
        height="708px",
    ))

    # 48 bar charts
    for i in range(48):
        X, Y, Color = getSta(fp)

        # y-axle with color
        y = []
        for j in range(22):
            y.append(
                opts.BarItem(
                    name=X[j],
                    value=Y[j],
                    itemstyle_opts=opts.ItemStyleOpts(color=Color[j])))

        # single bar chart
        bar = (
            Bar().add_xaxis(X).add_yaxis(
                "Youbike 使用率", y).reversal_axis().set_global_opts(
                    title_opts=opts.TitleOpts(
                        title="南港區Youbike的一天",
                        pos_left="center",
                    ),
                    legend_opts=opts.LegendOpts(pos_left="left"),
                    graphic_opts=[
                        opts.GraphicGroup(  # add a block
                            graphic_item=opts.GraphicItem(left="80%",
                                                          top="80%"),
                            children=[
                                opts.GraphicText(  # add text into the block
                                    graphic_item=opts.GraphicItem(
                                        left="center",
                                        top="center",
                                        # z=100
                                    ),
                                    graphic_textstyle_opts=opts.
                                    GraphicTextStyleOpts(
                                        text="{}".format(invTime[i]),
                                        font="48px Verdana",
                                    ),
                                )
                            ])
                    ]).set_series_opts(  # number showed at right of the bar
                        label_opts=opts.LabelOpts(position="right",
                                                  color="#333")))
        timeline.add(bar, "")  # add single bar chart into timeline
        timeline.add_schema(play_interval=1000,
                            is_loop_play=True)  # play settings

    # export into HTML
    timeline.render("YoubikeUsingRate.html")

    fp.close()
Пример #6
0
def draw_bar_plays(data,user_id,title="听歌方式"):
    """
    两种听歌方式
    :param plays:
    :param user_id:
    :param title:
    :return:
    """
    file_name = "user_data/" + str(user_id) + "_bar_plays.html"
    x = ["片段播放", "完整播放"]
    color = ["#749f83", "#d48265"]

    xlen = len(x)
    y = []
    for idx, item in enumerate(x):

        y.append(
            opts.BarItem(
                name=item,
                value=data[idx],
                itemstyle_opts=opts.ItemStyleOpts(color=color[idx]),
            )
        )
    c = (
        Bar()
            .add_xaxis(x)
            .add_yaxis("用户:"+str(user_id), y,color=Faker.rand_color())
            .set_global_opts(title_opts=opts.TitleOpts(title=title),toolbox_opts=opts.ToolboxOpts())
            #.render(file_name)
    )
    return c
Пример #7
0
def draw_bar_recoder(data,user_id,title = "用户行为统计"):
    """
    用户行为统计
    :param data:
    :param user_id:
    :param title:
    :return:
    """
    file_name = "user_data/" + str(user_id) + "_bar_recoder.html"
    x = ["循环播放","片段播放","查看评论","点赞评论","收藏歌曲"]
    color = ["#F79709","#749f83", "#d48265","#33CCCC","#82C182"]
    xlen = len(x)
    y = []
    for idx, item in enumerate(x):
        y.append(
            opts.BarItem(
                name=item,
                value=data[idx][1],
                itemstyle_opts=opts.ItemStyleOpts(color=color[idx]),
            )
        )
    c = (
        Bar()
            .add_xaxis(x)
            .add_yaxis("" , y, color=Faker.rand_color())
            .set_global_opts(title_opts=opts.TitleOpts(title=title),
                             toolbox_opts=opts.ToolboxOpts()
                             )
            # .render(file_name)
    )
    return c
Пример #8
0
def test_bar_item_base(fake_writer):
    x_axis = ["A", "B", "C"]
    bar_item_1 = [
        opts.BarItem(name=d[0], value=d[1])
        for d in list(zip(x_axis, [1, 2, 3]))
    ]
    bar_item_2 = [
        opts.BarItem(name=d[0], value=d[1])
        for d in list(zip(x_axis, [4, 5, 6]))
    ]

    c = (Bar().add_xaxis(x_axis).add_yaxis("series0", bar_item_1).add_yaxis(
        "series1", bar_item_2))
    c.render()
    _, content = fake_writer.call_args[0]
    assert_greater(len(content), 2000)
    assert_equal(c.theme, "white")
    assert_equal(c.renderer, "canvas")
Пример #9
0
def draw_degree():
    degree = nx.degree(G)
    degree_sort = sorted(degree, key=lambda x: x[1], reverse=True)
    e0 = [
        opts.BarItem(name=G.nodes[degree_sort[0][0]], value=degree_sort[0][1])
    ]
    e1 = [
        opts.BarItem(name=G.nodes[x[0]]['name'], value=x[1])
        for x in degree_sort if G.nodes[x[0]]['E_numbers'] == 1
    ][:50]
    e2 = [
        opts.BarItem(name=G.nodes[x[0]]['name'], value=x[1])
        for x in degree_sort if G.nodes[x[0]]['E_numbers'] == 2
    ][:50]

    xaxis = [x + 1 for x in range(50)]
    c = (Bar().add_xaxis(xaxis).add_yaxis(
        "Erdos_number is 0",
        e0,
        category_gap=0,
        itemstyle_opts=opts.ItemStyleOpts(color='#d48265'),
        gap="0%").add_yaxis(
            "Erdos_number is 1",
            e1,
            category_gap=0,
            itemstyle_opts=opts.ItemStyleOpts(color='#749f83'),
            gap="0%").add_yaxis(
                "Erdos_number is 2", e2, category_gap=0,
                gap="0%").set_series_opts(
                    label_opts=opts.LabelOpts(is_show=False),
                    axisline_opts=opts.AxisOpts(interval=1),
                    markline_opts=opts.MarkLineOpts(data=[
                        opts.MarkLineItem(type_="average", name="Average"),
                    ]),
                ).set_global_opts(
                    title_opts=opts.TitleOpts(title="Top 50 degree authors"),
                    datazoom_opts=opts.DataZoomOpts(),
                    yaxis_opts=opts.AxisOpts(
                        axistick_opts=opts.AxisTickOpts(is_show=True),
                        splitline_opts=opts.SplitLineOpts(is_show=True),
                    ),
                ).render("bar_stack1.html"))
Пример #10
0
 def format_yaxis(self, y_set, offset=0, sign=1, opacity: float = 1):
     while len(self.y_axiss) < len(y_set) + offset:
         self.y_axiss.append([])
     for idx, item in enumerate(y_set.items()):
         country, value = item
         color = self.get_country_color(country)
         self.y_axiss[idx + offset].append(
             opts.BarItem(name=country,
                          value=value * sign,
                          itemstyle_opts=opts.ItemStyleOpts(
                              color=color, opacity=opacity)))
Пример #11
0
def dsp_her():  # 显示遗传力
    # page = Page(layout=Page.DraggablePageLayout)
    import xlrd
    # file = "breeding.xlsx"
    f1 = xlrd.open_workbook(file)
    sheet1 = f1.sheet_by_name('Sheet1')
    lst = her(file)  # 接收计算的遗传力
    y = []
    colorArr = [
        '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
        'F'
    ]
    for i in range(len(lst)):
        color = "#"
        for j in range(6):
            color += colorArr[random.randint(0, 14)]

        y.append(
            opts.BarItem(
                value=lst[i],
                itemstyle_opts=opts.ItemStyleOpts(color=str(color)),
                # itemstyle_opts=opts.ItemStyleOpts(color=color[i])
            ))
    x_ax = []
    y_ax = []
    start = load_profile()[0]
    end = load_profile()[1]
    for i in range(start, end + 1):
        x_ax.append(sheet1.cell_value(0, i))
    bar = Bar(init_opts=opts.InitOpts(  #bg_color='rgba(155,250,205,0.2)',
        width="1800px", height="800px"))
    bar.set_colors(["#FF6347", "black"])  # FF6347
    bar.add_xaxis(x_ax)
    bar.add_yaxis("遗传力", y, category_gap="60%")
    bar.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(type_="max", name="最大值")]))
    # bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
    bar.set_global_opts(title_opts=opts.TitleOpts(title="显示已有数据遗传力"))
    for i in range(sheet1.nrows - 1):
        y_ax.append(i)
    line = Line(init_opts=opts.InitOpts(width="1800px", height="800px"))
    line.add_xaxis(y_ax)
    line.add_yaxis(series_name="",
                   y_axis=lst,
                   label_opts=opts.LabelOpts(is_show=True))
    picture = bar.overlap(line)
    return render_template("display.html",
                           picture_options=picture.dump_options())
Пример #12
0
def select_data(year):
    film_list = select_film(year)
    colors = [
        "#546570", "#c4ccd3", "#bda29a", "#ca8622", "#d48265", "#6e7074",
        "#749f83", "#61a0a8", "#2f4554", "#c23531", "#6e7074", "#749f83",
        "#61a0a8", "#2f4554", "#c23531"
    ]
    y = []
    for n in range(len(film_list[1])):
        y.append(
            opts.BarItem(
                name=film_list[0][n],
                value=film_list[1][n],
                itemstyle_opts=opts.ItemStyleOpts(color=colors[n]),
            ))
    return y
Пример #13
0
def dsp_cbv():  # 显示综合育种值

    import xlrd
    # file = "breeding.xlsx"
    f1 = xlrd.open_workbook(file)
    sheet1 = f1.sheet_by_name('Sheet1')
    lst = cbv(file)[0]  # 接收计算的早选指数
    y = []
    colorArr = [
        '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
        'F'
    ]
    for i in range(len(lst)):
        color = "#"
        for j in range(6):
            color += colorArr[random.randint(0, 14)]

        y.append(
            opts.BarItem(
                value=lst[i],
                itemstyle_opts=opts.ItemStyleOpts(color=str(color)),
                # itemstyle_opts=opts.ItemStyleOpts(color=color[i])
            ))
    x_ax = cbv(file)[1]
    # y_ax = []

    bar = Bar(init_opts=opts.InitOpts(  #bg_color='rgba(255,250,205,0.2)',
        width="1800px", height="800px"))
    bar.set_colors(["#FF6347", "black"])
    bar.add_xaxis(x_ax)
    bar.add_yaxis("综合育种值", y, category_gap="80%")
    bar.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(type_="max", name="最大值")]))
    # bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
    bar.set_global_opts(title_opts=opts.TitleOpts(title="显示已有数据综合育种值"))
    # for i in range(sheet1.nrows-1):
    #     y_ax.append(i)
    # line = Line(init_opts=opts.InitOpts(width="1800px", height="800px"))
    # line.add_xaxis(y_ax)
    # line.add_yaxis(series_name="", y_axis=lst, label_opts=opts.LabelOpts(is_show=True))
    picture = bar
    return render_template("display.html",
                           picture_options=picture.dump_options())
def change_data(dataframe):
    global date_list, price_list, ma5_list, ma10_list, ma20_list, volume_list

    # 转成列表
    try:
        for i in range(0, len(dataframe)):
            alist = []
            date_list.append(dataframe['date'].iloc[i])
            # alist.append(tsData['date'].iloc[i])
            alist.append(dataframe['open'].iloc[i])
            alist.append(dataframe['close'].iloc[i])
            alist.append(dataframe['low'].iloc[i])
            alist.append(dataframe['high'].iloc[i])
            ma5_list.append(dataframe['ma5'].iloc[i])
            ma10_list.append(dataframe['ma10'].iloc[i])
            ma20_list.append(dataframe['ma20'].iloc[i])

            high_list.append(dataframe['high'].iloc[i])
            low_list.append(dataframe['low'].iloc[i])

            # 柱状图数据处理
            color = ''
            if dataframe['open'].iloc[i] > dataframe['close'].iloc[i]:
                color = '#ADFF2F'
            else:
                color = '#FF4500'
            volume_list.append(
                opts.BarItem(name='volume',
                             value=dataframe['volume'].iloc[i],
                             itemstyle_opts=opts.ItemStyleOpts(color=color)))

            price_list.append(alist)
        print('股票数据已成功转换')
    except:
        print('股票数据转换失败!')

    draw()
Пример #15
0
def find_aggregation_render(x, y, flag, query, table_path, answer, y_name):
    colorList = ['#f36c6c', '#e6cf4e', '#20d180', '#0093ff']
    x_sum = ["Sum"]
    Sum = []
    Sum.append(sum(y))
    mean = np.mean(y)
    y1 = []
    y2 = []
    for i in range(len(y)):
        if y[i] >= mean:
            y1.append(round(mean, 2))
            y2.append(
                opts.BarItem(name=x[i],
                             value=round(y[i] - mean, 2),
                             label_opts=opts.LabelOpts(formatter="+{c}"),
                             itemstyle_opts=opts.ItemStyleOpts(color="red")))
        else:
            y1.append(round(y[i], 2))
            y2.append(
                opts.BarItem(name=x[i],
                             value=round(mean - y[i], 2),
                             label_opts=opts.LabelOpts(formatter="-{c}"),
                             itemstyle_opts=opts.ItemStyleOpts(color="green",
                                                               opacity=0.3)))
    if flag == "mean":
        bar = Bar()
        bar.add_xaxis(x)
        bar.add_yaxis(
            '',
            y_axis=y1,
            stack='stack1',
            label_opts=opts.LabelOpts(is_show=False),
            color="white",
            markline_opts=opts.MarkLineOpts(
                data=[opts.MarkLineItem(name="mean:", y=round(mean, 2))],
                label_opts=opts.LabelOpts(formatter="Mean:{c}", color="black"),
                linestyle_opts=opts.LineStyleOpts(color="gray")),
        )
        bar.add_yaxis('', y_axis=y2, stack='stack1')
        bar.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10, range_end=90),
                opts.DataZoomOpts(type_="inside")
            ],
            xaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(rotate=40, font_size='100%'),
                name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
            yaxis_opts=opts.AxisOpts(
                min_=int(min(y) - (max(y) - min(y)) / 10),
                name=y_name,
                axislabel_opts=opts.LabelOpts(font_size="100%"),
                name_textstyle_opts=opts.TextStyleOpts(font_size="100%")),
            graphic_opts=[
                opts.GraphicText(
                    graphic_item=opts.GraphicItem(
                        left="center",
                        top="bottom",
                    ),
                    graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                        # 可以通过jsCode添加js代码,也可以直接用字符串
                        text=[
                            '\n' + "Q:" + ' ' + query + '\n' + "\n" + 'A:' +
                            ' ' + answer
                        ],
                        font="14px Microsoft YaHei",
                        graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                            fill="#333")))
            ])
        bar.render("aggregation.html")
        grid = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid.add(bar, grid_opts={'left': '15%', 'bottom': '34%'})
        grid1 = Grid()
        grid1.add(bar, grid_opts={'left': '15%', 'bottom': '34%'})
        grid1.render("mean.html")
        option1 = grid.dump_options_with_quotes()
        option1 = json.loads(option1)
        option = {"option": [option1], "query": query}
        return option
    elif flag == "sum":
        bar = Bar()
        bar.add_xaxis(x_sum)
        bar.add_yaxis('',
                      Sum,
                      label_opts=opts.LabelOpts(position="inside",
                                                formatter="Sum:{c}"),
                      color=colorList[0])
        for i in range(len(y)):
            Y = []
            Y.append(y[i])
            r = str(x[i])
            bar.add_yaxis('',
                          Y,
                          stack='stack1',
                          label_opts=opts.LabelOpts(position="inside",
                                                    formatter=r + ":{c}"),
                          tooltip_opts=opts.TooltipOpts(is_show=False))
        bar.set_global_opts(
            datazoom_opts=[
                opts.DataZoomOpts(range_start=10,
                                  range_end=90,
                                  orient="vertical"),
                opts.DataZoomOpts(type_="inside")
            ],
            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")))
            ])
        grid = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="100%",
            renderer=globals.RenderType.SVG,
        ))
        grid.add(bar, grid_opts={'left': '15%', 'bottom': '34%'})
        option1 = grid.dump_options_with_quotes()
        option1 = json.loads(option1)
        option = {"option": [option1], "query": query}
        return option
Пример #16
0
def kline_pro(kline: List[dict],
              ma: List[dict],
              macd: List[dict],
              fx: List[dict] = None,
              bi: List[dict] = None,
              xd: List[dict] = None,
              bs: List[dict] = None,
              title: str = "缠中说禅K线分析",
              width: str = "1200px",
              height: str = '680px') -> Grid:
    """绘制缠中说禅K线分析结果

    :param kline: K线
    :param ma: 均线
    :param macd: MACD
    :param fx: 分型识别结果
    :param bi: 笔识别结果
    :param xd: 线段识别结果
    :param bs: 买卖点
    :param title: 图表标题
    :param width: 图表宽度
    :param height: 图表高度
    :return: 用Grid组合好的图表
    """
    # 配置项设置
    # ------------------------------------------------------------------------------------------------------------------
    bg_color = "#1f212d"  # 背景
    up_color = "#F9293E"
    down_color = "#00aa3b"

    init_opts = opts.InitOpts(bg_color=bg_color,
                              width=width,
                              height=height,
                              animation_opts=opts.AnimationOpts(False))
    title_opts = opts.TitleOpts(
        title=title,
        pos_top="1%",
        title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20),
        subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color,
                                                   font_size=12))

    label_not_show_opts = opts.LabelOpts(is_show=False)
    legend_not_show_opts = opts.LegendOpts(is_show=False)
    red_item_style = opts.ItemStyleOpts(color=up_color)
    green_item_style = opts.ItemStyleOpts(color=down_color)
    k_style_opts = opts.ItemStyleOpts(color=up_color,
                                      color0=down_color,
                                      border_color=up_color,
                                      border_color0=down_color,
                                      opacity=0.8)

    legend_opts = opts.LegendOpts(is_show=True,
                                  pos_top="1%",
                                  pos_left="30%",
                                  item_width=14,
                                  item_height=8,
                                  textstyle_opts=opts.TextStyleOpts(
                                      font_size=12, color="#0e99e2"))
    brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"],
                                x_axis_index="all",
                                brush_link="all",
                                out_of_brush={"colorAlpha": 0.1},
                                brush_type="lineX")

    axis_pointer_opts = opts.AxisPointerOpts(is_show=True,
                                             link=[{
                                                 "xAxisIndex": "all"
                                             }])

    dz_inside = opts.DataZoomOpts(False, "inside", xaxis_index=[0, 1, 2])
    dz_slider = opts.DataZoomOpts(True,
                                  "slider",
                                  xaxis_index=[0, 1, 2],
                                  pos_top="96%",
                                  pos_bottom="0%")

    yaxis_opts = opts.AxisOpts(is_scale=True,
                               axislabel_opts=opts.LabelOpts(
                                   color="#c7c7c7",
                                   font_size=8,
                                   position="inside"))

    grid0_xaxis_opts = opts.AxisOpts(
        type_="category",
        grid_index=0,
        axislabel_opts=label_not_show_opts,
        split_number=20,
        min_="dataMin",
        max_="dataMax",
        is_scale=True,
        boundary_gap=False,
        axisline_opts=opts.AxisLineOpts(is_on_zero=False))

    tool_tip_opts = opts.TooltipOpts(
        trigger="axis",
        axis_pointer_type="cross",
        background_color="rgba(245, 245, 245, 0.8)",
        border_width=1,
        border_color="#ccc",
        position=JsCode("""
                    function (pos, params, el, elRect, size) {
    					var obj = {top: 10};
    					obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
    					return obj;
    				}
                    """),
        textstyle_opts=opts.TextStyleOpts(color="#000"),
    )

    # 数据预处理
    # ------------------------------------------------------------------------------------------------------------------
    dts = [x['dt'] for x in kline]
    k_data = [[x['open'], x['close'], x['low'], x['high']] for x in kline]

    vol = []
    for row in kline:
        item_style = red_item_style if row['close'] > row[
            'open'] else green_item_style
        bar = opts.BarItem(value=row['vol'],
                           itemstyle_opts=item_style,
                           label_opts=label_not_show_opts)
        vol.append(bar)

    macd_bar = []
    for row in macd:
        item_style = red_item_style if row['macd'] > 0 else green_item_style
        bar = opts.BarItem(value=round(row['macd'], 4),
                           itemstyle_opts=item_style,
                           label_opts=label_not_show_opts)
        macd_bar.append(bar)

    diff = [round(x['diff'], 4) for x in macd]
    dea = [round(x['dea'], 4) for x in macd]

    # K 线主图
    # ------------------------------------------------------------------------------------------------------------------
    chart_k = Kline()
    chart_k.add_xaxis(xaxis_data=dts)
    chart_k.add_yaxis(series_name="Kline",
                      y_axis=k_data,
                      itemstyle_opts=k_style_opts)

    chart_k.set_global_opts(legend_opts=legend_opts,
                            datazoom_opts=[dz_inside, dz_slider],
                            yaxis_opts=yaxis_opts,
                            tooltip_opts=tool_tip_opts,
                            axispointer_opts=axis_pointer_opts,
                            brush_opts=brush_opts,
                            title_opts=title_opts,
                            xaxis_opts=grid0_xaxis_opts)

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

    ma_keys = [x for x in ma[0].keys() if "ma" in x][:3]
    ma_colors = ["#39afe6", "#da6ee8", "#00940b"]
    for i, k in enumerate(ma_keys):
        y_data = [x[k] for x in ma]
        chart_ma.add_yaxis(series_name=k.upper(),
                           y_axis=y_data,
                           is_smooth=True,
                           is_selected=False,
                           symbol_size=0,
                           label_opts=label_not_show_opts,
                           linestyle_opts=opts.LineStyleOpts(
                               opacity=0.8, width=1.0, color=ma_colors[i]))

    chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                             legend_opts=legend_not_show_opts)
    chart_k = chart_k.overlap(chart_ma)

    # 缠论结果
    # ------------------------------------------------------------------------------------------------------------------
    if fx:
        fx_dts = [x['dt'] for x in fx]
        fx_val = [x['fx'] for x in fx]
        chart_fx = Scatter()
        chart_fx.add_xaxis(fx_dts)
        chart_fx.add_yaxis(series_name="FX",
                           y_axis=fx_val,
                           is_selected=False,
                           symbol="circle",
                           symbol_size=6,
                           label_opts=label_not_show_opts,
                           itemstyle_opts=opts.ItemStyleOpts(
                               color="rgba(152, 147, 193, 1.0)", ))

        chart_fx.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                 legend_opts=legend_not_show_opts)
        chart_k = chart_k.overlap(chart_fx)

    if bi:
        bi_dts = [x['dt'] for x in bi]
        bi_val = [x['bi'] for x in bi]
        chart_bi = Scatter()
        chart_bi.add_xaxis(bi_dts)
        chart_bi.add_yaxis(series_name="BI",
                           y_axis=bi_val,
                           is_selected=True,
                           symbol="diamond",
                           symbol_size=10,
                           label_opts=label_not_show_opts,
                           itemstyle_opts=opts.ItemStyleOpts(
                               color="rgba(184, 117, 225, 1.0)", ))

        chart_bi.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                 legend_opts=legend_not_show_opts)
        chart_k = chart_k.overlap(chart_bi)

    if xd:
        xd_dts = [x['dt'] for x in xd]
        xd_val = [x['xd'] for x in xd]
        chart_xd = Scatter()
        chart_xd.add_xaxis(xd_dts)
        chart_xd.add_yaxis(series_name="XD",
                           y_axis=xd_val,
                           is_selected=True,
                           symbol="triangle",
                           symbol_size=10,
                           itemstyle_opts=opts.ItemStyleOpts(
                               color="rgba(37, 141, 54, 1.0)", ))

        chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                 legend_opts=legend_not_show_opts)
        chart_k = chart_k.overlap(chart_xd)

    if bs:
        b_dts = [x['dt'] for x in bs if x['mark'] == 'buy']
        if len(b_dts) > 0:
            b_val = [x['buy'] for x in bs if x['mark'] == 'buy']
            chart_b = Scatter()
            chart_b.add_xaxis(b_dts)
            chart_b.add_yaxis(series_name="BUY",
                              y_axis=b_val,
                              is_selected=False,
                              symbol="arrow",
                              symbol_size=8,
                              itemstyle_opts=opts.ItemStyleOpts(
                                  color="#f31e1e", ))

            chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                    legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_b)

        s_dts = [x['dt'] for x in bs if x['mark'] == 'sell']
        if len(s_dts) > 0:
            s_val = [x['sell'] for x in bs if x['mark'] == 'sell']
            chart_s = Scatter()
            chart_s.add_xaxis(s_dts)
            chart_s.add_yaxis(series_name="SELL",
                              y_axis=s_val,
                              is_selected=False,
                              symbol="pin",
                              symbol_size=12,
                              itemstyle_opts=opts.ItemStyleOpts(
                                  color="#45b97d", ))

            chart_s.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                    legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_s)

    # 成交量图
    # ------------------------------------------------------------------------------------------------------------------
    chart_vol = Bar()
    chart_vol.add_xaxis(dts)
    chart_vol.add_yaxis(series_name="Volume", y_axis=vol, bar_width='60%')
    chart_vol.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=1,
            axislabel_opts=opts.LabelOpts(is_show=True,
                                          font_size=8,
                                          color="#9b9da9"),
        ),
        yaxis_opts=yaxis_opts,
        legend_opts=legend_not_show_opts,
    )

    # MACD图
    # ------------------------------------------------------------------------------------------------------------------
    chart_macd = Bar()
    chart_macd.add_xaxis(dts)
    chart_macd.add_yaxis(series_name="MACD", y_axis=macd_bar, bar_width='60%')
    chart_macd.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=2,
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            grid_index=2,
            split_number=4,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )

    line = Line()
    line.add_xaxis(dts)
    line.add_yaxis(series_name="DIFF",
                   y_axis=diff,
                   label_opts=label_not_show_opts,
                   is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8,
                                                     width=1.0,
                                                     color="#da6ee8"))
    line.add_yaxis(series_name="DEA",
                   y_axis=dea,
                   label_opts=label_not_show_opts,
                   is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8,
                                                     width=1.0,
                                                     color="#39afe6"))

    chart_macd = chart_macd.overlap(line)

    grid0_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="12%",
                               height="58%")
    grid1_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="74%",
                               height="8%")
    grid2_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="86%",
                               height="10%")

    grid_chart = Grid(init_opts)
    grid_chart.add(chart_k, grid_opts=grid0_opts)
    grid_chart.add(chart_vol, grid_opts=grid1_opts)
    grid_chart.add(chart_macd, grid_opts=grid2_opts)
    return grid_chart
Пример #17
0
def ka_to_echarts(ka: KlineAnalyze, width="1500px", height='800px'):
    # 配置项设置
    # ------------------------------------------------------------------------------------------------------------------
    bg_color = "#1f212d"    # 背景
    up_color = "#F9293E"
    down_color = "#00aa3b"

    init_opts = opts.InitOpts(bg_color=bg_color, width=width, height=height, animation_opts=opts.AnimationOpts(False))
    title_opts = opts.TitleOpts(title="{} - {}".format(ka.symbol, ka.name),
                                subtitle="from {} to {}".format(ka.start_dt, ka.end_dt),
                                pos_top="1%",
                                title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20),
                                subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color, font_size=12))

    label_not_show_opts = opts.LabelOpts(is_show=False)
    legend_not_show_opts = opts.LegendOpts(is_show=False)
    red_item_style = opts.ItemStyleOpts(color=up_color)
    green_item_style = opts.ItemStyleOpts(color=down_color)
    k_style_opts = opts.ItemStyleOpts(color=up_color, color0=down_color, border_color=up_color,
                                      border_color0=down_color, opacity=0.8)

    legend_opts = opts.LegendOpts(is_show=True, pos_top="1%", pos_left="30%", item_width=14, item_height=8,
                                  textstyle_opts=opts.TextStyleOpts(font_size=12, color="#0e99e2"))
    brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"],
                                x_axis_index="all", brush_link="all",
                                out_of_brush={"colorAlpha": 0.1}, brush_type="lineX")

    axis_pointer_opts = opts.AxisPointerOpts(is_show=True, link=[{"xAxisIndex": "all"}])

    dz_inside = opts.DataZoomOpts(False, "inside", xaxis_index=[0, 1, 2])
    dz_slider = opts.DataZoomOpts(True, "slider", xaxis_index=[0, 1, 2], pos_top="96%", pos_bottom="0%")

    yaxis_opts = opts.AxisOpts(is_scale=True, axislabel_opts=opts.LabelOpts(color="#c7c7c7", font_size=8, position="inside"))

    grid0_xaxis_opts = opts.AxisOpts(type_="category", grid_index=0, axislabel_opts=label_not_show_opts,
                                     split_number=20, min_="dataMin", max_="dataMax",
                                     is_scale=True, boundary_gap=False, axisline_opts=opts.AxisLineOpts(is_on_zero=False))

    tool_tip_opts = opts.TooltipOpts(
        trigger="axis",
        axis_pointer_type="cross",
        background_color="rgba(245, 245, 245, 0.8)",
        border_width=1,
        border_color="#ccc",
        position=JsCode("""
                    function (pos, params, el, elRect, size) {
    					var obj = {top: 10};
    					obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
    					return obj;
    				}
                    """),
        textstyle_opts=opts.TextStyleOpts(color="#000"),
    )

    # 数据预处理
    # ------------------------------------------------------------------------------------------------------------------
    dts = [x['dt'] for x in ka.kline_raw]
    k_data = [[x['open'], x['close'], x['low'], x['high']] for x in ka.kline_raw]
    ma = ka.ma

    vol = []
    for row in ka.kline_raw:
        item_style = red_item_style if row['close'] > row['open'] else green_item_style
        bar = opts.BarItem(value=row['vol'], itemstyle_opts=item_style, label_opts=label_not_show_opts)
        vol.append(bar)

    macd = []
    for row in ka.macd:
        item_style = red_item_style if row['macd'] > 0 else green_item_style
        bar = opts.BarItem(value=round(row['macd'], 4), itemstyle_opts=item_style, label_opts=label_not_show_opts)
        macd.append(bar)

    diff = [round(x['diff'], 4) for x in ka.macd]
    dea = [round(x['dea'], 4) for x in ka.macd]

    # K 线主图
    # ------------------------------------------------------------------------------------------------------------------
    chart_k = Kline()
    chart_k.add_xaxis(xaxis_data=dts)
    chart_k.add_yaxis(series_name="Kline", y_axis=k_data, itemstyle_opts=k_style_opts)

    chart_k.set_global_opts(
            legend_opts=legend_opts,
            datazoom_opts=[dz_inside, dz_slider],
            yaxis_opts=yaxis_opts,
            tooltip_opts=tool_tip_opts,
            axispointer_opts=axis_pointer_opts,
            brush_opts=brush_opts,
            title_opts=title_opts,
            xaxis_opts=grid0_xaxis_opts
    )

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

    ma_keys = [x for x in ma[0].keys() if "ma" in x][:3]
    ma_colors = ["#39afe6", "#da6ee8", "#00940b"]
    for i, k in enumerate(ma_keys):
        y_data = [x[k] for x in ma]
        chart_ma.add_yaxis(series_name=k.upper(), y_axis=y_data, is_smooth=True,
                           is_selected=False, symbol_size=0, label_opts=label_not_show_opts,
                           linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color=ma_colors[i]))

    chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
    chart_k = chart_k.overlap(chart_ma)

    # 缠论结果
    # ------------------------------------------------------------------------------------------------------------------
    fx_dts = [x['dt'] for x in ka.fx_list]
    fx_val = [x['fx'] for x in ka.fx_list]
    chart_fx = Scatter()
    chart_fx.add_xaxis(fx_dts)
    chart_fx.add_yaxis(series_name="FX", y_axis=fx_val, is_selected=False,
                       symbol="circle", symbol_size=6, label_opts=label_not_show_opts,
                       itemstyle_opts=opts.ItemStyleOpts(color="rgba(152, 147, 193, 1.0)",))

    chart_fx.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
    chart_k = chart_k.overlap(chart_fx)

    bi_dts = [x['dt'] for x in ka.bi_list]
    bi_val = [x['bi'] for x in ka.bi_list]
    chart_bi = Scatter()
    chart_bi.add_xaxis(bi_dts)
    chart_bi.add_yaxis(series_name="BI", y_axis=bi_val, is_selected=True,
                       symbol="diamond", symbol_size=10, label_opts=label_not_show_opts,
                       itemstyle_opts=opts.ItemStyleOpts(color="rgba(184, 117, 225, 1.0)",))

    chart_bi.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
    chart_k = chart_k.overlap(chart_bi)

    xd_dts = [x['dt'] for x in ka.xd_list]
    xd_val = [x['xd'] for x in ka.xd_list]
    chart_xd = Scatter()
    chart_xd.add_xaxis(xd_dts)
    chart_xd.add_yaxis(series_name="XD", y_axis=xd_val, is_selected=True, symbol="triangle", symbol_size=10,
                       itemstyle_opts=opts.ItemStyleOpts(color="rgba(37, 141, 54, 1.0)",))

    chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
    chart_k = chart_k.overlap(chart_xd)

    # 成交量图
    # ------------------------------------------------------------------------------------------------------------------
    chart_vol = Bar()
    chart_vol.add_xaxis(dts)
    chart_vol.add_yaxis(series_name="Volume", y_axis=vol, bar_width='60%')
    chart_vol.set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=True, font_size=8, color="#9b9da9"),
            ),
            yaxis_opts=yaxis_opts, legend_opts=legend_not_show_opts,
        )

    # MACD图
    # ------------------------------------------------------------------------------------------------------------------
    chart_macd = Bar()
    chart_macd.add_xaxis(dts)
    chart_macd.add_yaxis(series_name="MACD", y_axis=macd, bar_width='60%')
    chart_macd.set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )

    line = Line()
    line.add_xaxis(dts)
    line.add_yaxis(series_name="DIFF", y_axis=diff, label_opts=label_not_show_opts, is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#da6ee8"))
    line.add_yaxis(series_name="DEA", y_axis=dea, label_opts=label_not_show_opts, is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color="#39afe6"))

    chart_macd = chart_macd.overlap(line)

    grid0_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="12%", height="58%")
    grid1_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="74%", height="8%")
    grid2_opts = opts.GridOpts(pos_left="0%", pos_right="1%", pos_top="86%", height="10%")

    grid_chart = Grid(init_opts)
    grid_chart.add(chart_k, grid_opts=grid0_opts)
    grid_chart.add(chart_vol, grid_opts=grid1_opts)
    grid_chart.add(chart_macd, grid_opts=grid2_opts)
    return grid_chart
Пример #18
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
Пример #19
0
# 直方图
import random
import pyecharts.options as opts
from pyecharts.charts import Bar
x_vals = ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
xlen = len(x_vals)

# 设置成两种颜色
y_vals = []
for idx, item in enumerate(x_vals):
    if idx % 2 == 0:
        y_vals.append(
            opts.BarItem(
                name=item,
                value=random.randint(10, 100),
                itemstyle_opts=opts.ItemStyleOpts(color="#749f83"),
            ))
    else:
        y_vals.append(
            opts.BarItem(
                name=item,
                value=random.randint(10, 100),
                itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
            ))

bar_histogram = (
    Bar().add_xaxis(x_vals).add_yaxis('商家A', y_vals, category_gap=0)
    # .add_yaxis('商家A', [random.randint(10, 100) for _ in range(6)], category_gap=0)
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=True, font_size=14)).set_global_opts(
Пример #20
0
 def salary_pie_chart(self):
     """薪酬分布"""
     salary_xaxis = [
         '0', '5000', '10000', '15000', '20000', '30000', '40000', '50000',
         '60000', '70000', '80000', '90000', '100000'
     ]
     salary_yaxis = []
     kd = self.frame.salary.value_counts()
     salary_dict = {
         0: 0,
         5000: 0,
         10000: 0,
         15000: 0,
         20000: 0,
         30000: 0,
         40000: 0,
         50000: 0,
         60000: 0,
         70000: 0,
         80000: 0,
         90000: 0,
         100000: 0
     }
     for k, v in dict(kd).items():
         min_salary = float(
             k.split('-')[0].split('·')[0].replace(
                 '以上', '').rstrip('k').rstrip('K')) * 1000
         try:
             max_salary = float(
                 k.split('-')[1].split('·')[0].replace(
                     '以上', '').rstrip('k').rstrip('K')) * 1000
         except:
             max_salary = min_salary
         salary = 0.5 * (min_salary + max_salary)
         if salary in range(0, 5000): salary = 0
         if salary in range(5000, 10000): salary = 5000
         if salary in range(10000, 15000): salary = 10000
         if salary in range(15000, 20000): salary = 15000
         if salary in range(20000, 30000): salary = 20000
         if salary in range(30000, 40000): salary = 30000
         if salary in range(40000, 50000): salary = 40000
         if salary in range(50000, 60000): salary = 50000
         if salary in range(60000, 70000): salary = 60000
         if salary in range(70000, 80000): salary = 70000
         if salary in range(80000, 90000): salary = 80000
         if salary in range(90000, 100000): salary = 90000
         if salary in range(100000, 10000000000): salary = 100000
         if salary_dict.get(salary, ''):
             salary_dict[salary] = salary_dict[salary] + v
         else:
             salary_dict[salary] = v
     salary_dict = dict(collections.OrderedDict(sorted(
         salary_dict.items())))
     for salary_key, salary_value in salary_dict.items():
         salary_yaxis.append(
             opts.BarItem(
                 name=str(salary_key),
                 value=int(salary_value),
                 itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
             ))
     html_path = os.path.join(
         create_or_get_directory(os.path.join('report', 'single')),
         'salary_pie_chart.html')
     c = (Bar(init_opts=opts.InitOpts(
         width="60%")).add_xaxis(salary_xaxis).add_yaxis(
             "", salary_yaxis, category_gap=-1).set_series_opts(
                 label_opts=opts.LabelOpts(is_show=False)).set_global_opts(
                     yaxis_opts=opts.AxisOpts(
                         name="岗位数量",
                         axislabel_opts=opts.LabelOpts(color='red'),
                         name_textstyle_opts=opts.TextStyleOpts(
                             color='#d48265')),
                     xaxis_opts=opts.AxisOpts(
                         name="薪酬",
                         axislabel_opts=opts.LabelOpts(color='red'),
                         name_textstyle_opts=opts.TextStyleOpts(
                             color='#d48265')),
                     tooltip_opts=opts.TooltipOpts(
                         trigger="item",
                         formatter=JsCode("""function (params) {
                                             var name='';
                                             if (params.name < 5000){
                                                 name='小于5K'
                                             }
                                             else if (params.name < 10000) {
                                                 name='5K-10K'
                                             }
                                             else if (params.name < 15000) {
                                                 name='10K-15K'
                                             }
                                             else if (params.name < 20000) {
                                                 name='15K-20K'
                                             }
                                             else if (params.name < 30000) {
                                                 name='20K-30K'
                                             }
                                             else if (params.name < 40000) {
                                                 name='30K-40K'
                                             }
                                             else if (params.name < 50000) {
                                                 name='40K-50K'
                                             }
                                             else if (params.name < 60000) {
                                                 name='50K-60K'
                                             }
                                             else if (params.name < 70000) {
                                                 name='60K-70K'
                                             }
                                             else if (params.name < 80000) {
                                                 name='70K-80K'
                                             }
                                             else if (params.name < 90000) {
                                                 name='80K-90K'
                                             }
                                             else if (params.name < 100000) {
                                                 name='90K-100K'
                                             }
                                             else {
                                                 name='大于100K'
                                             }
                                             return name+':'+params.value;
                                             }
                                         """)),
                 ).render(html_path))
     script_string = self.get_javascript_string(html_path)
     self.set_report_javascript(script_string, 'salary_pie_chart')
     self.middle_charts.append({
         'title': '薪资分布',
         'name': 'salary_pie_chart'
     })
Пример #21
0
)
# map.render('全球温度地图.html')
print("全球温度地图已生成!!")

# 绘制最高温度前十位国家的平均温度情况(条形图)
# print(top_ten_country)
country = [x[0] for x in top_ten_country]  # 前十个国家
temperature = [x[1] for x in top_ten_country]  # 前十个国家对应温度

x = []  # 空列表存温度
color_series = randomcolor(len(country))
for i in range(10):
    x.append(
        opts.BarItem(
            name=country[i],
            value=round(temperature[i], 2),
            itemstyle_opts=opts.ItemStyleOpts(
                color=color_series[i])  # 设置每根柱子的颜色
        ))
    # 绘制柱形图
bar = Bar()
bar.add_xaxis(country)
bar.add_yaxis(series_name='温度',
              y_axis=x,
              is_selected=True,
              label_opts=opts.LabelOpts(is_show=True))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position='right'))
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="排行榜前十名温度最高国家"),
    tooltip_opts=opts.TooltipOpts(is_show=True,
                                  trigger="axis",
                                  axis_pointer_type="shadow"),
Пример #22
0
def to_grid(ka,
              kline_mode: str = "new",
              with_bi: bool = False,
              with_xd: bool = False,
              with_zs: bool = False,
              with_bs: bool = False,
              with_ma: bool = False,
              with_vol: bool = False,
              with_macd: bool = False,
              title: str = "ChanLun In Practise",
              width: str = "1440px",
              height: str = '900px') -> Grid:
    """绘制缠中说禅K线分析结果
    :param kline: K线 new / raw,new标识标准化后的k线,raw标识原始k线
    :param with_bi: 是否显示笔识别结果,默认True,不输出False
    :param with_xd: 是否显示线段识别结果
    :param with_zs: 是否显示中枢识别结果
    :param with_bs: 是否显示买卖点
    :param with_ma: 是否显示均线,默认True,不输出False
    :param with_macd: 是否显示macd,默认True,不输出False
    :param with_vol: 是否显示成交量,默认True,不输出False
    :param title: 图表标题
    :param width: 图表宽度
    :param height: 图表高度
    :return: 用Grid组合好的图表
    """
    
    # 配置项设置
    # ------------------------------------------------------------------------------------------------------------------
    bg_color = "#1f212d"    # 背景
    up_color = "#F9293E"
    down_color = "#00aa3b"

    init_opts = opts.InitOpts(bg_color=bg_color, width='1400px', height='800px')
    title_opts = opts.TitleOpts(title=title, pos_top="1%",
                                title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20),
                                subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color, font_size=12))

    label_not_show_opts = opts.LabelOpts(is_show=False)
    legend_not_show_opts = opts.LegendOpts(is_show=False)
    red_item_style = opts.ItemStyleOpts(color=up_color)
    green_item_style = opts.ItemStyleOpts(color=down_color)
    k_style_opts = opts.ItemStyleOpts(color=up_color, color0=down_color, border_color=up_color,
                                      border_color0=down_color, opacity=0.8)

    legend_opts = opts.LegendOpts(is_show=True, pos_top="1%", pos_left="30%", item_width=14, item_height=8,
                                  textstyle_opts=opts.TextStyleOpts(font_size=12, color="#0e99e2"))
    brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"],
                                x_axis_index="all", brush_link="all",
                                out_of_brush={"colorAlpha": 0.1}, brush_type="lineX")

    axis_pointer_opts = opts.AxisPointerOpts(is_show=True, link=[{"xAxisIndex": "all"}])

    dz_inside = opts.DataZoomOpts(False, "inside", xaxis_index=[0, 1, 2])
    dz_slider = opts.DataZoomOpts(True, "slider", xaxis_index=[0, 1, 2], pos_top="96%", pos_bottom="0%")

    yaxis_opts = opts.AxisOpts(is_scale=True, axislabel_opts=opts.LabelOpts(color="#c7c7c7", font_size=8, position="inside"))

    grid0_xaxis_opts = opts.AxisOpts(type_="category", grid_index=0, axislabel_opts=label_not_show_opts,
                                     split_number=20, min_="dataMin", max_="dataMax",
                                     is_scale=True, boundary_gap=False, axisline_opts=opts.AxisLineOpts(is_on_zero=False))

    tool_tip_opts = opts.TooltipOpts(
        trigger="axis",
        axis_pointer_type="cross",
        background_color="rgba(245, 245, 245, 0.8)",
        border_width=1,
        border_color="#ccc",
        textstyle_opts=opts.TextStyleOpts(color="#000"),
    )


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

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

    chart_k.set_global_opts(
            legend_opts=legend_opts,
            datazoom_opts=[dz_inside, dz_slider],
            yaxis_opts=yaxis_opts,
            tooltip_opts=tool_tip_opts,
            axispointer_opts=axis_pointer_opts,
            brush_opts=brush_opts,
            title_opts=title_opts,
            xaxis_opts=grid0_xaxis_opts,
    )

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

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

        for key, vals in agg_dict.items():
            for i, k in enumerate(ma_keys):
                y_data = [x[k] if k in x else None for x in v['ma']]
                chart_ma.add_yaxis(series_name=key if aggregation else k.upper(), y_axis=y_data, is_smooth=True,
                                is_selected=True, is_connect_nones=True, symbol_size=0, label_opts=label_not_show_opts,
                                linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=1.0, color=ma_colors[i]))

        chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
        chart_k = chart_k.overlap(chart_ma)

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

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

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

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

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

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

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

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

                chart_b = EffectScatter()

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

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

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

    chart_vol.set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=True, font_size=8, color="#9b9da9"),
            ),
            yaxis_opts=yaxis_opts, legend_opts=legend_not_show_opts,
        )

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

        chart_macd.add_yaxis(series_name=k if aggregation else "MACD", y_axis=macd_bar, bar_width='60%')

    chart_macd.set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )


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

    chart_macd = chart_macd.overlap(line)
    
    grid0_opts = opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="12%", height="58%")
    grid1_opts = opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="74%", height="8%")
    grid2_opts = opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="86%", height="10%")
    grid_chart = Grid(init_opts)
    grid_chart.add(chart_k, grid_opts=grid0_opts)
    grid_chart.add(chart_vol, grid_opts=grid1_opts)    
    grid_chart.add(chart_macd, grid_opts=grid2_opts)
    return grid_chart
Пример #23
0
area = [x[0] for x in area_count]
nums = [y[1] for y in area_count]
# 使用风格
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
colors = [
    'red', '#0000CD', '#000000', '#008000', '#FF1493', '#FFD700', '#FF4500',
    '#00FA9A', '#191970', '#9932CC'
]
random.shuffle(colors)
# 配置y轴数据  Baritem
y = []
for i in range(10):
    y.append(
        opts.BarItem(
            name=area[i],
            value=nums[i],
            itemstyle_opts=opts.ItemStyleOpts(color=colors[i])  # 设置每根柱子的颜色
        ))
bar.add_xaxis(xaxis_data=area)
bar.add_yaxis("上榜美女数", y)
bar.set_global_opts(
    xaxis_opts=opts.AxisOpts(name='国家',
                             axislabel_opts=opts.LabelOpts(rotate=45)),
    yaxis_opts=opts.AxisOpts(
        name='上榜美女数',
        min_=0,
        max_=55,  # y轴刻度的最小值 最大值
    ),
    title_opts=opts.TitleOpts(title="各地区上榜美女数",
                              title_textstyle_opts=opts.TextStyleOpts(
                                  font_family="KaiTi",
Пример #24
0
def kline_pro(kline: List[dict],
              fx: List[dict] = None,
              xd=None,
              bs: List[dict] = None,
              title: str = "缠中说禅K线分析",
              width: str = "1400px",
              height: str = '580px') -> Grid:
    """绘制缠中说禅K线分析结果

    :param kline: K线
    :param fx: 分型识别结果
    :param bi: 笔识别结果
    :param xd: 线段识别结果
    :param zs: 中枢
    :param bs: 买卖点
    :param title: 图表标题
    :param width: 图表宽度
    :param height: 图表高度
    :return: 用Grid组合好的图表
    """
    # 配置项设置
    # ------------------------------------------------------------------------------------------------------------------
    bg_color = "#1f212d"  # 背景
    up_color = "#F9293E"
    down_color = "#00aa3b"

    init_opts = opts.InitOpts(bg_color=bg_color,
                              width=width,
                              height=height,
                              animation_opts=opts.AnimationOpts(False))
    title_opts = opts.TitleOpts(
        title=title,
        pos_top="1%",
        title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20),
        subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color,
                                                   font_size=12))

    label_not_show_opts = opts.LabelOpts(is_show=False)
    legend_not_show_opts = opts.LegendOpts(is_show=False)
    red_item_style = opts.ItemStyleOpts(color=up_color)
    green_item_style = opts.ItemStyleOpts(color=down_color)
    k_style_opts = opts.ItemStyleOpts(color=up_color,
                                      color0=down_color,
                                      border_color=up_color,
                                      border_color0=down_color,
                                      opacity=0.8)

    legend_opts = opts.LegendOpts(is_show=True,
                                  pos_top="1%",
                                  pos_left="30%",
                                  item_width=14,
                                  item_height=8,
                                  textstyle_opts=opts.TextStyleOpts(
                                      font_size=12, color="#0e99e2"))
    brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"],
                                x_axis_index="all",
                                brush_link="all",
                                out_of_brush={"colorAlpha": 0.1},
                                brush_type="lineX")

    axis_pointer_opts = opts.AxisPointerOpts(is_show=True,
                                             link=[{
                                                 "xAxisIndex": "all"
                                             }])

    range_start = int(100 - 216 / len(kline) * 100)
    dz_inside = opts.DataZoomOpts(False,
                                  "inside",
                                  xaxis_index=[0, 1, 2],
                                  range_start=range_start,
                                  range_end=100)
    dz_slider = opts.DataZoomOpts(True,
                                  "slider",
                                  xaxis_index=[0, 1, 2],
                                  pos_top="96%",
                                  pos_bottom="0%",
                                  range_start=range_start,
                                  range_end=100)

    yaxis_opts = opts.AxisOpts(is_scale=True,
                               axislabel_opts=opts.LabelOpts(
                                   color="#c7c7c7",
                                   font_size=8,
                                   position="inside"))

    grid0_xaxis_opts = opts.AxisOpts(
        type_="category",
        grid_index=0,
        axislabel_opts=label_not_show_opts,
        split_number=20,
        min_="dataMin",
        max_="dataMax",
        is_scale=True,
        boundary_gap=False,
        axisline_opts=opts.AxisLineOpts(is_on_zero=False))

    tool_tip_opts = opts.TooltipOpts(
        trigger="axis",
        axis_pointer_type="cross",
        background_color="rgba(245, 245, 245, 0.8)",
        border_width=1,
        border_color="#ccc",
        position=JsCode("""
                    function (pos, params, el, elRect, size) {
    					var obj = {top: 10};
    					obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
    					return obj;
    				}
                    """),
        textstyle_opts=opts.TextStyleOpts(color="#000"),
    )

    # 数据预处理
    # ------------------------------------------------------------------------------------------------------------------
    # dts = [x.get('dt', x['date']) for x in kline]
    try:
        dts = [x['date'] for x in kline]
    except:
        dts = [x['dt'] for x in kline]
    # k_data = [[x['open'], x['close'], x['low'], x['high']] for x in kline]
    k_data = [
        opts.CandleStickItem(
            name=i, value=[x['open'], x['close'], x['low'], x['high']])
        for i, x in enumerate(kline)
    ]

    vol = []
    for i, row in enumerate(kline):
        item_style = red_item_style if row['close'] > row[
            'open'] else green_item_style
        bar = opts.BarItem(name=i,
                           value=row['volume'],
                           itemstyle_opts=item_style,
                           label_opts=label_not_show_opts)
        vol.append(bar)

    close = np.array([x['close'] for x in kline], dtype=np.double)
    diff, dea, macd = MACD(close)

    ma5 = SMA(close, timeperiod=5)
    ma34 = SMA(close, timeperiod=34)
    ma55 = SMA(close, timeperiod=55)
    ma233 = SMA(close, timeperiod=233)

    macd_bar = []
    for i, v in enumerate(macd.tolist()):
        item_style = red_item_style if v > 0 else green_item_style
        bar = opts.BarItem(name=i,
                           value=round(v, 4),
                           itemstyle_opts=item_style,
                           label_opts=label_not_show_opts)
        macd_bar.append(bar)

    diff = diff.round(4)
    dea = dea.round(4)

    # K 线主图
    # ------------------------------------------------------------------------------------------------------------------
    chart_k = Kline()
    chart_k.add_xaxis(xaxis_data=dts)
    chart_k.add_yaxis(series_name="Kline",
                      y_axis=k_data,
                      itemstyle_opts=k_style_opts)

    chart_k.set_global_opts(legend_opts=legend_opts,
                            datazoom_opts=[dz_inside, dz_slider],
                            yaxis_opts=yaxis_opts,
                            tooltip_opts=tool_tip_opts,
                            axispointer_opts=axis_pointer_opts,
                            brush_opts=brush_opts,
                            title_opts=title_opts,
                            xaxis_opts=grid0_xaxis_opts)

    if xd:
        index = 0
        zs_colors = [
            "yellow", "white", '#f034c1', "#7944b7", "#468b58", "#c17f2f",
            "#9EA0A1"
        ]
        data = []
        temp_xd = xd
        while temp_xd:
            zs_color = zs_colors[index % len(zs_colors)]
            data = data + [
                opts.MarkAreaItem(
                    name='XD{}'.format(index),
                    x=(x['xd_list'][0]['date'], x['xd_list'][-1]['date']),
                    y=(x['ZG']['value'], x['ZD']['value']),
                    label_opts=opts.LabelOpts(color=zs_color),
                    itemstyle_opts=opts.ItemStyleOpts(
                        color=zs_color,
                        opacity=0.2,
                    )) for x in temp_xd.zs_list
            ]
            temp_xd = temp_xd.next
            index = index + 1

        chart_k.set_series_opts(
            markarea_opts=opts.MarkAreaOpts(is_silent=True, data=data))

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

    ma_keys = {"MA5": ma5, "MA34": ma34, "MA55": ma55, "MA233": ma233}
    ma_colors = ["#39afe6", "#da6ee8", "#A02128", "#00940b"]
    for i, (name, ma) in enumerate(ma_keys.items()):
        chart_ma.add_yaxis(series_name=name,
                           y_axis=ma,
                           is_smooth=True,
                           is_selected=False,
                           symbol_size=0,
                           label_opts=label_not_show_opts,
                           linestyle_opts=opts.LineStyleOpts(
                               opacity=0.8, width=1.0, color=ma_colors[i]))

    chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                             legend_opts=legend_not_show_opts)
    chart_k = chart_k.overlap(chart_ma)

    # 缠论结果
    # ------------------------------------------------------------------------------------------------------------------
    if fx:
        try:
            fx_dts = [x['date'] for x in fx]
        except:
            fx_dts = [x['dt'] for x in fx]

        fx_val = [x['value'] for x in fx]
        chart_fx = Scatter()
        chart_fx.add_xaxis(fx_dts)
        chart_fx.add_yaxis(series_name="FX",
                           y_axis=fx_val,
                           is_selected=False,
                           symbol="circle",
                           symbol_size=6,
                           label_opts=label_not_show_opts,
                           itemstyle_opts=opts.ItemStyleOpts(
                               color="rgba(152, 147, 193, 1.0)", ))

        chart_fx.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                 legend_opts=legend_not_show_opts)
        chart_k = chart_k.overlap(chart_fx)

    if xd:
        index = 0
        xd_colors = zs_colors
        while xd:
            xd_dts = [x['date'] for x in xd]
            xd_val = [x['value'] for x in xd]

            chart_xd = Line()
            chart_xd.add_xaxis(xd_dts)

            xd_color = xd_colors[index % len(xd_colors)]
            chart_xd.add_yaxis(
                series_name="XD{}".format(index),
                y_axis=xd_val,
                is_selected=True,
                symbol="triangle",
                symbol_size=10,
                linestyle_opts=opts.LineStyleOpts(color=xd_color,
                                                  width=index + 1,
                                                  type_="solid"),
                itemstyle_opts=opts.ItemStyleOpts(color=xd_color))

            chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                     legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_xd)
            xd = xd.next
            index = index + 1

    if bs:
        b_dts = [x['date'] for x in bs if x['bs'] == 'buy']
        if len(b_dts) > 0:
            b_val = [x['value'] for x in bs if x['bs'] == 'buy']
            chart_b = Scatter()
            chart_b.add_xaxis(b_dts)
            chart_b.add_yaxis(series_name="BUY",
                              y_axis=b_val,
                              is_selected=False,
                              symbol="arrow",
                              symbol_size=8,
                              itemstyle_opts=opts.ItemStyleOpts(
                                  color="#f31e1e", ))

            chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                    legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_b)

        s_dts = [x['date'] for x in bs if x['bs'] == 'sell']
        if len(s_dts) > 0:
            s_val = [x['value'] for x in bs if x['bs'] == 'sell']
            chart_s = Scatter()
            chart_s.add_xaxis(s_dts)
            chart_s.add_yaxis(series_name="SELL",
                              y_axis=s_val,
                              is_selected=False,
                              symbol="pin",
                              symbol_size=12,
                              itemstyle_opts=opts.ItemStyleOpts(
                                  color="#45b97d", ))

            chart_s.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                    legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_s)

    # 成交量图
    # ------------------------------------------------------------------------------------------------------------------
    chart_vol = Bar()
    chart_vol.add_xaxis(dts)
    chart_vol.add_yaxis(series_name="Volume", y_axis=vol, bar_width='60%')
    chart_vol.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=1,
            axislabel_opts=opts.LabelOpts(is_show=True,
                                          font_size=8,
                                          color="#9b9da9"),
        ),
        yaxis_opts=yaxis_opts,
        legend_opts=legend_not_show_opts,
    )

    # MACD图
    # ------------------------------------------------------------------------------------------------------------------
    chart_macd = Bar()
    chart_macd.add_xaxis(dts)
    chart_macd.add_yaxis(series_name="MACD", y_axis=macd_bar, bar_width='60%')
    chart_macd.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=2,
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            grid_index=2,
            split_number=4,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )

    line = Line()
    line.add_xaxis(dts)
    line.add_yaxis(series_name="DIFF",
                   y_axis=diff,
                   label_opts=label_not_show_opts,
                   is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8,
                                                     width=1.0,
                                                     color="#da6ee8"))
    line.add_yaxis(series_name="DEA",
                   y_axis=dea,
                   label_opts=label_not_show_opts,
                   is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8,
                                                     width=1.0,
                                                     color="#39afe6"))

    chart_macd = chart_macd.overlap(line)

    grid0_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="12%",
                               height="58%")
    grid1_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="74%",
                               height="8%")
    grid2_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="86%",
                               height="10%")

    grid_chart = Grid(init_opts)
    grid_chart.add(chart_k, grid_opts=grid0_opts)
    grid_chart.add(chart_vol, grid_opts=grid1_opts)
    grid_chart.add(chart_macd, grid_opts=grid2_opts)
    return grid_chart
Пример #25
0
# -*- coding:utf-8 -*-

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

x = Faker.dogs + Faker.animal
xlen = len(x)
y = []
for idx, item in enumerate(x):
    if idx <= xlen / 2:
        y.append(
            opts.BarItem(
                name=item,
                value=(idx + 1) * 10,
                itemstyle_opts=opts.ItemStyleOpts(color="#749f83"),
            ))
    else:
        y.append(
            opts.BarItem(
                name=item,
                value=(xlen + 1 - idx) * 10,
                itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
            ))

c = (
    Bar().add_xaxis(x)
    #category_gap: 同一系列的柱间距离,默认为类目间距的 20%,可设固定值
    .add_yaxis(
        "series0", y, category_gap=0,
        color=Faker.rand_color()).set_global_opts(title_opts=opts.TitleOpts(