Пример #1
0
pol_den = confirm_detail.sort_values(by="density", ascending=False)

x_data = pol_den["Region_CN"].tolist()
y_data = pol_den["四月"].tolist()
x_data.pop()
x_data.pop()
y_data.pop()
y_data.pop()

polDensity_line = (Line(init_opts=opts.InitOpts(
    width='95vw',
    height='95vh',
)).set_global_opts(
    tooltip_opts=opts.TooltipOpts(is_show=False),
    title_opts=opts.TitleOpts(title="人口密度——确诊人数折线图"),
    xaxis_opts=opts.AxisOpts(type_="category",
                             name="人/km²(大~小)",
                             axislabel_opts={"rotate": 45}),
    yaxis_opts=opts.AxisOpts(
        type_="value",
        name="确诊人数",
        axistick_opts=opts.AxisTickOpts(is_show=True),
        splitline_opts=opts.SplitLineOpts(is_show=True),
    ),
).add_xaxis(xaxis_data=x_data).add_yaxis(
    series_name="",
    y_axis=y_data,
    symbol="emptyCircle",
    is_symbol_show=True,
    label_opts=opts.LabelOpts(is_show=True),
).render("visual_render/basic_line_chart1.html"))
Пример #2
0
def vtradecost(self,
               cftable,
               unitcost=False,
               start=None,
               end=yesterdayobj(),
               rendered=True):
    """
    visualization giving the average cost line together with netvalue line as well as buy and sell points

    :returns: pyecharts.line
    """
    funddata = []
    costdata = []
    cashdata = []  #kahar add in order to observe the sum of the cash
    funddata_test = []
    pprice = self.price[self.price["date"] <= end]
    pcftable = 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"])
        funddata_test.append(3.2)
        if unitcost:
            cost = 0
            cash = 0
            if (date - self.cftable.iloc[0].date).days >= 0:
                cost = self.unitcost(date)
                cash = self.get_datecashvalue(date)
            costdata.append(cost)
            cashdata.append(cash / 1000000.0)
    coords = []
    # pcftable = pcftable[abs(pcftable["cash"]) > threhold]
    for i, r in pcftable.iterrows():
        coords.append(
            [r.date, pprice[pprice["date"] <= r.date].iloc[-1]["netvalue"]])

    upper = pcftable.cash.abs().max()
    lower = pcftable.cash.abs().min()
    if upper == lower:
        upper = 2 * lower + 1  # avoid zero in denominator

    def marker_factory(x, y):
        buy = pcftable[pcftable["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])
    print("costdata", costdata)
    if unitcost:
        line.add_yaxis(
            series_name="持仓成本",
            y_axis=costdata,
            is_symbol_show=False,
        )

    line.add_yaxis(
        series_name="持仓总额k6",
        y_axis=cashdata,
        is_symbol_show=False,
    )

    line.add_yaxis(
        series_name="基金净值",
        y_axis=funddata,
        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
Пример #3
0
暂无
"""


(
    Line(init_opts=opts.InitOpts(width="1280px", height="720px"))
    .add_xaxis(xaxis_data=["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"])
    .add_yaxis(
        series_name="",
        y_axis=[120, 200, 150, 80, 70, 110, 130],
        symbol="triangle",
        symbol_size=20,
        linestyle_opts=opts.LineStyleOpts(color="green", width=4, type_="dashed"),
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(
            border_width=3, border_color="yellow", color="blue"
        ),
    )
    .set_global_opts(
        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),
        ),
        tooltip_opts=opts.TooltipOpts(is_show=False),
    )
    .render("line_style_and_item_style.html")
)
Пример #4
0
data = df.loc[df['City'] == 'Delhi', ['Date', 'AQI']]

list1 = []
for date in data['Date']:
    year = date.split('-')[0]
    list1.append(year)
data['year'] = list1
year_message = data.groupby(['year'])
year_com = year_message['AQI'].agg(['mean'])
year_com.reset_index(inplace=True)
year_com_last = year_com.sort_index()

x = [e for e in year_com_last['year']]
y = [int(e) for e in year_com_last['mean']]

line = Line()
line.add_xaxis(x)
line.add_yaxis('Delhi', y)

line.set_series_opts(
    markpoint_opts=opts.MarkPointOpts(data=[
        opts.MarkPointItem(type_='max', name='最大值'),
        opts.MarkPointItem(type_='min', name='最小值'),
    ]),
    label_opts=opts.LabelOpts(is_show=False),
)

line.set_global_opts(title_opts=opts.TitleOpts(
    title='2015-2020印度德里AQI年均走势图',
    pos_left='center',
),
Пример #5
0
def bar_difficult() -> Bar:
    f = open('difficulty_test3.json', encoding='gbk')
    res = f.read()
    data = json.loads(res)

    simple = [0 for i in range(8)]
    medium = [0 for i in range(8)]
    hard = [0 for i in range(8)]
    total = [0 for i in range(8)]
    nums = [0 for i in range(8)]

    level_distributed = {"0-10": 0, "11-20": 0, "21-30": 0, "31-40": 0, "41-50": 0, "51-60": 0, "61-70": 0, "71-80": 0,
                         "81-90": 0, "91-100": 0}
    # 观察难度情况
    for val in data.values():
        if val["final_level"] <= 10:
            level_distributed["0-10"] += 1
        elif 10 < val["final_level"] <= 20:
            level_distributed["11-20"] += 1
        elif 20 < val["final_level"] <= 30:
            level_distributed["21-30"] += 1
        elif 30 < val["final_level"] <= 40:
            level_distributed["31-40"] += 1
        elif 40 < val["final_level"] <= 50:
            level_distributed["41-50"] += 1
        elif 50 < val["final_level"] <= 60:
            level_distributed["51-60"] += 1
        elif 60 < val["final_level"] <= 70:
            level_distributed["61-70"] += 1
        elif 70 < val["final_level"] <= 80:
            level_distributed["71-80"] += 1
        elif 80 < val["final_level"] <= 90:
            level_distributed["81-90"] += 1
        else:
            level_distributed["91-100"] += 1
    print(level_distributed)

    # 对数据进行分类
    for val in data.values():
        if val["case_type"] == "字符串":
            nums[0] += 1
            total[0] += val["final_level"]
            if val["final_level"] <= 30:
                simple[0] += 1
            elif val["final_level"] > 60:
                hard[0] += 1
            else:
                medium[0] += 1
        elif val["case_type"] == "线性表":
            nums[1] += 1
            total[1] += val["final_level"]
            if val["final_level"] <= 30:
                simple[1] += 1
            elif val["final_level"] > 60:
                hard[1] += 1
            else:
                medium[1] += 1
        elif val["case_type"] == "数组":
            nums[2] += 1
            total[2] += val["final_level"]
            if val["final_level"] <= 30:
                simple[2] += 1
            elif val["final_level"] > 60:
                hard[2] += 1
            else:
                medium[2] += 1
        elif val["case_type"] == "查找算法":
            nums[3] += 1
            total[3] += val["final_level"]
            if val["final_level"] <= 30:
                simple[3] += 1
            elif val["final_level"] > 60:
                hard[3] += 1
            else:
                medium[3] += 1
        elif val["case_type"] == "排序算法":
            nums[4] += 1
            total[4] += val["final_level"]
            if val["final_level"] <= 30:
                simple[4] += 1
            elif val["final_level"] > 60:
                hard[4] += 1
            else:
                medium[4] += 1
        elif val["case_type"] == "数字操作":
            nums[5] += 1
            total[5] += val["final_level"]
            if val["final_level"] <= 30:
                simple[5] += 1
            elif val["final_level"] > 60:
                hard[5] += 1
            else:
                medium[5] += 1
        elif val["case_type"] == "图结构":
            nums[6] += 1
            total[6] += val["final_level"]
            if val["final_level"] <= 30:
                simple[6] += 1
            elif val["final_level"] > 60:
                hard[6] += 1
            else:
                medium[6] += 1
        else:
            nums[7] += 1
            total[7] += val["final_level"]
            if val["final_level"] <= 30:
                simple[7] += 1
            elif val["final_level"] > 60:
                hard[7] += 1
            else:
                medium[7] += 1

    list1 = [{"value": hard[i], "percent": hard[i] / nums[i]} for i in range(8)]
    list2 = [{"value": medium[i], "percent": medium[i] / nums[i]} for i in range(8)]
    list3 = [{"value": simple[i], "percent": simple[i] / nums[i]} for i in range(8)]
    average = [round(total[i] / nums[i], 2) for i in range(8)]

    xaxis = ["字符串", "线性表", "数组", "查找算法", "排序算法", "数字操作", "图结构", "树结构"]
    bar = (
        Bar()
            .add_xaxis(xaxis)
            .add_yaxis("困难", list1, stack="stack1", category_gap="50%")
            .add_yaxis("中等", list2, stack="stack1", category_gap="50%")
            .add_yaxis("简单", list3, stack="stack1", category_gap="50%")
            .extend_axis(
            yaxis=opts.AxisOpts(
                name="难度评分",
                type_="value",
                min_=0,
                max_=100,
                interval=10,
                axislabel_opts=opts.LabelOpts(formatter="{value} 分"),
            )
        )
            .set_global_opts(
            title_opts=opts.TitleOpts(title="不同类别题目难度展示图"),
            toolbox_opts=opts.ToolboxOpts(),
            tooltip_opts=opts.TooltipOpts(
                is_show=True, trigger="axis", axis_pointer_type="cross"
            ),
            legend_opts=opts.LegendOpts(is_show=True),

            # 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} 个"),
                axistick_opts=opts.AxisTickOpts(is_show=True),
                splitline_opts=opts.SplitLineOpts(is_show=True),
            ),
        )
            .set_series_opts(
            label_opts=opts.LabelOpts(
                position="right",
                formatter=JsCode(
                    "function(x){return Number(x.data.percent * 100).toFixed() + '%';}"
                ),
            )
        )
        # .render("diff_type_diff_bar.html")
    )
    line = (
        Line()
            .add_xaxis(xaxis_data=xaxis)
            .add_yaxis(
            series_name="平均难度分",
            yaxis_index=1,
            y_axis=average,
            label_opts=opts.LabelOpts(is_show=False),
            linestyle_opts=opts.LineStyleOpts(color="#f05b72", width=2, opacity=0.8)
        )
    )
    return bar.overlap(line)
Пример #6
0
def daily_issue_plot(daily,cummulative):
    import pyecharts.options as opts
    from pyecharts.charts import Bar, Line

    # color = ["#36648B","tomato"]

    daily = daily.round(2)
    cummulative = cummulative.round(2)

    x_data = daily.index.astype(str).tolist()

    bar = (
        Bar(init_opts=opts.InitOpts(width=fig_width, height=fig_height))
            .add_xaxis(xaxis_data=x_data)
            .add_yaxis(
            series_name="每日发行数量",
            yaxis_index=2,
            yaxis_data=daily['发行数量'].tolist(),
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="每日发行总额",
            yaxis_index=3,
            yaxis_data=daily['发行总额'].tolist(),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .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}"),
                axistick_opts=opts.AxisTickOpts(is_show=True),
                splitline_opts=opts.SplitLineOpts(is_show=True),
            ),
            toolbox_opts=opts.ToolboxOpts(is_show=True,
                                          feature=opts.ToolBoxFeatureOpts(
                                              save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                                                  background_color='white',
                                                  connected_background_color="white",
                                                  pixel_ratio=pixel_ratio,
                                                  name="pic",
                                              ),
                                          )
                                          )
        )
    )

    line = (
        Line(init_opts=opts.InitOpts(width=fig_width, height=fig_height))
            .add_xaxis(xaxis_data=x_data)
            .add_yaxis(
            series_name="累计发行数量",
            yaxis_index=0,
            y_axis=cummulative['累计发行数量'].tolist(),
            label_opts=opts.LabelOpts(is_show=False),

            is_smooth=True,
            is_symbol_show=True,
            symbol="circle",
            symbol_size=6,
            linestyle_opts=opts.LineStyleOpts(width=2),

        ).add_yaxis(
            series_name="累计发行总额",
            yaxis_index=1,
            is_smooth=True,
            is_symbol_show=True,
            symbol="circle",
            symbol_size=6,
            linestyle_opts=opts.LineStyleOpts(width=2),

            y_axis=cummulative['累计发行总额'].tolist(),
            label_opts=opts.LegendOpts(is_show=False),
        )
            .extend_axis(yaxis=opts.AxisOpts(
            name= "总额",
            type_="value",
            position='right',
            offset=60,
            axislabel_opts=opts.LabelOpts(formatter="{value}亿",position="right"),

        ),).extend_axis(
            yaxis=opts.AxisOpts(
                name="数量",
                type_="value",
                position="left",
                offset=0,
                axislabel_opts=opts.LabelOpts(formatter="{value}"),
            )
        )
            .extend_axis(
            yaxis=opts.AxisOpts(
                name="总额",
                type_="value",
                position="left",
                offset=60,
                axislabel_opts=opts.LabelOpts(formatter="{value}亿"),
            )
        )

        .set_global_opts(
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
            xaxis_opts=opts.AxisOpts(
                splitline_opts=opts.SplitLineOpts(
                    is_show=True, linestyle_opts=opts.LineStyleOpts(color="#E8E8E8")
                ),
            ),
            yaxis_opts=opts.AxisOpts(
                name = "数量",
                type_="value",
                position="right",
                offset=0,
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(width=1)
                ),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True, linestyle_opts=opts.LineStyleOpts(color='#E8E8E8')
                ),
            ),
            toolbox_opts=opts.ToolboxOpts(is_show=True,
                                          feature=opts.ToolBoxFeatureOpts(
                                              save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(
                                                  background_color='white',
                                                  connected_background_color="white",
                                                  pixel_ratio=pixel_ratio,
                                                  name="pic",
                                              ),
                                          )
                                          ),

        )
    )
    line.overlap(bar)
    return line
Пример #7
0
    def draw_chart(cls, data):
        kline = (
            Kline().add_xaxis(xaxis_data=data["times"]).add_yaxis(
                series_name="",
                y_axis=data["datas"],
                itemstyle_opts=opts.ItemStyleOpts(
                    color="#ef232a",
                    color0="#14b143",
                    border_color="#ef232a",
                    border_color0="#14b143",
                ),
                markpoint_opts=opts.MarkPointOpts(data=[
                    opts.MarkPointItem(type_="max", name="最大值"),
                    opts.MarkPointItem(type_="min", name="最小值"),
                ]),
                markline_opts=opts.MarkLineOpts(
                    label_opts=opts.LabelOpts(position="middle",
                                              color="blue",
                                              font_size=15),
                    data=cls.split_data_part(data),
                    symbol=["circle", "none"],
                ),
            ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
                is_silent=True, data=cls.split_data_part(data))).
            set_global_opts(
                title_opts=opts.TitleOpts(title="K线周期图表", 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)),
                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="97%",
                                      range_end=100),
                    opts.DataZoomOpts(is_show=False,
                                      xaxis_index=[0,
                                                   2],
                                      range_end=100),
                    opts.DataZoomOpts(is_show=False,
                                      xaxis_index=[0,
                                                   3],
                                      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=data["times"])
            # # EMA10
            # .add_yaxis(
            #     series_name="EMA10",
            #     y_axis=data["ema10"],
            #     xaxis_index=2,
            #     yaxis_index=2,
            #     label_opts=opts.LabelOpts(is_show=False),
            # )

            # EMA144
            # .add_yaxis(
            #     series_name="EMA144",
            #     y_axis=data["ema144"],
            #     xaxis_index=2,
            #     yaxis_index=2,
            #     label_opts=opts.LabelOpts(is_show=False),
            # )
            # boll_median
            .add_yaxis(
                series_name="median",
                y_axis=data["boll_median"],
                xaxis_index=2,
                yaxis_index=2,
                label_opts=opts.LabelOpts(is_show=False),
            )
            # boll_upper
            .add_yaxis(
                series_name="upper",
                y_axis=data["boll_upper"],
                xaxis_index=2,
                yaxis_index=2,
                label_opts=opts.LabelOpts(is_show=False),
            )
            # boll_lower
            .add_yaxis(
                series_name="lower",
                y_axis=data["boll_lower"],
                xaxis_index=2,
                yaxis_index=2,
                label_opts=opts.LabelOpts(is_show=False),
            ).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    grid_index=1,
                    axislabel_opts=opts.LabelOpts(is_show=False),
                ),
                yaxis_opts=opts.AxisOpts(
                    grid_index=1,
                    split_number=3,
                    axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                    axistick_opts=opts.AxisTickOpts(is_show=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                    axislabel_opts=opts.LabelOpts(is_show=True),
                ),
            ))
        # Overlap Kline + Line
        overlap_kline_line = kline.overlap(kline_line)

        # Bar-1
        bar_1 = (
            Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(
                series_name="Volumn",
                yaxis_data=data["vols"],
                xaxis_index=1,
                yaxis_index=1,
                label_opts=opts.LabelOpts(is_show=False),
                # 根据 echarts demo 的原版是这么写的
                # itemstyle_opts=opts.ItemStyleOpts(
                #     color=JsCode("""
                #     function(params) {
                #         var colorList;
                #         if (data.datas[params.dataIndex][1]>data.datas[params.dataIndex][0]) {
                #           colorList = '#ef232a';
                #         } else {
                #           colorList = '#14b143';
                #         }
                #         return colorList;
                #     }
                #     """)
                # )
                # 改进后在 grid 中 add_js_funcs 后变成如下
                itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                    function(params) {
                        var colorList;
                        if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) {
                            colorList = '#ef232a';
                        } else {
                            colorList = '#14b143';
                        }
                        return colorList;
                    }
                    """)),
            ).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    grid_index=1,
                    axislabel_opts=opts.LabelOpts(is_show=False),
                ),
                legend_opts=opts.LegendOpts(is_show=False),
            ))

        # Bar-2 (Overlap Bar + Line)
        bar_2 = (Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(
            series_name="MACD",
            yaxis_data=data["macds"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                            function(params) {
                                var colorList;
                                if (params.data >= 0) {
                                  colorList = '#ef232a';
                                } else {
                                  colorList = '#14b143';
                                }
                                return colorList;
                            }
                            """)),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

        line_2 = (Line().add_xaxis(xaxis_data=data["times"]).add_yaxis(
            series_name="DIF",
            y_axis=data["difs"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="DEA",
            y_axis=data["deas"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))

        rsi_line = (Line().add_xaxis(xaxis_data=data["times"]).add_yaxis(
            series_name="rsi6",
            y_axis=data["rsi6"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="rsi12",
            y_axis=data["rsi12"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="rsi24",
            y_axis=data["rsi24"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))

        # MACD
        overlap_bar_line = bar_2.overlap(line_2)

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

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

        # K线图和 MA5 的折线图
        grid_chart.add(
            overlap_kline_line,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    height="45%"),
        )
        # Volumn 柱状图
        grid_chart.add(
            bar_1,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    pos_top="56%",
                                    height="10%"),
        )
        # MACD DIFS DEAS
        grid_chart.add(
            overlap_bar_line,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    pos_top="68%",
                                    height="14%"),
        )
        # rsi6
        grid_chart.add(
            rsi_line,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    pos_top="84%",
                                    height="10%"),
        )
        return grid_chart.render_embed()
Пример #8
0
#    radius=[30, 75],
#    is_legend_show=False,
#    is_label_show=True,
)
pie1.render('评分.html')

#%%

datas['dates'] = datas.date.apply(lambda x:pd.Timestamp(x).date())
datas['time'] = datas.date.apply(lambda x:pd.Timestamp(x).time().hour)


num_date = datas.author.groupby(datas['dates']).count()

# 评论数时间分布
chart = Line("评论数时间分布")
chart.use_theme('dark')
chart.add( '评论数时间分布',num_date.index, num_date.values, is_fill=True, line_opacity=0.2,
          area_opacity=0.4, symbol=None)

chart.render('评论时间分布.html')

# 好评字数分布
datalikes = datas.loc[datas.likes>5]
datalikes['num'] = datalikes.content.apply(lambda x:len(x))
chart = Scatter("likes")
chart.use_theme('dark')
chart.add('likes', np.log(datalikes.likes), datalikes.num, is_visualmap=True,
               xaxis_name = 'log(评论字数)',
               
          )
 Line(opts.InitOpts(bg_color="#1A1835", ))
 # 设置图形的全局参数
 .set_global_opts(
     tooltip_opts=opts.TooltipOpts(is_show=False),
     legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(
         color='#90979c')),
     xaxis_opts=opts.AxisOpts(
         type_="category",
         axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(
             color="rgba(204,187,225,0.5)")),
         splitline_opts=opts.SplitLineOpts(is_show=False),
         axistick_opts=opts.AxisTickOpts(is_show=False)),
     yaxis_opts=opts.AxisOpts(
         type_="value",
         axistick_opts=opts.AxisTickOpts(is_show=True),
         splitline_opts=opts.SplitLineOpts(is_show=False),
         axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(
             color="rgba(204,187,225,0.5)")),
     ),
     datazoom_opts=opts.DataZoomOpts(
         is_show=True, )).add_xaxis(xaxis_data=x_data).add_yaxis(
             series_name="访问量",
             y_axis=y_data,
             symbol="circle",
             symbol_size=10,
             is_symbol_show=True,
             label_opts=opts.LabelOpts(is_show=False),
             itemstyle_opts=opts.ItemStyleOpts(color="#6f7de3"),
             markpoint_opts=opts.MarkPointOpts(
                 label_opts=opts.LabelOpts(color='#fff'),
                 data=[
                     opts.MarkPointItem(type_='max', name='最大值'),
                     opts.MarkPointItem(type_='min', name='最小值')
                 ])).add_yaxis(
                     series_name="订单量",
                     y_axis=y2_data,
                     symbol="circle",
                     symbol_size=10,
                     is_symbol_show=True,
                     label_opts=opts.LabelOpts(is_show=False),
                     itemstyle_opts=opts.ItemStyleOpts(color="#c257F6"),
                     markpoint_opts=opts.MarkPointOpts(
                         label_opts=opts.LabelOpts(color='#fff'),
                         data=[
                             opts.MarkPointItem(type_='max', name='最大值'),
                             opts.MarkPointItem(type_='min', name='最小值')
                         ])).render("basic_line_chart.html"))
Пример #10
0
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts(
            name="水量",
            type_="value",
            min_=0,
            max_=250,
            interval=50,
            axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
    )
)

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

#
bar.overlap(line).render("mixed_bar_and_line.html")
                linestyle_opts=opts.LineStyleOpts(color="#5793f3")
            ),
            axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
        ),
        title_opts=opts.TitleOpts(title="Grid-Overlap-多 X/Y 轴示例"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        legend_opts=opts.LegendOpts(pos_left="25%"),
    )
)

line = (
    Line()
    .add_xaxis(["{}月".format(i) for i in range(1, 13)])
    .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),
    )
)

bar1 = (
    Bar()
    .add_xaxis(["{}月".format(i) for i in range(1, 13)])
    .add_yaxis(
        "蒸发量 1",
        [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
        color="#d14a61",
        xaxis_index=1,
        yaxis_index=3,
Пример #12
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
df.sort_index(inplace=True)  # 索引排序,inplace=True表示修改这个索引
df.head()

# In[12]:

# 2、使用pyecharts绘制折线图
from pyecharts.charts import Line
from pyecharts import options as opts
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')

# In[13]:

# 折线图
line = Line()  # 折线图对象

# x轴
line.add_xaxis(df.index.to_list())  # x轴数据:列表——日期

# 每个y轴
line.add_yaxis("开盘价", df['open'].round(2).to_list())
line.add_yaxis("收盘价", df['close'].round(2).to_list())

# 图标配置
line.set_global_opts(title_opts=opts.TitleOpts(title='百度股票2019年'),
                     tooltip_opts=opts.TooltipOpts(trigger='axix',
                                                   axis_pointer_type='cross'))

# In[15]:
Пример #14
0
def trans_data_to_use(dataset: list):
    size = len(dataset)
    # 元组中可能数据大小不一致,因此先进行转化
    dataset = np.array(dataset)
    k = 1 / 1024
    # 得到测试的时刻
    x_data = dataset[:, 10]
    y_data_1 = np.array(dataset[:, 1], float) * k
    y_data_1 = np.round(y_data_1, decimals=1)
    y_data_2 = np.array(dataset[:, 2], float) * k
    y_data_2 = np.round(y_data_2, decimals=1)
    y_data_3 = np.array(dataset[:, 3], float) * k
    y_data_3 = np.round(y_data_3, decimals=1)
    y_data_4 = np.array(dataset[:, 4], float) * k
    y_data_4 = np.round(y_data_4, decimals=1)
    y_data_5 = np.array(dataset[:, 5], float) * k
    y_data_5 = np.round(y_data_5, decimals=1)
    y_data_6 = np.array(dataset[:, 6], float) * k
    y_data_6 = np.round(y_data_6, decimals=1)
    y_data_7 = np.array(dataset[:, 7], float) * k
    y_data_7 = np.round(y_data_7, decimals=1)
    y_data_8 = np.array(dataset[:, 8], float) * k
    y_data_8 = np.round(y_data_8, decimals=1)
    (Line(init_opts=opts.InitOpts(width="1600px", height="800px")).add_xaxis(
        xaxis_data=x_data).add_yaxis(
            series_name="java_heap",
            y_axis=y_data_1,
            linestyle_opts=opts.LineStyleOpts(width=2),
        ).add_yaxis(
            series_name="native_heap",
            y_axis=y_data_2,
            linestyle_opts=opts.LineStyleOpts(width=2)).add_yaxis(
                series_name="code",
                y_axis=y_data_3,
                linestyle_opts=opts.LineStyleOpts(width=2)).add_yaxis(
                    series_name="stack",
                    y_axis=y_data_4,
                    linestyle_opts=opts.LineStyleOpts(width=2)).add_yaxis(
                        series_name="graphics",
                        y_axis=y_data_5,
                        linestyle_opts=opts.LineStyleOpts(width=2)).add_yaxis(
                            series_name="private_other",
                            y_axis=y_data_6,
                            linestyle_opts=opts.LineStyleOpts(width=2)).
     add_yaxis(series_name="system",
               y_axis=y_data_7,
               linestyle_opts=opts.LineStyleOpts(width=2)).add_yaxis(
                   series_name="total",
                   y_axis=y_data_8,
                   linestyle_opts=opts.LineStyleOpts(width=2)).set_global_opts(
                       title_opts=opts.TitleOpts(title="memory information",
                                                 pos_left="center"),
                       tooltip_opts=opts.TooltipOpts(
                           trigger="item", formatter="{a} <br/>{b} : {c}"),
                       legend_opts=opts.LegendOpts(pos_left="left"),
                       xaxis_opts=opts.AxisOpts(type_="category", name="x"),
                       yaxis_opts=opts.AxisOpts(
                           type_="log",
                           name="y",
                           splitline_opts=opts.SplitLineOpts(is_show=True),
                           is_scale=True,
                       ),
                   ).render("memory.html"))
Пример #15
0
from pywebio.output import put_html
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker

c = (
    Line()
    .add_xaxis(Faker.choose())
    .add_yaxis(
        "商家A",
        Faker.values(),
        markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
    )
    .add_yaxis(
        "商家B",
        Faker.values(),
        markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkLine"))
    
)

c.width = "100%"
put_html(c.render_notebook())
Пример #16
0
    def paint(cls,
              result,
              file_name,
              title="标题",
              is_df=False,
              indicator_index={}):
        """
        绘制K线
        :param result: 数据
        :param file_name: 保存到指定文件
        :param title: 标题
        :param is_df: 是否是DataFrame类型数据
        :param indicator_index: 指标 {'ma20': 6} -- {'指标': '索引'}
        :return:
        """
        time_list = []
        kline_data = []
        line_data = []
        # print(result)
        if is_df:
            # 遍历DataFrame
            result = result.values
            for item in result:
                # 数据
                kline_data.append([
                    float(item[1]),  # open
                    float(item[4]),  # close
                    float(item[3]),  # low
                    float(item[2]),  # high
                ])
                # 时间
                time_list.append(str(item[0]))
                # line
                if 'ma20' in indicator_index:
                    line_data.append(item[indicator_index['ma20']])
        else:
            for item in result:
                # 数据
                kline_data.append([
                    float(item['open']),
                    float(item['close']),
                    float(item['low']),
                    float(item['high']),
                ])
                # 时间
                time_list.append(str(item['candle_begin_time']))

        # K线
        kline = (Kline().add_xaxis(time_list).add_yaxis(
            "K线", kline_data).set_global_opts(
                xaxis_opts=opts.AxisOpts(is_scale=True),
                yaxis_opts=opts.AxisOpts(
                    is_scale=True,
                    splitarea_opts=opts.SplitAreaOpts(
                        is_show=True,
                        areastyle_opts=opts.AreaStyleOpts(opacity=1)),
                ),
                datazoom_opts=[opts.DataZoomOpts()],
                title_opts=opts.TitleOpts(title=title),
            ))
        # 均线
        line = (Line().add_xaxis(time_list).add_yaxis(
            "MA30", line_data).set_series_opts(label_opts=opts.LabelOpts(
                is_show=False)))
        kline.overlap(line)
        return kline.render_embed()
Пример #17
0
暂无
"""

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


(
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="",
        y_axis=y_data,
        symbol="emptyCircle",
        is_symbol_show=True,
        label_opts=opts.LabelOpts(is_show=False),
        areastyle_opts=opts.AreaStyleOpts(opacity=1, color="#C67570"),
    )
    .set_global_opts(
        tooltip_opts=opts.TooltipOpts(is_show=False),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
    )
    # 设置 boundary_gap 的时候一定要放在最后一个配置项里, 不然会被覆盖
    .render("basic_area_chart.html")
)
Пример #18
0
    # bar demo2
    bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK)).add_xaxis(
        ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋",
         "袜子"]).add_yaxis("商家A", [5, 20, 36, 10, 75, 90]).add_yaxis(
             "商家B", [15, 6, 45, 20, 35, 66]).set_global_opts(
                 title_opts=opts.TitleOpts(title="主标题", subtitle="副标题")))
    bar.render()

    lin = (
        Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK)).add_xaxis([
            "衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"
        ]).add_yaxis("商家A", [5, 20, 36, 10, 75, 90], is_smooth=True).add_yaxis(
            "商家B", [15, 6, 45, 20, 35, 66], is_smooth=True).set_global_opts(
                title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"),
                xaxis_opts=opts.AxisOpts(name='日期'),
                yaxis_opts=opts.AxisOpts(
                    name='数量',
                    max_=16000,
                    min_=1,
                    type_="log",  # 坐标轴配置项
                    splitline_opts=opts.SplitLineOpts(is_show=True),  # 分割线配置项
                    axisline_opts=opts.AxisLineOpts(is_show=True))))
    lin.render()
    lin.overlap(bar)
    lin.render()

    get_line()

    value = [95.1, 23.2, 43.3, 66.4, 88.5]
    attr = ["China", "Canada", "Brazil", "Russia", "United States"]
    map = Map("世界地图示例")
Пример #19
0
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
from pyecharts.faker import Faker

bar = (Bar().add_xaxis(Faker.choose()).add_yaxis(
    "商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(
        title_opts=opts.TitleOpts(title="Grid-Bar")))
line = (Line().add_xaxis(Faker.choose()).add_yaxis(
    "商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(
        title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
        legend_opts=opts.LegendOpts(pos_top="48%"),
    ))

grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%")).add(
    line, grid_opts=opts.GridOpts(pos_top="60%")).render("grid_vertical.html"))
Пример #20
0
c = (Line(init_opts=opts.InitOpts(
    bg_color=JsCode(background_color_js))).add_xaxis(
        xaxis_data=x_data).add_yaxis(
            series_name="注册总量",
            y_axis=y_data,
            is_smooth=True,
            is_symbol_show=True,
            symbol="circle",
            symbol_size=6,
            linestyle_opts=opts.LineStyleOpts(color="#fff"),
            label_opts=opts.LabelOpts(is_show=True,
                                      position="top",
                                      color="white"),
            itemstyle_opts=opts.ItemStyleOpts(color="red",
                                              border_color="#fff",
                                              border_width=3),
            tooltip_opts=opts.TooltipOpts(is_show=False),
            areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js),
                                              opacity=1),
        ).set_global_opts(
            title_opts=opts.TitleOpts(
                title="OCTOBER 2015",
                pos_bottom="5%",
                pos_left="center",
                title_textstyle_opts=opts.TextStyleOpts(color="#fff",
                                                        font_size=16),
            ),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                boundary_gap=False,
                axislabel_opts=opts.LabelOpts(margin=30, color="#ffffff63"),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(
                    is_show=True,
                    length=25,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
                ),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")),
            ),
            yaxis_opts=opts.AxisOpts(
                type_="value",
                position="right",
                axislabel_opts=opts.LabelOpts(margin=20, color="#ffffff63"),
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(width=2, color="#fff")),
                axistick_opts=opts.AxisTickOpts(
                    is_show=True,
                    length=15,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
                ),
                splitline_opts=opts.SplitLineOpts(
                    is_show=True,
                    linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))
Пример #21
0
 Line().add_xaxis(date_list).add_yaxis(
     '确诊数据',
     confirm_list,
     is_smooth=True,
     markline_opts=opts.MarkLineOpts(
         data=[opts.MarkLineItem(type_="average")])).add_yaxis(
             '疑似数据',
             suspect_list,
             is_smooth=True,
             markline_opts=opts.MarkLineOpts(
                 data=[opts.MarkLineItem(type_="average")]),
         ).add_yaxis(
             '死亡数据',
             dead_list,
             is_smooth=True,
             markline_opts=opts.MarkLineOpts(
                 data=[opts.MarkLineItem(type_="average")]),
         ).add_yaxis(
             '治愈数据',
             heal_list,
             is_smooth=True,
             markline_opts=opts.MarkLineOpts(
                 data=[opts.MarkLineItem(type_="average")]),
         )
 # 隐藏数字 设置面积
 .set_series_opts(areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
                  label_opts=opts.LabelOpts(is_show=False))
 # 设置x轴标签旋转角度
 .set_global_opts(
     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),
     yaxis_opts=opts.AxisOpts(name='人数', min_=3),
     title_opts=opts.TitleOpts(title='2019-nCoV疫情曲线图')))
Пример #22
0
def grid_mutil_yaxis() -> Grid:
    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(formatter="{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
    )
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker

y = Faker.values()
y[3], y[5] = None, None

c = (Line().add_xaxis(Faker.choose()).add_yaxis(
    "商家A", y, is_connect_nones=True).set_global_opts(title_opts=opts.TitleOpts(
        title="Line-连接空数据")).render("Line_connect_null.html"))
Пример #24
0
    def draw(cls,
             data_list: typing.List[ClassifierResult],
             report_path: str = None,
             data_path: str = None):
        # draw line chart
        x_axis = [str(i.timestamp) for i in data_list]
        y_axis = [i.stage for i in data_list]

        line = Line()
        line.add_xaxis(x_axis)
        line.add_yaxis("stage", y_axis, is_step=True, is_symbol_show=True)
        line.set_global_opts(
            title_opts=opts.TitleOpts(title='Trend'),
            toolbox_opts=opts.ToolboxOpts(is_show=True),
            tooltip_opts=opts.TooltipOpts(is_show=True,
                                          trigger='axis',
                                          axis_pointer_type='cross'),
        )

        # draw bar chart
        bar = Bar()
        x_axis = sorted(list(set([i.stage for i in data_list])))
        bar.add_xaxis(x_axis)
        y_axis = list()
        offset = data_list[1].timestamp - data_list[0].timestamp
        for each_stage_name in x_axis:
            each_stage = sorted(
                [i for i in data_list if i.stage == each_stage_name],
                key=lambda x: x.frame_id)
            time_cost = each_stage[-1].timestamp - each_stage[
                0].timestamp + offset
            y_axis.append(time_cost)
        bar.add_yaxis('time cost', y_axis)
        bar.set_global_opts(
            title_opts=opts.TitleOpts(title="Time Cost"),
            toolbox_opts=opts.ToolboxOpts(is_show=True),
        )
        logger.debug(f'time cost: {dict(zip(x_axis, y_axis))}')

        # draw pie chart
        pie = Pie()
        pie.add('', [list(z) for z in zip(x_axis, y_axis)])
        pie.set_global_opts(toolbox_opts=opts.ToolboxOpts(is_show=True), )

        # merge charts
        page = Page()
        page.add(line)
        page.add(bar)
        page.add(pie)

        # insert sample pictures' path
        if data_path and os.path.isdir(data_path):
            data_path = os.path.abspath(data_path)
            stage_list = [
                os.path.join(data_path, i) for i in os.listdir(data_path)
            ]
        else:
            logger.warning(f'data path {data_path} not existed')
            stage_list = []

        # save to file
        if not report_path:
            report_path = f'{toolbox.get_timestamp_str()}.html'
        template = Template(TEMPLATE)
        template_content = template.render(
            chart=Markup(page.render_embed()),
            pic_list=stage_list,
        )
        with open(report_path, "w") as fh:
            fh.write(template_content)
        logger.info(f'save report to {report_path}')
Пример #25
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)
Пример #26
0
df['dateTime'] = df['date'] + ' ' + df['time']

line = (
    Line().add_xaxis(df['dateTime'].tolist()).add_yaxis(
        "下載",
        df['download'],
        markline_opts=opts.MarkLineOpts(
            data=[opts.MarkLineItem(type_="average", name="平均值")
                  ])).set_series_opts(
                      areastyle_opts=opts.AreaStyleOpts(opacity=0.1),
                      label_opts=opts.LabelOpts(is_show=False)  #顯示資料點
                  ).set_global_opts(
                      title_opts=opts.TitleOpts(title="FTP流量分析"),
                      toolbox_opts=opts.ToolboxOpts(),
                      datazoom_opts=opts.DataZoomOpts(),
                      xaxis_opts=opts.AxisOpts(
                          name="日期",
                          splitline_opts=opts.SplitLineOpts(is_show=True)),
                      yaxis_opts=opts.AxisOpts(
                          type_="log",
                          name="秒",
                          splitline_opts=opts.SplitLineOpts(is_show=True),
                          is_scale=True),
                      #交點輔助線
                      tooltip_opts=opts.TooltipOpts(
                          is_show=True,
                          trigger='axis',
                      ),
                  ))

line.render()
Пример #27
0
 def visual(self, name='model_visual', path=None, gif=False):
     """
     Arguments:
     name : str, train end save last image or gif file with html format name.
     path : str, train end save last image or gif file with html format to path;
     save_gif : bool, default False, if save_gif=True, train end save all image to gif;
     
     Return:
         a html file path.
     """
     if path is not None:
         assert tf.io.gfile.exists(path), "`path` not exist."
         file = path + '/' + '{}.html'.format(name)
     else:
         file = '{}.html'.format(name)
     page = Page(interval=1, layout=Page.SimplePageLayout)
     plot_list = []
     width_len = '750px'
     height_len = '450px'
     for metric_id, metric in enumerate(self.params.metrics):
         if not gif:
             line = Line(opts.InitOpts(width=width_len, height=height_len))
             line = line.add_xaxis(list(range(1, self.params.polt_num + 1)))
             line = line.add_yaxis(
                 'train',
                 Series(self.params.logs[metric]).round(4).tolist(),
                 is_smooth=True)
             if self.params.valid_fmt.format(metric) in self.params.logs:
                 line = line.add_yaxis(
                     self.params.valid_fmt.split('_')[0],
                     Series(self.params.logs[self.params.valid_fmt.format(
                         metric)]).round(4).tolist(),
                     is_smooth=True)
             line = line.set_series_opts(
                 label_opts=opts.LabelOpts(is_show=False),
                 markpoint_opts=opts.MarkPointOpts(data=[
                     opts.MarkPointItem(type_='max', name='max_value'),
                     opts.MarkPointItem(type_='min', name='min_value')
                 ]))
             line = line.set_global_opts(
                 title_opts=opts.TitleOpts(title=metric),
                 xaxis_opts=opts.AxisOpts(
                     name=self.params.xlabel[self.params.mode],
                     name_location='center',
                     is_scale=True),
                 datazoom_opts=[
                     opts.DataZoomOpts(range_start=0, range_end=100)
                 ],
                 toolbox_opts=opts.ToolboxOpts())
             plot_list.append(line)
         else:
             timeline = Timeline(
                 opts.InitOpts(width=width_len,
                               height=height_len)).add_schema(
                                   play_interval=100, is_auto_play=True)
             for i in range(1, self.params.polt_num + 1):
                 line = Line(
                     opts.InitOpts(width=width_len, height=height_len))
                 line = line.add_xaxis(list(range(1, i + 1)))
                 line = line.add_yaxis(
                     'train',
                     Series(self.params.logs[metric])[:i].round(4).tolist(),
                     is_smooth=True)
                 if self.params.valid_fmt.format(
                         metric) in self.params.logs:
                     line = line.add_yaxis(
                         self.params.valid_fmt.split('_')[0],
                         Series(
                             self.params.logs[self.params.valid_fmt.format(
                                 metric)])[:i].round(4).tolist(),
                         is_smooth=True)
                 line = line.set_series_opts(
                     label_opts=opts.LabelOpts(is_show=False),
                     markpoint_opts=opts.MarkPointOpts(data=[
                         opts.MarkPointItem(type_='max', name='max_value'),
                         opts.MarkPointItem(type_='min', name='min_value')
                     ]))
                 line = line.set_global_opts(
                     title_opts=opts.TitleOpts(title=metric),
                     xaxis_opts=opts.AxisOpts(
                         name=self.params.xlabel[self.params.mode],
                         name_location='center',
                         is_scale=True))
                 timeline.add(line, str(i))
             plot_list.append(timeline)
     page.add(*plot_list).render(file)
     return file
Пример #28
0
from pyecharts import options as opts

# =============================================================================
# # V1 版本开始支持链式调用
# bar = (
#     Bar()
#     .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
#     .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
#     .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
#     .set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
# )
# bar.render()
#
# # 不习惯链式调用的开发者依旧可以单独调用方法
# bar = Bar()
# bar.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
# bar.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
# bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
# bar.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
# bar.render()
#
# =============================================================================
#普通折线图

c = (Line().add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]).add_yaxis(
    "商家A", [114, 55, 27, 101, 125, 27, 105]).add_yaxis(
        "商家B", [57, 134, 137, 129, 145, 60, 49]).set_global_opts(
            title_opts=opts.TitleOpts(title="Line-基本示例")))

c.render()
Пример #29
0
    def rendertohtml(self, resultset):
        page = Page()
        if resultset is None:
            print('无数据')
            return None

        header = [
            '日期', '股票代码 ', '股票名称 ', '持股数亿', '占比', '收盘价  ', '当日涨跌幅  ',
            '持股市值亿  ', '一日市值变化亿', '五日市值变化亿', '十日市值变化亿'
        ]
        tb = pt.PrettyTable()
        tb.field_names = header  # 设置表头
        tb.align = 'c'  # 对齐方式(c:居中,l居左,r:居右)

        c = Line()
        x = ['持股占比']
        name = ''
        HDDATELIST = []
        SHAREHOLDSUMlist = []  # 持股数
        SHARESRATElist = []  # 持股占比
        SHAREHOLD = []  # 持股数量
        zdflist = []
        SHAREHOLDPRICEONElist = []
        SHAREHOLDPRICEFIVElist = []
        SHAREHOLDPRICETENlsit = []
        # 取出占比数据
        for data in resultset:
            HDDATE = data['HDDATE']
            # HDDATE = datetime.datetime.strptime(HDDATE1, '%Y-%m-%d').strftime('%Y%m%d')
            HDDATELIST.append(HDDATE)

            SCODE = data['SCODE']
            SHAREHOLDSUM = data['SHAREHOLDSUM']
            SHAREHOLDSUMlist.append(SHAREHOLDSUM)

            SNAME = data['SNAME']
            SHARESRATE = data['SHARESRATE']
            SHARESRATElist.append(SHARESRATE)

            CLOSEPRICE = data['CLOSEPRICE']
            ZDF = data['ZDF']
            zdflist.append(ZDF)
            SHAREHOLDPRICE = format(data['SHAREHOLDPRICE'], '.3f')
            SHAREHOLDPRICEONE = format(data['SHAREHOLDPRICEONE'], '.3f')
            SHAREHOLDPRICEONElist.append(SHAREHOLDPRICEONE)
            SHAREHOLDPRICEFIVE = format(data['SHAREHOLDPRICEFIVE'], '.3f')
            SHAREHOLDPRICEFIVElist.append(SHAREHOLDPRICEFIVE)
            SHAREHOLDPRICETEN = format(data['SHAREHOLDPRICETEN'], '.3f')
            SHAREHOLDPRICETENlsit.append(SHAREHOLDPRICETEN)

            tb.add_row([
                HDDATE, SCODE, SNAME, SHAREHOLDSUM, SHARESRATE, CLOSEPRICE,
                ZDF, SHAREHOLDPRICE, SHAREHOLDPRICEONE, SHAREHOLDPRICEFIVE,
                SHAREHOLDPRICETEN
            ])

        OUTFILE = '南向资金_' + SNAME + '.html'
        # print(SHARESRATE)
        x1 = HDDATELIST
        y1 = SHARESRATElist  # 将占比数据设置为y轴
        y2 = SHAREHOLDSUMlist
        y3 = zdflist
        y4 = SHAREHOLDPRICEONElist
        y5 = SHAREHOLDPRICEFIVElist
        y6 = SHAREHOLDPRICETENlsit
        # y2 = [1000, 300, 500]
        # bar = Bar()
        # 设置x轴
        c.add_xaxis(xaxis_data=x)
        c.add_xaxis(xaxis_data=x1)
        # 设置y轴
        c.add_yaxis(series_name='持股百分比', y_axis=y1)
        # c.add_yaxis(series_name='持股数量亿', y_axis=y2)
        # c.add_yaxis(series_name='涨跌幅', y_axis=y3)
        c.add_yaxis(series_name='1日市值变动亿', y_axis=y4)
        c.add_yaxis(series_name='5日市值变动亿', y_axis=y5)
        c.add_yaxis(series_name='10日市值变动亿', y_axis=y6)

        c.set_global_opts(title_opts=opts.TitleOpts(title='南向资金持股分析:  ' +
                                                    SNAME))

        # 生成html文件
        # c.render(path=OUTFILE)
        page.add(c)
        page.render(path=OUTFILE)
        # 如果要输出柱图
        '''
        bar = Bar()
        然后将c 换成bar
        '''
        #获取港股日线数据并画K线图
        getstockdata = self.getHK_stockQuotes(SCODE)

        if len(getstockdata) < 90:
            getstockdata = getstockdata
        else:
            getstockdata = getstockdata.tail(90)  #只后90行
        # print(getstockdata)
        if getstockdata.items == None:
            kline = ''
        else:
            # getstockdata['trade_date'] = pd.to_datetime(getstockdata.index)  # 设置字段trade_date 为datetime
            # getstockdata = getstockdata.set_index('trade_date')  # 设置trade_date为索引
            index = getstockdata.index.tolist()
            # getstockdata.sort_values(by=[getstockdata.index().to_list,'close'],ascending=False)
            # 设置四个绘图区域    包括    K线(均线),成交量,MACD
            np.seterr(divide='ignore', invalid='ignore')  # 忽略warning
            plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
            plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
            fig, ax = plt.subplots(figsize=(9, 6))  # 创建fig对象
            # 画绘图区域
            gs = gridspec.GridSpec(2,
                                   1,
                                   left=0.08,
                                   bottom=0.15,
                                   right=0.99,
                                   top=0.96,
                                   wspace=None,
                                   hspace=0,
                                   height_ratios=[3.5, 1])
            # 添加指标
            graph_KAV = fig.add_subplot(gs[0, :])  # K线图
            graph_VOL = fig.add_subplot(gs[1, :])
            # graph_MACD = fig.add_subplot(gs[2, :])
            # graph_KDJ = fig.add_subplot(gs[3, :])
            mpf.candlestick2_ochl(graph_KAV,
                                  getstockdata.open,
                                  getstockdata.close,
                                  getstockdata.high,
                                  getstockdata.low,
                                  width=0.5,
                                  colorup='r',
                                  colordown='g')  # 绘制K线走势
            # mpf.plot(getstockdata.iloc[:100],type='candle')  # 绘制K线走势
            # 绘制移动平均线图
            getstockdata['Ma5'] = getstockdata.close.rolling(window=5).mean(
            )  # pd.rolling_mean(df_stockload.close,window=20)
            getstockdata['Ma10'] = getstockdata.close.rolling(window=10).mean(
            )  # pd.rolling_mean(df_stockload.close,window=30)
            getstockdata['Ma20'] = getstockdata.close.rolling(window=20).mean()
            graph_KAV.plot(np.arange(0, len(index)),
                           getstockdata['Ma5'],
                           'black',
                           label='M5',
                           lw=1.0)
            graph_KAV.plot(np.arange(0, len(index)),
                           getstockdata['Ma10'],
                           'green',
                           label='M10',
                           lw=1.0)
            graph_KAV.plot(np.arange(0, len(index)),
                           getstockdata['Ma20'],
                           'blue',
                           label='M20',
                           lw=1.0)

            # 添加网格
            graph_KAV.grid()
            graph_KAV.legend(loc='best')
            graph_KAV.set_title(SCODE + ' ' + SNAME + '(日线)')
            graph_KAV.set_ylabel(u"价格")
            graph_KAV.set_xlim(0, len(index))  # 设置一下x轴的范围
            # 绘制成交量图
            graph_VOL.bar(
                np.arange(0, len(index)),
                getstockdata.volume,
                color=[
                    'g'
                    if getstockdata.open[x] > getstockdata.close[x] else 'r'
                    for x in range(0, len(index))
                ])
            graph_VOL.set_ylabel(u"成交量")
            graph_VOL.set_xlim(0, len(index))  # 设置一下x轴的范围
            graph_VOL.set_xticks(range(0, len(index), 1))  # X轴刻度设定 每1天标一个日期

            # X-轴每个ticker标签都向右倾斜45度
            for label in graph_KAV.xaxis.get_ticklabels():
                label.set_visible(False)

            for label in graph_VOL.xaxis.get_ticklabels():
                label.set_visible(True)
                label.set_fontsize(10)
            plt.savefig('./Kline.jpg')
        kline = '''<img src=./Kline.jpg />'''
        # 将数据也输出到文件
        s = tb.get_html_string()
        with open(OUTFILE, 'a+', encoding='utf-8') as fw:
            fw.write(kline)
            fw.write(s)
        fw.close()
        webbrowser.open(OUTFILE)  # 调用浏览器打开文件
Пример #30
0
    def generate_mchart(self,lst_tscode=[],lst_macro=['shibor.1w','pimon.nt_yoy','pimon.ppi_yoy','pimon.m1_yoy','pimon.m2_yoy','pimon.allstock_circ_mv_sum'],
            lst_findmedian=['pe',()],renderfile=False) -> Grid:
        if self.exists == False:
            return None
        ''' testing findmedian with a given index '''
        # df=self._dataagent.query('index_weight',index_code='000300.SH',start_date='20200630', end_date='20200630')
        # lst_findmedian=['pb',tuple(df['con_code'].values)]
        ''' ----------test end--------------------'''
        
        lst_tscode=list(set([self.ts_code,*lst_tscode]))
        # lst_findmedian[1] = tuple(self._dataagent.registry.loc[self._dataagent.registry['sec_type']=='stk']['ts_code']) if lst_findmedian[1] is None or len(lst_findmedian[1])==0 else lst_findmedian[1]
        dat_cursor = self.cursorTick['timeAxis']
        int_latestViewDate = self._dataagent.int_findClosestTradeDate(datetime.strftime(dat_cursor,'%Y%m%d') )
        df_baseCal = self._dataagent.df_calTbl.loc[self._dataagent.df_calTbl['cal_date']<=int_latestViewDate]['cal_date'].copy()
        lst_xaxis = ['{}/{}/{}'.format(i[:4],i[4:6],i[6:]) for i in df_baseCal.values.astype('str')] # xaxis values has to be STRING type, int will not work

        linechart = (
                Line()
                .add_xaxis(lst_xaxis)
        )
        # 生成主线,即目标证券/指数,及比较用的指数
        for str_tscode in lst_tscode:
            # str_tscode = DataAgent.formatCode(code)
            df_target = self._dataagent.query('load_alldaily',tpl_dateindex=tuple(df_baseCal),ts_code=str_tscode)
            if len(df_target)>0:
                df_toPlot = pd.merge(left=df_baseCal, right=df_target, how='left', left_on='cal_date', right_on='trade_date')
            else:
                continue
            
            '''=====主图画图部分包括主标的和副标的价格曲线,在主图中续把主图及后面叠加图的option,y轴等设置好==='''
            linename = '{} - {}'.format(str_tscode,self.sec_name)
            lst_values = list(df_toPlot['close'])
            lst_values = list(libs.normByRange(lst_values))
            
            linechart.add_yaxis(linename, lst_values,
                is_smooth=True,
                is_hover_animation=False,
                linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.3),
                label_opts=opts.LabelOpts(is_show=False),
                itemstyle_opts=opts.ItemStyleOpts(
                        color="#00da3c",
                ),
            )
            linechart.extend_axis( # 所有保持原比例的折线都放在linechart2里,使用右侧y轴
                yaxis=opts.AxisOpts(
                    name="倍数",
                    type_="value",
                    position="right",
                    axisline_opts=opts.AxisLineOpts(
                        linestyle_opts=opts.LineStyleOpts(color="black")
                    ),
                    axislabel_opts=opts.LabelOpts(formatter="{value}倍"),
                )
            )
            linechart.set_global_opts(
                title_opts=opts.TitleOpts(
                    title='宏观比较',
                ),
                xaxis_opts=opts.AxisOpts(type_="category"),
                yaxis_opts=opts.AxisOpts(name="等比例",
                    is_scale=True,
                ),
                legend_opts=opts.LegendOpts(is_show=True, pos_top='5%', pos_left="center"),
                datazoom_opts=[
                    opts.DataZoomOpts(
                        is_show=False,
                        type_="inside",
                        xaxis_index=[0],
                        range_start=75,
                        range_end=100,
                    ),
                    opts.DataZoomOpts(
                        is_show=True,
                        xaxis_index=[0],
                        type_="slider",
                        pos_top="90%",
                        range_start=75,
                        range_end=100,
                    ),
                ],
                tooltip_opts=opts.TooltipOpts(
                    trigger="axis",
                    axis_pointer_type="cross",
                    background_color="rgba(245, 245, 245, 0.8)",
                    border_width=1,
                    border_color="#ccc",
                    textstyle_opts=opts.TextStyleOpts(color="#000",font_size=10),
                ),
                axispointer_opts=opts.AxisPointerOpts(
                    is_show=True,
                    link=[{"xAxisIndex": "all"}],
                    label=opts.LabelOpts(background_color="#777"),
                ),
                brush_opts=opts.BrushOpts(
                    x_axis_index="all",
                    brush_link="all",
                    out_of_brush={"colorAlpha": 0.1},
                    brush_type="lineX",
                ),
            )
            '''=============================主图画图部分结束================='''
            '''=========叠加图1 尝试读取pe等股票才有的属性,如失败则说明不是股票,循环继续============='''
            try:
                lst_pe = df_toPlot['pe'].values.tolist()
                lst_pb = df_toPlot['pb'].values.tolist()
                lst_pepb = [round(lst_pe[index]/value,2) for index, value in enumerate(lst_pb) if value!=0]
                linechart.add_yaxis(str_tscode+"_PE", lst_pe, yaxis_index=1, #倍数使用右y轴
                    is_smooth=True,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(width=1),
                    label_opts=opts.LabelOpts(is_show=False),
                )
                linechart.add_yaxis(str_tscode+"_PE/PB", lst_pepb, yaxis_index=1, #倍数使用右y轴
                    is_smooth=True,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(width=1),
                    label_opts=opts.LabelOpts(is_show=False),
                )
            except:
                continue
            '''==========================叠加图1结束================================'''
        
        df_shibor = self._dataagent.query('load_shibor')
        # print('Supported shibor columns: {}'.format(df_shibor.columns))
        df_aggDay = self._dataagent.query('load_aggDayKPI')
        # print('Supported macro eco columns: {}'.format(df_aggDay.columns))
        df_pimon = self._dataagent.query('load_piMon')
        df_pimon = pd.merge(df_pimon, df_aggDay, how='left', left_on='date', right_on='trade_date') #与aggday按每月末日期合并以获得如“流通市值”等kpi
        # print('Supported macro eco columns: {}'.format(df_pimon.columns))

        '''=================叠加图2 所有股票的倍数类KPI,使用倍数类y轴============='''
        lst_aggDayKPIloop = ['allstock_pe_median','allstock_pe_ttm_median','allstock_pb_median','allstock_pepb_median']
        for kpi in lst_aggDayKPIloop:
            lst_values = df_aggDay[kpi].values.tolist()
            linechart.add_yaxis(kpi, lst_values, yaxis_index=1, #倍数使用右y轴
                is_smooth=True,
                is_hover_animation=False,
                linestyle_opts=opts.LineStyleOpts(width=1),
                label_opts=opts.LabelOpts(is_show=False),
            )
        '''==========================叠加图2结束================================'''
        
        '''===========叠加图3 宏观数据如shibor,cpi,m1等,按“。”分割类别进行图表生成,使用等比类y轴 ========'''
        for item in lst_macro:
            try:
                topic,colname = item.split('.')
            except:
                print('WARNING! input code {} not recognized...'.format(item))
            if topic=='shibor':
                df_target = df_shibor
                maxarr = df_target.max(axis=0, skipna=True).values[1:]
                minarr = df_target.min(axis=0, skipna=True).values[1:]
                deltaRng = max(maxarr)-min(minarr) # overwrite the normalization function delta to put all shibor rates comparable
            elif topic=='pimon':
                df_target = df_pimon
                deltaRng = None
            else:
                print('WARNING! subject code {} is not recognized...'.format(topic))
            if len(df_target)>0:
                df_toPlot = pd.merge(df_baseCal, df_target, how='left', left_on='cal_date', right_on='date')
                df_toPlot[colname] = df_toPlot[colname].bfill()
            else:
                continue
            linename = item
            lst_values = list(df_toPlot[colname])
            lst_values = list(libs.normByRange(lst_values,delta=deltaRng))
            linechart.add_yaxis(linename, lst_values, # 所有等比例缩放的折线都放在linechart里,使用左侧y轴
                is_smooth=True,
                is_hover_animation=False,
                linestyle_opts=opts.LineStyleOpts(width=1,opacity=0.5),
                label_opts=opts.LabelOpts(is_show=False),
            )
        '''==========================叠加图3结束================================'''

        
        '''========叠加图4 如参数给出需要寻找中位数的股票列表则读取相应所有本地文件后计算并生成叠加图标========'''
        if lst_findmedian[1] is not None and len(lst_findmedian[1])>0 :
            str_cat = lst_findmedian[0]
            df_result = pd.DataFrame()
            for str_tscode in lst_findmedian[1]:
                try:
                    df = self._dataagent.query('load_alldaily',tpl_dateindex=tuple(df_baseCal),ts_code=str_tscode)[['ts_code','trade_date',str_cat]]
                    print('{} csv file loaded for {} trend analysis...'.format(str_tscode,str_cat),end='\r')
                except Exception as e:
                    print('WARNING! {} csv file not found...'.format(str_tscode))
                    continue
                df_result = pd.concat([df_result,df])
            df_result.dropna(subset=[str_cat],inplace=True)
            df_result = df_result.loc[df_result['trade_date']>19940301]
            # libs.df_csv(cfg.PATH_BUGFILE,(df_result.groupby('trade_date')['ts_code'].count(),))
            # print(df_result.groupby('trade_date')['ts_code'].count())
            df_target = df_result.groupby('trade_date')[str_cat].median()
            if len(df_target)>0:
                df_toPlot = pd.merge(left=df_baseCal, right=df_target, how='left', left_on='cal_date', right_on='trade_date')
                linename = '{}-median'.format(str_cat)
                lst_values = list(df_toPlot[str_cat])
                lst_values = list(lst_values)
                linechart.add_yaxis(linename, lst_values, yaxis_index=1,
                    is_smooth=True,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(width=1),
                    label_opts=opts.LabelOpts(is_show=False),
                )
            else:
                pass
        '''==========================叠加图4结束================================'''
        # put everything in a grid for easy resizing and positioning
        gridChart = Grid()
        gridChart.add(
            linechart,
            grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top='25%'),
        )

        fname = '{}{}.html'.format(cfg.PATH_ANAFILE,'macro')
        gridChart.render(fname) if renderfile else None
        self.mchart = gridChart #输出至可访问对象属性中
        return self