Пример #1
0
    def geo(self, id=None):
        """
        话题地理传播路径
        :param id:
        :return:
        """
        if self.geohtml and (not id or self.id == id):
            self.load(QUrl('file:///' + dirname + '/qt/buffer/geo.html'))
            self.flag = 5
            return
        self.id = id

        provinces = {}
        links = []
        topic = self.topic.find_one({'_id': id})

        for weibo_id in topic['text_id_list']:
            if MONGO_DB == 'weibo':
                data = self.repost.find_one({'id': weibo_id})
                if not data:
                    continue
                uid = data['uid']
                dataset = self.repost.find({'uid': uid})
                for data in dataset:
                    if data['area']:
                        province = self.get_province(data['area'])
                        if province:
                            if province not in provinces:
                                provinces[province] = 0
                            provinces[province] += 1
                        break
            else:
                weibo = self.weibo.find_one({'id': weibo_id})
                user = self.user.find_one({'uid': weibo['uid']})
                if not user:
                    continue
                if user['area']:
                    # print(user['area'])
                    province = self.get_province(user['area'])
                    # print(province)
                    if province:
                        if province not in provinces:
                            provinces[province] = 0
                        provinces[province] += 1

        temp = None
        for province in provinces:
            if not temp:
                temp = province
                continue
            links.append((temp, province))
            temp = province
        # print(provinces)
        # print(links)

        c = (
            Geo()
                .add_schema(maptype="china")
                .add(
                "geo",
                [(key, value) for key, value in provinces.items()],
                type_=ChartType.EFFECT_SCATTER,
            )
                .add(
                "geo",
                links,
                type_=ChartType.LINES,
                effect_opts=opts.EffectOpts(
                    symbol=SymbolType.ARROW, symbol_size=6, color="blue"
                ),
                linestyle_opts=opts.LineStyleOpts(curve=0.2),
            )
                .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
                .set_global_opts(
                visualmap_opts=opts.VisualMapOpts(),
                title_opts=opts.TitleOpts(title="话题地理传播路径图")
            )
        )
        html = c.render_embed()
        html = re.sub(r'width:\d+px', 'width:100%', html)
        html = re.sub(r'height:\d+px', 'height:800px', html)
        with open(dirname + '/qt/buffer/geo.html', 'w') as f:
            f.write(html)
        self.geohtml = True

        self.load(QUrl('file:///' + dirname + '/qt/buffer/geo.html'))
        self.flag = 5
Пример #2
0
from pywebio.output import put_html
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker

c = (
    Geo()
    .add_schema(maptype="china")
    .add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-基本示例")
    )
    
)

c.width = "100%"
put_html(c.render_notebook())
Пример #3
0
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
from pyecharts import options as opts
# bar = Bar()
# bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
# bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
# bar.render()

citys = ['丰县', '沛县', '铜山区', '贾汪区', '鼓楼区', '泉山区', '云龙区', '邳州市', '新沂市', '睢宁县']
values = [120, 160, 180, 200, 180, 190, 130, 160, 140, 170]
geo = Geo()
geo.add_schema(maptype="徐州")
geo.add_coordinate("某地", 117.3, 34.3)
print([list(z) for z in zip(citys, values)])
geo.add("test", [list(z) for z in zip(citys, values)],
        type_=ChartType.EFFECT_SCATTER)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),
                    title_opts=opts.TitleOpts(title="Geo地图示例"))
geo.render("测试.html")
Пример #4
0
mymap.add(series_name='中国最新疫情地图', data_pair=sequence, maptype='china')
mymap.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(pieces=[{
        "min": 1,
        "max": 9,
        "label": "1-9",
        "color": 'lightcoral'
    }, {
        "min": 10,
        "max": 99,
        "label": "10-99",
        "color": 'indianred'
    }, {
        "min": 100,
        "max": 999,
        "label": "100-999",
        "color": 'brown'
    }, {
        "min": 1000,
        "max": 9999,
        "label": "1000-9999",
        "color": 'firebrick'
    }, {
        "min": 10000,
        "max": 60000,
        "label": "≥10000",
        "color": 'darkred'
    }],
                                      is_piecewise=True))

mymap.render('地图2.html')
Пример #5
0
from pyecharts.charts import Geo
from pyecharts import options as opts

data = [['广东', 24], ['北京', 56], ['上海', 56], ['江西', 119], ['湖南', 79],
        ['浙江', 23], ['江苏', 97]]

# 采用链式调用
chart = (
    Geo()

    # 控制地图类型、视角中心点等
    .add_schema(maptype="china")

    # 添加图表名称、传入数据集、选择geo图类型、调整图例等
    .add("geo", data)

    # 系列配置项 series_options
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))

    # 全局配置项 global_options
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        title_opts=opts.TitleOpts(title="Geo_China"),
    ))

chart.render('geo1.html')
Пример #6
0
    def draw_chart(df,
                   extend_field,
                   save_path="",
                   trade_list=None,
                   kline_title="买卖点K线图"):
        datetime_array = df.datetime.tolist()
        volume_array = df.volume.tolist()
        # open close low high
        kline_data = df[["open", "close", "low", "high"]].values.tolist()

        point_list = []
        if trade_list is None:
            trade_list = []
        for trade in trade_list:
            # 开多
            if type(trade[0]) == str:
                trade_datetime = trade[0]
            else:
                trade_datetime = trade[0].strftime("%Y-%m-%d %H:%M:%S")

            if trade_datetime < datetime_array[0]:
                continue

            if trade[1] == "多" and trade[4] == "开":
                point_list.append(
                    opts.MarkPointItem(
                        name="开多",
                        coord=[trade_datetime, trade[6]],
                        value="开多",
                        itemstyle_opts=opts.ItemStyleOpts(color="#ef232a")))
            # 开空
            elif trade[1] == "空" and trade[4] == "开":
                point_list.append(
                    opts.MarkPointItem(
                        name="开空",
                        coord=[trade_datetime, trade[6]],
                        value="开空",
                        itemstyle_opts=opts.ItemStyleOpts(color="#ef232a")))
            # 平多
            elif trade[1] == "多" and (trade[4] == "平" or trade[4] == "平今"
                                      or trade[4] == "平昨"):
                point_list.append(
                    opts.MarkPointItem(
                        name="平空",
                        coord=[trade_datetime, trade[6]],
                        value="平空",
                        itemstyle_opts=opts.ItemStyleOpts(color="#14b143")))
            # 平空
            elif trade[1] == "空" and (trade[4] == "平" or trade[4] == "平今"
                                      or trade[4] == "平昨"):
                point_list.append(
                    opts.MarkPointItem(
                        name="平多",
                        coord=[trade_datetime, trade[6]],
                        value="平多",
                        itemstyle_opts=opts.ItemStyleOpts(color="#14b143")))

        kline = (Kline().add_xaxis(xaxis_data=datetime_array).add_yaxis(
            series_name="Kline",
            y_axis=kline_data,
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ef232a",
                color0="#14b143",
                border_color="#ef232a",
                border_color0="#14b143",
            ),
            markpoint_opts=opts.MarkPointOpts(data=point_list),
        ).set_global_opts(
            title_opts=opts.TitleOpts(title=kline_title,
                                      pos_left="2%",
                                      pos_top="1%"),
            legend_opts=opts.LegendOpts(is_show=True,
                                        pos_top=10,
                                        pos_left="center"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    xaxis_index=[0, 1],
                    range_start=0,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0, 1],
                    type_="slider",
                    pos_top="88%",
                    range_start=0,
                    range_end=100,
                ),
            ],
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitline_opts=opts.SplitLineOpts(is_show=True)),
            tooltip_opts=opts.TooltipOpts(
                trigger="axis",
                axis_pointer_type="cross",
                background_color="rgba(245, 245, 245, 0.8)",
                border_width=1,
                border_color="#ccc",
                textstyle_opts=opts.TextStyleOpts(color="#000"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=5,
                is_piecewise=True,
                pieces=[
                    {
                        "value": 1,
                        "color": "#00da3c"
                    },
                    {
                        "value": -1,
                        "color": "#ec0000"
                    },
                ],
            ),
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{
                    "xAxisIndex": "all"
                }],
                label=opts.LabelOpts(background_color="#777"),
            ),
        ))

        bar = (Bar().add_xaxis(xaxis_data=datetime_array).add_yaxis(
            series_name="Volume",
            yaxis_data=volume_array,
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                grid_index=1,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                is_scale=True,
                split_number=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

        if len(extend_field) > 0:
            line = (Line().add_xaxis(
                xaxis_data=datetime_array).set_global_opts(
                    xaxis_opts=opts.AxisOpts(type_="category"),
                    legend_opts=opts.LegendOpts(is_show=True),
                ))
            for field in extend_field:
                field_value_array = df[field].tolist()
                line.add_yaxis(
                    series_name=field,
                    y_axis=field_value_array,
                    is_smooth=True,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.8),
                    label_opts=opts.LabelOpts(is_show=False),
                )

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

        # Grid Overlap + Bar
        grid_chart = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="760px",
            animation_opts=opts.AnimationOpts(animation=False),
        ))
        grid_chart.add(
            kline,
            grid_opts=opts.GridOpts(pos_left="3.5%",
                                    pos_right="3.5%",
                                    height="60%"),
        )
        grid_chart.add(
            bar,
            grid_opts=opts.GridOpts(pos_left="3.5%",
                                    pos_right="3.5%",
                                    pos_top="70%",
                                    height="16%"),
        )

        grid_chart.render(os.path.join(save_path, "KLineChart.html"))
    Line3D()
    .add(
        "",
        data,
        xaxis3d_opts=opts.Axis3DOpts(data=clock, type_="value"),
        yaxis3d_opts=opts.Axis3DOpts(data=week_en, type_="value"),
        grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            dimension=2,
            max_=30,
            min_=0,
            range_color=[
                "#313695",
                "#4575b4",
                "#74add1",
                "#abd9e9",
                "#e0f3f8",
                "#ffffbf",
                "#fee090",
                "#fdae61",
                "#f46d43",
                "#d73027",
                "#a50026",
            ],
        )
    )
    .render("line3d_rectangular_projection.html")
)
Пример #8
0
def Candle_render_output(x_date, y_data, vol_data) -> Grid:
    # ydata type : open close low high
    # vol_data is for bar
    print('Candle_render_output')
    kline = (Kline().add_xaxis(xaxis_data=x_date).add_yaxis(
        series_name="Dow-Jones index",
        y_axis=y_data,
        itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),
    ).set_global_opts(
        title_opts=opts.TitleOpts(
            title="Kline)",
            subtitle="MA(5, 10, 30, 60)",
        ),
        xaxis_opts=opts.AxisOpts(type_="category"),
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
        ),
        legend_opts=opts.LegendOpts(is_show=False,
                                    pos_bottom=10,
                                    pos_left="center"),
        datazoom_opts=[
            opts.DataZoomOpts(
                is_show=False,
                type_="inside",
                xaxis_index=[0, 1],
                range_start=0,
                range_end=100,
            ),
            opts.DataZoomOpts(
                is_show=True,
                xaxis_index=[0, 1],
                type_="slider",
                pos_top="90%",
                range_start=0,
                range_end=100,
            ),
        ],
        tooltip_opts=opts.TooltipOpts(
            trigger="axis",
            axis_pointer_type="cross",
            background_color="rgba(245, 245, 245, 0.8)",
            border_width=1,
            border_color="#ccc",
            textstyle_opts=opts.TextStyleOpts(color="#000"),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_show=False,
            dimension=2,
            series_index=5,
            is_piecewise=True,
            pieces=[
                {
                    "value": 1,
                    "color": "#ec0000"
                },
                {
                    "value": -1,
                    "color": "#00da3c"
                },
            ],
        ),
        axispointer_opts=opts.AxisPointerOpts(
            is_show=True,
            link=[{
                "xAxisIndex": "all"
            }],
            label=opts.LabelOpts(background_color="#777"),
        ),
        brush_opts=opts.BrushOpts(
            x_axis_index="all",
            brush_link="all",
            out_of_brush={"colorAlpha": 0.1},
            brush_type="lineX",
        ),
    ))
    bar = (
        Bar().add_xaxis(xaxis_data=x_date).add_yaxis(
            series_name="Volume",
            # yaxis_data=[
            #     [i, y_data[i][3], 1 if y_data[i][0] > y_data[i][1] else -1]
            #     for i in range(len(y_data))
            # ],
            yaxis_data=vol_data,
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                grid_index=1,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                is_scale=True,
                split_number=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

    lines = Kline_ma_line(x_date, y_data)
    kline = kline.overlap(lines)
    # Grid Overlap + Bar
    grid_chart = Grid()
    grid_chart.add(kline,
                   grid_opts=opts.GridOpts(pos_left="10%",
                                           pos_right="8%",
                                           height="50%"))
    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="70%",
                                height="16%"),
    )
    return grid_chart
#!/usr/bin/env python
# -*-coding:utf-8 -*-

import os
import re
import linecache
import math
import time
import shutil
# import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Map
os.chdir(os.path.split(os.path.realpath(__file__))[0])

a1 = ['北京', '上海', '广东省']
a2 = [1, 2, 3]

output = (Map().add("污染指数", zip(
    a1, a2), "china", is_map_symbol_show=False).set_global_opts(
        title_opts=opts.TitleOpts(title="2020年4月生态环境部通报"),
        visualmap_opts=opts.VisualMapOpts(min_=1,
                                          max_=3)).render("重点城市环境空气排名2.html"))
import pyecharts
from pyecharts.charts import Bar  # 柱状图
from pyecharts import options as ops
from pyecharts.globals import ThemeType  # 内置主题类型
bar = (
    Bar(init_opts=ops.InitOpts(theme="")).add_xaxis(
        ["xxx", "juice", "14", "ts", "drake",
         "young thug"]).add_yaxis("商家A", [100, 20, 36, 10, 75, 90])
    # 全局配置项
    .set_global_opts(
        # 标题配置项
        title_opts=ops.TitleOpts(
            # 主标题
            title="hello",
            subtitle="hhh"),
        # 图例配置项
        legend_opts=ops.LegendOpts(is_show=True),
        # 工具配置项
        toolbox_opts=ops.ToolboxOpts(is_show=False),
        # 视觉映射配置项
        visualmap_opts=ops.VisualMapOpts(is_show=True,
                                         # type_="color"
                                         )))
bar.render("柱状图.html")

# 使用 options 配置项,在 pyecharts 中,一切皆 Options。

# 全局配置项可通过 set_global_opts 方法设置
Пример #11
0
page.add(bar)

# 产品数量前15店铺柱状图
bar1 = (Bar().add_xaxis(
    shop_name_group['shop_name'].values.tolist()[:15]).add_yaxis(
        '产品数量前15店铺',
        shop_name_group['title'].values.tolist()[:15]).set_global_opts(
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(
                rotate=30))))
page.add(bar1)

# 销量前15店铺饼状图
pie = (Pie().add('',
                 sell_data.values.tolist()[:15]).set_global_opts(
                     title_opts=opts.TitleOpts(title='销量前15店铺',
                                               pos_left='center'),
                     legend_opts=opts.LegendOpts(is_show=False)))
page.add(pie)

# 店铺位置分布图
shop_map = (Map().add(
    '', location_data.values.tolist(), 'china').set_global_opts(
        title_opts=opts.TitleOpts(title='店铺位置分布图'),
        visualmap_opts=opts.VisualMapOpts(
            max_=max(location_data['shop_name'].values.tolist()),
            min_=min(location_data['shop_name'].values.tolist()),
            is_show=True)))
page.add(shop_map)

page.render()
Пример #12
0
def kline_profession_example() -> Grid:

    data = [
        [2320.26, 2320.26, 2287.3, 2362.94],
        [2300, 2291.3, 2288.26, 2308.38],
        [2295.35, 2346.5, 2295.35, 2345.92],
        [2347.22, 2358.98, 2337.35, 2363.8],
        [2360.75, 2382.48, 2347.89, 2383.76],
        [2383.43, 2385.42, 2371.23, 2391.82],
        [2377.41, 2419.02, 2369.57, 2421.15],
        [2425.92, 2428.15, 2417.58, 2440.38],
        [2411, 2433.13, 2403.3, 2437.42],
        [2432.68, 2334.48, 2427.7, 2441.73],
        [2430.69, 2418.53, 2394.22, 2433.89],
        [2416.62, 2432.4, 2414.4, 2443.03],
        [2441.91, 2421.56, 2418.43, 2444.8],
        [2420.26, 2382.91, 2373.53, 2427.07],
        [2383.49, 2397.18, 2370.61, 2397.94],
        [2378.82, 2325.95, 2309.17, 2378.82],
        [2322.94, 2314.16, 2308.76, 2330.88],
        [2320.62, 2325.82, 2315.01, 2338.78],
        [2313.74, 2293.34, 2289.89, 2340.71],
        [2297.77, 2313.22, 2292.03, 2324.63],
        [2322.32, 2365.59, 2308.92, 2366.16],
        [2364.54, 2359.51, 2330.86, 2369.65],
        [2332.08, 2273.4, 2259.25, 2333.54],
        [2274.81, 2326.31, 2270.1, 2328.14],
        [2333.61, 2347.18, 2321.6, 2351.44],
        [2340.44, 2324.29, 2304.27, 2352.02],
        [2326.42, 2318.61, 2314.59, 2333.67],
        [2314.68, 2310.59, 2296.58, 2320.96],
        [2309.16, 2286.6, 2264.83, 2333.29],
        [2282.17, 2263.97, 2253.25, 2286.33],
        [2255.77, 2270.28, 2253.31, 2276.22],
    ]

    def calculate_ma(day_count: int, d):
        result: List[Union[float, str]] = []
        for i in range(len(d)):
            if i < day_count:
                result.append("-")
                continue
            sum_total = 0.0
            for j in range(day_count):
                sum_total += float(d[i - j][1])
            result.append(abs(float("%.3f" % (sum_total / day_count))))
        return result

    x_data = ["2017-7-{}".format(i + 1) for i in range(31)]
    kline = (Kline().add_xaxis(xaxis_data=x_data).add_yaxis(
        series_name="Dow-Jones index",
        y_axis=data,
        itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),
    ).set_global_opts(
        title_opts=opts.TitleOpts(
            title="上证指数",
            subtitle="MA5",
        ),
        xaxis_opts=opts.AxisOpts(type_="category"),
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
        ),
        legend_opts=opts.LegendOpts(is_show=False,
                                    pos_bottom=10,
                                    pos_left="center"),
        datazoom_opts=[
            opts.DataZoomOpts(
                is_show=False,
                type_="inside",
                xaxis_index=[0, 1],
                range_start=0,
                range_end=100,
            ),
            opts.DataZoomOpts(
                is_show=True,
                xaxis_index=[0, 1],
                type_="slider",
                pos_top="90%",
                range_start=0,
                range_end=100,
            ),
        ],
        tooltip_opts=opts.TooltipOpts(
            trigger="axis",
            axis_pointer_type="cross",
            background_color="rgba(245, 245, 245, 0.8)",
            border_width=1,
            border_color="#ccc",
            textstyle_opts=opts.TextStyleOpts(color="#000"),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_show=False,
            dimension=2,
            series_index=5,
            is_piecewise=True,
            pieces=[
                {
                    "value": 1,
                    "color": "#ec0000"
                },
                {
                    "value": -1,
                    "color": "#00da3c"
                },
            ],
        ),
        axispointer_opts=opts.AxisPointerOpts(
            is_show=True,
            link=[{
                "xAxisIndex": "all"
            }],
            label=opts.LabelOpts(background_color="#777"),
        ),
        brush_opts=opts.BrushOpts(
            x_axis_index="all",
            brush_link="all",
            out_of_brush={"colorAlpha": 0.1},
            brush_type="lineX",
        ),
    ))

    line = (Line().add_xaxis(xaxis_data=x_data).add_yaxis(
        series_name="MA5",
        y_axis=calculate_ma(day_count=5, d=data),
        is_smooth=True,
        is_hover_animation=False,
        linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
    ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

    bar = (Bar().add_xaxis(xaxis_data=x_data).add_yaxis(
        series_name="Volume",
        yaxis_data=[[i, data[i][3], 1 if data[i][0] > data[i][1] else -1]
                    for i in range(len(data))],
        xaxis_index=1,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=False),
    ).set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            is_scale=True,
            grid_index=1,
            boundary_gap=False,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=False),
            split_number=20,
            min_="dataMin",
            max_="dataMax",
        ),
        yaxis_opts=opts.AxisOpts(
            grid_index=1,
            is_scale=True,
            split_number=2,
            axislabel_opts=opts.LabelOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_show=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    ))

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

    # Grid Overlap + Bar
    grid_chart = Grid()
    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="50%"),
    )
    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="70%",
                                height="16%"),
    )
    return grid_chart
Пример #13
0
from pyecharts.charts import MapGlobe, Grid
from pyecharts.globals import ThemeType

high = max([x for _, x in POPULATION[1:]])
low = min([x for _, x in POPULATION[1:]])

m = (
    MapGlobe(init_opts=opts.InitOpts(
        width="1920px",
        height="900px",
        page_title="全球互联网网络地图",
        theme=ThemeType.WALDEN)).add_schema().add(
            maptype="world",
            series_name="World Population",
            data_pair=POPULATION[1:],
            is_map_symbol_show=False,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(
            # title_opts=opts.TitleOpts(title="全球互联网网络AS号分布图"),
            visualmap_opts=opts.VisualMapOpts(
                min_=low,
                max_=high,
                range_text=["max", "min"],
                is_calculable=True,
                # is_piecewise=True,
                orient="horizontal",
                pos_right="20%",
                range_color=["lightskyblue", "yellow", "orangered"],
            )))
m.render("geo_global_3D.html")
Пример #14
0
import pyecharts.options as opts
from pyecharts.charts import MapGlobe
from pyecharts.faker import POPULATION

data = [x for _, x in POPULATION[1:]]
low, high = min(data), max(data)

c = (MapGlobe().add_schema().add(
    maptype="world",
    series_name="World Population",
    data_pair=POPULATION[1:],
    is_map_symbol_show=False,
    label_opts=opts.LabelOpts(is_show=False),
).set_global_opts(visualmap_opts=opts.VisualMapOpts(
    min_=low,
    max_=high,
    range_text=["max", "min"],
    is_calculable=True,
    range_color=["lightskyblue", "yellow", "orangered"],
)).render("map_globe.html"))
Пример #15
0
 visualmap_opts=opts.VisualMapOpts(
     is_piecewise=True,  # 设置是否为分段显示
     # 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如:
     pieces=[
         {
             "min": 4000,
             "label": '>4000人',
             "color": "#eb2f06"
         },
         {
             "min": 2000,
             "max": 4000,
             "label": '2001-4000人',
             "color": "#FF3030"
         },  # 不指定 max,表示 max 为无限大(Infinity)。
         {
             "min": 1000,
             "max": 2000,
             "label": '1001-2000人',
             "color": "#FF4500"
         },
         {
             "min": 500,
             "max": 1000,
             "label": '501-1000人',
             "color": "#FF7F50"
         },
         {
             "min": 100,
             "max": 500,
             "label": '100-500人',
             "color": "#FFA500"
         },
         {
             "min": 1,
             "max": 100,
             "label": '1-99人',
             "color": "#FFDEAD"
         },
     ],
     # 两端的文本,如['High', 'Low']。
     range_text=['高', '低'],
 ),
Пример #16
0
 visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                                   pos_top=50,
                                   pos_right=10,
                                   pieces=[{
                                       'min':
                                       0,
                                       'max':
                                       50,
                                       'color':
                                       '#93CE07'
                                   }, {
                                       'min':
                                       50,
                                       'max':
                                       100,
                                       'color':
                                       '#FBDB0F'
                                   }, {
                                       'min':
                                       100,
                                       'max':
                                       150,
                                       'color':
                                       '#FC7D02'
                                   }, {
                                       'min':
                                       150,
                                       'max':
                                       200,
                                       'color':
                                       '#FD0100'
                                   }, {
                                       'min':
                                       200,
                                       'max':
                                       300,
                                       'color':
                                       '#AA069F'
                                   }, {
                                       'min':
                                       300,
                                       'color':
                                       '#AC3B2A'
                                   }]),
Пример #17
0
def MultipleLineCharts(datas):
    line = Line(init_opts=opts.InitOpts(width="100%"))
    line.add_xaxis(xaxis_data=[item[0] for item in datas[1][0][1]])  # 设置x轴数据
    for data in datas[1]:
        line.add_yaxis(
            series_name=data[0],
            y_axis=[item[1] for item in data[1]],
            yaxis_index=0,
            is_smooth=True,
            is_symbol_show=False,
            is_connect_nones=True,
        )  # 设置y轴数据

    line.set_global_opts(
        title_opts=opts.TitleOpts(title=datas['title']),
        tooltip_opts=opts.TooltipOpts(trigger="axis"),
        datazoom_opts=[
            opts.DataZoomOpts(yaxis_index=0, range_start=0, range_end=100),
            opts.DataZoomOpts(type_="inside", yaxis_index=0),
        ],
        visualmap_opts=opts.VisualMapOpts(
            pos_top="10",
            pos_right="10",
            is_piecewise=True,
            pieces=[
                {
                    "gt": 0,
                    "lte": 25,
                    "color": "#096"
                },
                {
                    "gt": 25,
                    "lte": 50,
                    "color": "#ffde33"
                },
                {
                    "gt": 50,
                    "lte": 75,
                    "color": "#ff9933"
                },
                {
                    "gt": 75,
                    "color": "#cc0033"
                },
            ],
            out_of_range={"color": "#999"},
        ),
        xaxis_opts=opts.AxisOpts(type_="category"),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            name_location="start",
            min_=0,
            max_=100,
            is_scale=True,
            axistick_opts=opts.AxisTickOpts(is_inside=False),
        ),
    )
    line.set_series_opts(markline_opts=opts.MarkLineOpts(
        data=[
            {
                "yAxis": 25
            },
            {
                "yAxis": 50
            },
            {
                "yAxis": 75
            },
        ],
        label_opts=opts.LabelOpts(position="end"),
    ))
    # line.render()#渲染图表,默认文件名为render.html
    return line.render_embed()
Пример #18
0
    def to_map_city(self, city, variate, province, update_time):
        #pices定义数据分段
        pieces = [
            {
                "max": 59999,
                "min": 10000,
                "label": ">10000",
                "color": "#990033"
            },
            {
                "max": 9999,
                "min": 5000,
                "label": "5000-9999",
                "color": "#CC0033"
            },
            {
                "max": 4999,
                "min": 1000,
                "label": "1000-4999",
                "color": "#FF0033"
            },
            {
                "max": 999,
                "min": 100,
                "label": "100-999",
                "color": "#FF6633"
            },
            {
                "max": 99,
                "min": 50,
                "label": "50-99",
                "color": "#FF9900"
            },
            {
                "max": 49,
                "min": 10,
                "label": "10-49",
                "color": "#FFCC66"
            },
            {
                "max": 9,
                "min": 1,
                "label": "1-9",
                "color": "#FFFFCC"
            },
            {
                "max": 0,
                "min": 0,
                "label": "0",
                "color": "#FFFFFF"
            },
        ]

        c = (
            # 设置地图大小
            Map(init_opts=opts.InitOpts(width='1000px', height='880px')
                ).add("累计确诊人数", [list(z) for z in zip(city, variate)],
                      province,
                      is_map_symbol_show=False)
            #设置不显示市级名称
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
            # 设置全局变量
            .set_global_opts(
                title_opts=opts.TitleOpts(title="%s地区疫情地图分布" % (province),
                                          subtitle='截止%s  %s省疫情分布情况' %
                                          (update_time, province),
                                          pos_left="center",
                                          pos_top="10px"),
                legend_opts=opts.LegendOpts(is_show=False),
                visualmap_opts=opts.VisualMapOpts(
                    max_=200,
                    is_piecewise=True,
                    pieces=pieces,
                ),
            ).render("./map/china/{}疫情地图.html".format(province)))
Пример #19
0
def draw_charts(echarts_data):
    kline_data = echarts_data["data"]
    date = echarts_data["date"]
    kline = (
        Kline().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="Dow-Jones index",
            y_axis=kline_data,
            itemstyle_opts=opts.ItemStyleOpts(color="#ec0000",
                                              color0="#00da3c"),
        ).set_global_opts(
            legend_opts=opts.LegendOpts(is_show=False,
                                        pos_bottom=10,
                                        pos_left="center"),

            # 其中inside是支持鼠标缩放
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=True,
                    type_="inside",
                    xaxis_index=[0, 1, 2, 3, 4],
                    range_start=50,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0, 1, 2, 3, 4],
                    type_="slider",
                    range_start=50,
                    range_end=100,
                ),
            ],
            # # 不知道为什么要分开三个写,可能是想通过xaxis_index分别配置
            # datazoom_opts=[
            #     opts.DataZoomOpts(
            #         is_show=False, type_="inside", xaxis_index=[0, 0], range_end=100
            #     ),
            #     opts.DataZoomOpts(
            #         is_show=True, xaxis_index=[0, 1], pos_top="97%", range_end=100
            #     ),
            #     opts.DataZoomOpts(is_show=False, xaxis_index=[0, 2], range_end=100),
            # ],
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),
            title_opts=opts.TitleOpts(title="my_echart"),
            tooltip_opts=opts.TooltipOpts(
                trigger="axis",
                axis_pointer_type="cross",
                background_color="rgba(245, 245, 245, 0.8)",
                border_width=1,
                border_color="#ccc",
                textstyle_opts=opts.TextStyleOpts(color="#000"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=5,
                is_piecewise=True,
                pieces=[
                    {
                        "value": 1,
                        "color": "#00da3c"
                    },
                    {
                        "value": -1,
                        "color": "#ec0000"
                    },
                ],
            ),
            # 所有图的axis 连在一块
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{
                    "xAxisIndex": "all"
                }],
                label=opts.LabelOpts(background_color="#777"),
            ),
            brush_opts=opts.BrushOpts(
                x_axis_index="all",
                brush_link="all",
                out_of_brush={"colorAlpha": 0.1},
                brush_type="lineX",
            ),
        ))

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

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

    bar = (
        Bar().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="Volume",
            y_axis=echarts_data['volume'],
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
            #
            # # 变色
            itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                function(params) {
                    var colorList;
                    if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) {
                        colorList = '#ef232a';
                    } else {
                        colorList = '#14b143';
                    }
                    return colorList;
                }
                """)),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                grid_index=1,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                is_scale=True,
                split_number=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

    # Bar-2 (Overlap Bar + Line)
    bar_2 = (
        Bar().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="MACD",
            y_axis=echarts_data['macd'],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                        function(params) {
                            var colorList;
                            if (params.data >= 0) {
                              colorList = '#ef232a';
                            } else {
                              colorList = '#14b143';
                            }
                            return colorList;
                        }
                        """)),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),

                # axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),  # 不显示刻度
                # splitline_opts=opts.SplitLineOpts(is_show=False),   # 不显示刻度
                # axislabel_opts=opts.LabelOpts(is_show=False),
                # split_number=20,
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

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

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

                # axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),  # 不显示刻度
                # splitline_opts=opts.SplitLineOpts(is_show=False),   # 不显示刻度
                # axislabel_opts=opts.LabelOpts(is_show=False),
                # split_number=20,
            ), ))

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

    # Bar-2 (Overlap Bar + Line)
    macd_kdj_bar = (
        Bar().add_xaxis(xaxis_data=date).add_yaxis(
            series_name="MACD_KDJ",
            y_axis=echarts_data['kdj_macd'],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                        function(params) {
                            var colorList;
                            if (params.data >= 0) {
                              colorList = '#ef232a';
                            } else {
                              colorList = '#14b143';
                            }
                            return colorList;
                        }
                        """)),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),

                # axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),  # 不显示刻度
                # splitline_opts=opts.SplitLineOpts(is_show=False),   # 不显示刻度
                # axislabel_opts=opts.LabelOpts(is_show=False),
                # split_number=20,
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

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

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

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

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

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

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

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

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

    grid_chart.render("300368.html")
Пример #20
0
 def to_map_world(self, country, variate, confirmed_glo, update_time):
     pieces = [
         {
             "max": 9999999,
             "min": 1000000,
             "label": ">1000000",
             "color": "#990033"
         },
         {
             "max": 999999,
             "min": 100000,
             "label": "100000-999999",
             "color": "#CC0033"
         },
         {
             "max": 99999,
             "min": 10000,
             "label": "10000-99999",
             "color": "#FF0033"
         },
         {
             "max": 9999,
             "min": 1000,
             "label": "1000-9999",
             "color": "#FF6633"
         },
         {
             "max": 999,
             "min": 100,
             "label": "100-999",
             "color": "#FF9900"
         },
         {
             "max": 99,
             "min": 10,
             "label": "10-99",
             "color": "#FFCC66"
         },
         {
             "max": 9,
             "min": 1,
             "label": "1-9",
             "color": "#FFFFCC"
         },
         {
             "max": 0,
             "min": 0,
             "label": "0",
             "color": "#FFFFFF"
         },
     ]
     c = (
         # 设置地图大小
         Map(init_opts=opts.InitOpts(width='1000px', height='880px')
             ).add("累计确诊人数", [list(z) for z in zip(country, variate)],
                   "world",
                   is_map_symbol_show=False)
         #设置不显示国家名称
         .set_series_opts(label_opts=opts.LabelOpts(is_show=False)
                          ).set_global_opts(
                              title_opts=opts.TitleOpts(
                                  title="世界疫情地图分布",
                                  subtitle='截止{0}世界已确诊人数{1}'.format(
                                      update_time, confirmed_glo),
                                  pos_left="center",
                                  pos_top="10px"),
                              legend_opts=opts.LegendOpts(is_show=False),
                              visualmap_opts=opts.VisualMapOpts(
                                  max_=200,
                                  is_piecewise=True,
                                  pieces=pieces,
                              ),
                          ).render("./map/世界疫情地图.html"))
Пример #21
0
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.faker import Faker
(Map(init_opts=opts.InitOpts(width='900px', height='600px')).add(
    series_name='商家A',
    data_pair=[list(z) for z in zip(Faker.guangdong_city, Faker.values())],
    maptype='广东').set_global_opts(title_opts=opts.TitleOpts(title="Map-广东地图"),
                                  visualmap_opts=opts.VisualMapOpts()).render(
                                      './picture/my_guangdong.html'))
Пример #22
0
    ]
    data.append(temp)
calend = (
    charts.Calendar()
    # range_决定了时间尺度
    .add(series_name='',
         yaxis_data=data,
         calendar_opts=opts.CalendarOpts(range_='2018'))
    # .add(series_name='', yaxis_data=data, calendar_opts=opts.CalendarOpts(range_=['2018-1', '2018-7']))     # range_决定了时间尺度
    .set_global_opts(
        title_opts=opts.TitleOpts(title='Calendar-2018年微信步数'),
        visualmap_opts=opts.VisualMapOpts(
            max_=25000,
            min_=100,
            range_size=[10, 20],  # 不知道干嘛的
            orient='horizontal',
            is_calculable=True,
            is_piecewise=True,  # 颜色条是否分成pieces:True:pices, False:一根长条
            pos_top='230px',
            pos_left='100px',
        ),
    ))
# calend.render('calendar_echats.html')
page.add(calend)

from pyecharts import options as opts
from pyecharts.globals import SymbolType
words = [
    ("Sam S Club", 10000),
    ("Macys", 6181),
    ("Amy Schumer", 4386),
    ("Jurassic World", 4055),
Пример #23
0
def map_visualmap():
    c = (Map().add("男", [list(z) for z in zip(attr_1, value_1)], "china").add(
        "女", [list(z) for z in zip(attr_2, value_2)], "china").set_global_opts(
            title_opts=opts.TitleOpts(title="Map-VisualMap(连续型)"),
            visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True)))
    return c
Пример #24
0
"""

begin = datetime.date(2017, 1, 1)
end = datetime.date(2017, 12, 31)
data = [
    [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
    for i in range((end - begin).days + 1)
]

(
    Calendar(init_opts=opts.InitOpts(width="1600px", height="1000px"))
    .add(
        series_name="",
        yaxis_data=data,
        calendar_opts=opts.CalendarOpts(
            pos_top="120",
            pos_left="30",
            pos_right="30",
            range_="2017",
            yearlabel_opts=opts.LabelOpts(is_show=False),
        ),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(pos_top="30", pos_left="center", title="2017年步数情况"),
        visualmap_opts=opts.VisualMapOpts(
            max_=20000, min_=500, orient="horizontal", is_piecewise=False
        ),
    )
    .render("calendar_heatmap.html")
)
Пример #25
0
def Fang_Scatter(
    filepath, searchType
):  #在当前路径生成一个散点分布图render.html,散点图纵坐标为price/unitPrice,横坐标为想要查询的字段searchType,需要传入数据路径和查询字段
    oridata = pd.read_csv(filepath)
    if (searchType not in oridata.columns):
        print('不存在该字段! No Such attribution!')
        return

    #字段的单位
    unit = {}
    #非数值数据列表
    x_1 = []
    x_1.append('direction')
    x_1.append('rentType')
    x_1.append('houseType')
    unit['direction'] = '方向'
    unit['rentType'] = '整租'
    unit['houseType'] = '户型'

    #不干净的数值型数据
    x_2 = []
    #租房和二手房有不同的价格字段
    if ('price' in oridata.columns):
        x_2.append('price')
    else:
        x_2.append('unitPrice')

    x_2.append('area')
    x_2.append('viewNum')
    x_2.append('floor')
    x_2.append('buildTime')
    unit['area'] = '平米'
    unit['viewNum'] = '人'
    unit['floor'] = '层'
    unit['price'] = '元/月'
    unit['unitPrice'] = '元/m2'
    unit['buildTime'] = '年'

    for i in x_2:
        if (i in oridata.columns):
            oridata[i] = Colum2value(oridata[i])

    #xflag标记是否找到查询字段,=1说明在x_1里,为非数值字段,=2在x_2里
    xflag = 0
    #查找searchType
    for i in x_1:
        if i == searchType:
            xflag = 1
            break

    if xflag == 0:
        for i in x_2:
            if i == searchType:
                xflag = 2
                break

    if xflag == 0:
        print('没有找到该字段! No Such attribution!')
        return

    x = oridata[searchType]
    y = oridata[x_2[0]]

    # %%
    # pyecharts绘图

    c = (Scatter().add_xaxis(x).add_yaxis(
        "price", y, symbol_size=10, label_opts=opts.LabelOpts(is_show=False)))
    if xflag == 1:  #横坐标是类目数据时,改变X轴类型
        c.set_global_opts(
            title_opts=opts.TitleOpts(title=searchType + " with Price"),
            xaxis_opts=opts.AxisOpts(name=searchType + '/' + unit[searchType],
                                     type_="category"),
            yaxis_opts=opts.AxisOpts(name=x_2[0] + '/' + unit[x_2[0]]),
            visualmap_opts=opts.VisualMapOpts(max_=60000),
            datazoom_opts=opts.DataZoomOpts(range_start=0),
        )
    else:
        c.set_global_opts(
            title_opts=opts.TitleOpts(title=searchType + " with Price"),
            xaxis_opts=opts.AxisOpts(name=searchType + '/' + unit[searchType]),
            yaxis_opts=opts.AxisOpts(name=x_2[0] + '/' + unit[x_2[0]]),
            visualmap_opts=opts.VisualMapOpts(max_=100000, min_=10000),
            datazoom_opts=opts.DataZoomOpts(range_start=0),
        )

    c.render()
Пример #26
0
    '江苏': 271,
    '湖南': 521,
    '浙江': 724,
    '海南': 2,
    '广东': 725,
    '湖北': 11177,
    '黑龙江': 121,
    '澳门': 1,
    '陕西': 128,
    '四川': 254,
    '内蒙古': 3,
    '重庆': 312,
    '云南': 6,
    '贵州': 2,
    '吉林': 3,
    '山西': 12,
    '山东': 259,
    '福建': 179,
    '青海': 1,
    '天津': 1,
    '其他': 1
}
provice = list(province_distribution.keys())
values = list(province_distribution.values())

c = (Map().add("确诊人数", [list(z) for z in zip(provice, values)],
               "china").set_series_opts(label_opts=opts.LabelOpts(
                   is_show=False)).set_global_opts(
                       title_opts=opts.TitleOpts(title="全国实时疫情分布地图"),
                       visualmap_opts=opts.VisualMapOpts(max_=1000),
                   ))
Пример #27
0
def map_visualmap(sequence, date) -> Map:
    c = Map()
    c.add(date, sequence, maptype="china")
    c.set_global_opts(title_opts=opts.TitleOpts(title="CBIC:全国各省现存确诊_至4月8号",subtitle="数据来源于丁香园"),legend_opts=opts.LegendOpts(is_show=False),visualmap_opts=opts.VisualMapOpts(is_piecewise=True,\
        pieces=pieces_list))
    # c = (
    #     Map()
    #     .add(date, sequence, maptype="china")
    #     .set_global_opts(
    #         title_opts=opts.TitleOpts(title="全国疫情动态地图_确诊累计人数_截至至3月14号"),
    #         visualmap_opts=opts.VisualMapOpts(max_=1400)
    #     )
    # )
    return c
Пример #28
0
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
map.render('世界疫情(累计确诊).html')


"""


map1 = Map().add(series_name="世界疫情分布",
                data_pair=data_list_new,
                maptype="world",
                name_map=nameMap,
                is_map_symbol_show=False
)

map1.set_global_opts(title_opts=opts.TitleOpts(title="世界疫情(新增确诊)"),
                    visualmap_opts=opts.VisualMapOpts(max_=58000,is_piecewise=True))
map1.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
map1.render('世界疫情(新增确诊).html')


"""
map2 = Map().add(series_name="世界疫情分布",
                data_pair=data_list_dead,
                maptype="world",
                name_map=nameMap,
                is_map_symbol_show=False
)

map2.set_global_opts(title_opts=opts.TitleOpts(title="世界疫情(死亡)"),
                    visualmap_opts=opts.VisualMapOpts(max_=140000,is_piecewise=True))
map2.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
Пример #29
0
    def candlechart(self,str_tscode=None,subset='masterCandle',dat_cursor=None,MA=[5,10,21], renderfile=False) -> Grid:
        str_tscode = DataAgent.formatCode(str_tscode)
        int_chartsize = 500
        if str_tscode == False or str_tscode is None:
            print('invalid sec code provided...')
            return False
        dat_cursor = datetime.now().astimezone(timezone(cfg.STR_TIMEZONE)) if dat_cursor is None else dat_cursor
        closestTradeDate = self.da.int_findClosestTradeDate(datetime.strftime(dat_cursor,'%Y%m%d') )
        tpl_dateindex = tuple(str(i) for i in self.da.df_calTbl.loc[self.da.df_calTbl['cal_date'] <= closestTradeDate]['cal_date'][-int_chartsize:] )

        # 连接储存对象
        if subset=='masterCandle': 
            data_store = libs.tryOpenH5(cfg.H5_FILE_PRE,mode='r')
        else:
            data_store = libs.tryOpenH5('{}{}.dat'.format(cfg.H5_FILE_PATH,subset),mode='r')
        
        # 初始化交易日表格,作为标准交易日序列join个股交易数据
        df_toPlot = data_store['masterCandle'].loc[data_store['masterCandle']['ts_code']==str_tscode]
        df_dateindex = pd.DataFrame({'trade_caldate': tpl_dateindex}).astype(int)
        data_store.close()
        try:
            str_secname = self.da.df_lookupTbl.loc[self.da.df_lookupTbl['ts_code']==str_tscode]['name'].values[0]
            str_sectype = self.da.df_lookupTbl.loc[self.da.df_lookupTbl['ts_code']==str_tscode]['sec_type'].values[0]
        except Exception as e:
            return libs.log_csv(str_cat='WARNING',str_op='candlechart',str_desc='security code {} does not exist in basic info table...'.format(str_tscode))
        str_plotname = '{} - {}'.format(str_tscode,str_secname)

        # 交易日时间轴标准化,补全停牌日,当日live数据等k线
        '''------ 获取实时交易数据部分--------------------'''
        int_liveDate = self.da.int_findClosestTradeDate(datetime.strftime(datetime.now().astimezone(timezone(cfg.STR_TIMEZONE)),'%Y%m%d') )
        if int_liveDate<=closestTradeDate and int_liveDate>df_toPlot['trade_date'].max():
            df_liveQuote = self.da.query('quote_now',[self.da.formatCode(str_tscode,False),])
            if len(df_liveQuote)>0:
                df_liveQuote.rename(columns={'open':'adj_open',
                                'high':'adj_high',
                                'low':'adj_low',
                                'price':'adj_close',
                                'volume':'vol',
                                'amount':'amount'}, inplace=True)
                df_liveQuote=df_liveQuote.astype(dtype= {'adj_open':'float','adj_high':'float','adj_low':'float','adj_close':'float','vol':'float','amount':'float'})                        
                df_liveQuote['trade_date'] = int_liveDate
                df_liveQuote['ts_code'] = str_tscode
                df_liveQuote['vol'] = df_liveQuote['vol']/100 if str_sectype==1 or str_tscode[:3]=='399' else  df_liveQuote['vol']
                df_liveQuote['amount'] = df_liveQuote['amount']/1000
            df_toPlot = df_toPlot.append(df_liveQuote[['ts_code','trade_date','adj_open','adj_high','adj_low','adj_close','vol','amount']],sort=False)
        '''------ 结束 获取实时交易数据部分--------------------'''

        df_toPlot = pd.merge(df_dateindex, df_toPlot, left_on='trade_caldate', right_on='trade_date', how='left')
        df_toPlot['close'].fillna(method='ffill',inplace=True)
        df_toPlot['ts_code'].fillna(method='ffill',inplace=True)
        df_toPlot['klineSML'].fillna('NNNN',inplace=True)
        df_toPlot['adj_close'].fillna(method='ffill',inplace=True)
        df_toPlot['vol'].fillna(value=0,inplace=True)
        df_toPlot['amount'].fillna(value=0,inplace=True)
        df_toPlot['open'].fillna(df_toPlot['close'],inplace=True)
        df_toPlot['high'].fillna(df_toPlot['close'],inplace=True)
        df_toPlot['low'].fillna(df_toPlot['close'],inplace=True)
        df_toPlot['adj_open'].fillna(df_toPlot['adj_close'],inplace=True)
        df_toPlot['adj_high'].fillna(df_toPlot['adj_close'],inplace=True)
        df_toPlot['adj_low'].fillna(df_toPlot['adj_close'],inplace=True)
        self.kchartdf = df_toPlot #输出至可访问对象属性中

        '''-----------------画图部分---------------------'''
        lst_ohlcv=df_toPlot.loc[:,['adj_open','adj_close','adj_low','adj_high']].values.tolist()
        lst_vol=list(df_toPlot['vol'].values)
        lst_amount=list(df_toPlot['amount'].values)
        lst_peaks=list(abs(df_toPlot['peaks'].values))
        # lst_pivotdown=[float('nan') if i<0 else i for i in list(df_toPlot['pivots'].values)]
        lst_pivotdown=[float('nan') if i<0 else i for i in list(df_toPlot['valid_pivots'].values)]
        # lst_pivotup=[float('nan') if i>0 else abs(i) for i in list(df_toPlot['pivots'].values)]
        lst_pivotup=[float('nan') if i>0 else abs(i) for i in list(df_toPlot['valid_pivots'].values)]
        lst_xaxis=list(df_toPlot['trade_caldate'].astype(str))

        def calculate_ma(day_count: int, d):
            result: List[Union[float, str]] = []
            for i in range(len(d)):
                if i < day_count:
                    result.append("-")
                    continue
                sum_total = 0.0
                for j in range(day_count):
                    sum_total += float(d[i - j][1])
                result.append(abs(float("%.3f" % (sum_total / day_count))))
            return result

        kline = (Kline()
            .add_xaxis(lst_xaxis)
            .add_yaxis(series_name=str_secname, y_axis=lst_ohlcv,
                        markpoint_opts=opts.MarkPointOpts(
                            data=[opts.MarkPointItem(type_="min",value_dim="close"),
                                opts.MarkPointItem(type_="max",value_dim="close")],
                            symbol_size = [20, 20], #表示标记宽为 20,高为 10
                        ),                           
                        itemstyle_opts=opts.ItemStyleOpts(
                            color="#ec0000",
                            color0="#00da3c",
                            border_color="#ec0000",
                            border_color0="#00da3c",
                        ),)
            .set_global_opts(
                title_opts=opts.TitleOpts(
                    title=str_plotname,
                    subtitle='MA='+str(MA),
                ),
                xaxis_opts=opts.AxisOpts(type_="category"),
                yaxis_opts=opts.AxisOpts(
                    is_scale=True,
                    splitarea_opts=opts.SplitAreaOpts(
                        is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                    ),
                ),
                legend_opts=opts.LegendOpts(is_show=True, pos_top='10%', pos_left="center"),
                datazoom_opts=[
                    opts.DataZoomOpts(
                        is_show=False,
                        type_="inside",
                        xaxis_index=[0,1,2],
                        range_start=75,
                        range_end=100,
                    ),
                    opts.DataZoomOpts(
                        is_show=True,
                        xaxis_index=[0,1,2],
                        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),
                ),
                # 阴量绿阳量红
                visualmap_opts=opts.VisualMapOpts(
                    is_show=False,
                    dimension=2,
                    series_index=list(map(lambda x: x+len(MA),[4,5])), #动态算出vol和amt柱状图的series index
                    is_piecewise=True,
                    pieces=[
                        {"value": 1, "color": "#ec0000"},
                        {"value": -1, "color": "#00da3c"},
                    ],
                ),  
                axispointer_opts=opts.AxisPointerOpts(
                    is_show=True,
                    link=[{"xAxisIndex": "all"}],
                    label=opts.LabelOpts(background_color="#777"),
                ),
                brush_opts=opts.BrushOpts(
                    x_axis_index="all",
                    brush_link="all",
                    out_of_brush={"colorAlpha": 0.1},
                    brush_type="lineX",
                ),
            )
        )
        trendline = (
            Line()
            .add_xaxis(lst_xaxis)
            .add_yaxis('高低点', lst_peaks,
                        itemstyle_opts=opts.ItemStyleOpts(color="green"))
        )
        for i in MA:
            if i is not None:
                trendline.add_yaxis(
                        series_name='MA'+str(i),
                        y_axis=calculate_ma(day_count=i, d=lst_ohlcv),
                        is_smooth=True,
                        is_hover_animation=False,
                        linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
                        label_opts=opts.LabelOpts(is_show=False),
                )
        trendline.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        trendline.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
        
        keyPoints = (
            EffectScatter()
            .add_xaxis(lst_xaxis)
            .add_yaxis("末跌高", lst_pivotdown,symbol=SymbolType.ARROW,symbol_rotate=180,symbol_size=5,itemstyle_opts=opts.ItemStyleOpts(color="purple"))
            .add_yaxis("末升低", lst_pivotup,symbol=SymbolType.ARROW,symbol_size=5,itemstyle_opts=opts.ItemStyleOpts(color="blue"))
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        )
        vol_bar = (
            Bar()
            .add_xaxis(lst_xaxis)
            .add_yaxis(
                series_name="交易量",
                yaxis_data=[
                [i, lst_vol[i], 1 if lst_ohlcv[i][0] < lst_ohlcv[i][1] else -1]
                for i in range(len(lst_vol))
                ],
                xaxis_index=1,
                yaxis_index=1,
                label_opts=opts.LabelOpts(is_show=False),
            )
            .set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    is_scale=True,
                    grid_index=1,
                    boundary_gap=False,
                    axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                    axistick_opts=opts.AxisTickOpts(is_show=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                    axislabel_opts=opts.LabelOpts(is_show=False),
                    split_number=20,
                    min_="最低",
                    max_="最高",
                ),
                yaxis_opts=opts.AxisOpts(
                    grid_index=1,
                    is_scale=True,
                    split_number=2,
                    axislabel_opts=opts.LabelOpts(is_show=False),
                    axisline_opts=opts.AxisLineOpts(is_show=False),
                    axistick_opts=opts.AxisTickOpts(is_show=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                ),
                legend_opts=opts.LegendOpts(is_show=False),
            )
            # .add_yaxis("交易量", lst_vol,itemstyle_opts=opts.ItemStyleOpts(color="#456A76"))
        )
        amnt_bar = (
            Bar()
            .add_xaxis(lst_xaxis)
            .add_yaxis(
                series_name="交易额",
                yaxis_data=[
                [i, lst_amount[i], 1 if lst_ohlcv[i][0] < lst_ohlcv[i][1] else -1]
                for i in range(len(lst_amount))
                ],
                xaxis_index=2,
                yaxis_index=2,
                label_opts=opts.LabelOpts(is_show=False),
            )
            .set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    is_scale=True,
                    grid_index=2,
                    boundary_gap=False,
                    axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                    axistick_opts=opts.AxisTickOpts(is_show=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                    axislabel_opts=opts.LabelOpts(is_show=False),
                    split_number=20,
                    min_="最低",
                    max_="最高",
                ),
                yaxis_opts=opts.AxisOpts(
                    grid_index=2,
                    is_scale=True,
                    split_number=2,
                    axislabel_opts=opts.LabelOpts(is_show=False),
                    axisline_opts=opts.AxisLineOpts(is_show=False),
                    axistick_opts=opts.AxisTickOpts(is_show=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                ),
                legend_opts=opts.LegendOpts(is_show=False),
            )
            # .add_yaxis("交易额", lst_amount,itemstyle_opts=opts.ItemStyleOpts(color="#456A76"))
        )
        priceChart = kline.overlap(trendline).overlap(keyPoints)
        gridChart = Grid()
        gridChart.add(
            priceChart,
            grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_bottom='40%'),
        )
        gridChart.add(
            vol_bar,
            grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="60%", height='15%'),
        )
        gridChart.add(
            amnt_bar,
            grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="75%"),
        )

        fname = '{}{}.html'.format(cfg.PATH_ANAFILE,'kline')
        gridChart.render(fname) if renderfile else None
        self.kchart = gridChart # 将结果输出到analytics对象属性中用于function以外的调用
        return self
Пример #30
0
    def map(self, area=None):
        """
        话题地理分布
        :param area: 限制区域,默认为中国
        :return:
        """
        if self.maparea:
            if not area or self.maparea == area:
                self.load(QUrl('file:///' + dirname + '/qt/buffer/map.html'))
                self.flag = 4
                return
            if not area:
                area = 'china'

        self.maparea = area
        topicset = self.topic.find()
        temp = {}
        for topic in topicset:
            for item in topic['entity']['Ns']:
                if self.maparea == 'china':
                    city = self.get_province(''.join(item[0]))
                else:
                    city = self.get_city(''.join(item[0]), self.maparea)
                if city:
                    if city not in temp:
                        temp[city] = 0
                    temp[city] += item[1]
        data = []
        for key, value in temp.items():
            data.append([key, value])

        if self.maparea == 'china':
            temparea = '中国'
        else:
            temparea = self.maparea
        max_value = 100
        if temp.values():
            max_value = max(temp.values())
        map = (
            Map()
                .add("话题分布", data, self.maparea)
                .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
                .set_global_opts(
                title_opts=opts.TitleOpts(title="话题分布-" + temparea),
                visualmap_opts=opts.VisualMapOpts(max_=max_value),
            )
        )
        html = map.render_embed()
        html_id = re.search('div id="(.*?)"', html).group(1)
        html = re.sub(r'width:\d+px', 'width:100%', html)

        # JavaScript代码注入,实现点击地图获取点击区域
        js = '''<script>
            new QWebChannel(qt.webChannelTransport, function (channel) {
                window.map = channel.objects.map;
            });       
            chart_html_id.on('click', function(params){      
                area = params.name;
                map.map_click(area);     
            });
            document.onclick = function(e){  
                ctx = e.target.getContext('2d')
                data = ctx.getImageData(e.pageX,e.pageY,1,1).data
                if (data[3] == 0) {
                    map.map_click('china')
                }
            }
            </script>'''
        qwebchanneljs = '<script type="text/javascript" src="qwebchannel.js"></script>'
        html = re.sub('</head>', qwebchanneljs + '</head>', html)
        html = re.sub('</body>', js + '</body>', html)
        html = re.sub('html_id', html_id, html)

        with open(dirname + '/qt/buffer/map.html', 'w') as f:
            f.write(html)
        self.load(QUrl('file:///' + dirname + '/qt/buffer/map.html'))
        self.flag = 4