Exemple #1
0
def generate_line_html(rows, select=None):
    # 用散点图展示
    line = Line(opts.InitOpts(height='700px', width='1424px', theme=ThemeType.LIGHT))

    x = []
    y1 = []
    y2 = []
    y3 = []

    for row in rows:
        x.append(row['时间'])
        y1.append(row['我的累积收益率'])
        y2.append(row['可转债指数累积收益率'])
        y3.append(row['沪深300累积收益率'])

    line.add_xaxis(x)

    line.add_yaxis("我的涨跌", y1)
    line.add_yaxis("可转债指数涨跌", y2)
    line.add_yaxis("沪深300涨跌", y3)

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

			],

			)

		)
	kline_line = (
			Line()
			.add_xaxis(xaxis_data = data["times"])
			.add_yaxis(
				series_name = "MA5",
				y_axis = calculate_ma(day_count = 5),
				is_smooth = True,
				linestyle_opts = opts.LineStyleOpts(opacity = 0.5),
				label_opts = opts.LabelOpts(is_show = False),
				)
			.set_global_opts(
				xaxis_opts = opts.AxisOpts(
					type_ = "category",
					axislabel_opts = opts.LabelOpts(is_show = False),
				),
				yaxis_opts = opts.AxisOpts(
					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 = kline.overlap(kline_line)

	bar_1 = (
		Bar()
		.add_xaxis(xaxis_data = data["times"])
		.add_yaxis(
			series_name = "Volumn",
			y_axis = data["vols"],
			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",
				axislabel_opts = opts.LabelOpts(is_show = False),

				),
			legend_opts = opts.LegendOpts(is_show = False),
			)
		)
	bar_2 = (
		Bar()
		.add_xaxis(xaxis_data = data["times"])
		.add_yaxis(
			series_name = "MACD",
			y_axis = data["macds"],
			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",
				axislabel_opts = opts.LabelOpts(is_show = False),
				),
			yaxis_opts = opts.AxisOpts(
				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"],
			label_opts = opts.LabelOpts(is_show =False),
			)
		.set_global_opts(
			legend_opts = opts.LegendOpts(is_show = False)
			)
		)
	overlap_bar_line = bar_2.overlap(line_2)


	grid_chart = Grid(init_opts = opts.InitOpts(width = "1400px",height = "800px",theme = ThemeType.ESSOS))
	grid_chart.add_js_funcs("var barData={}".format(data["datas"]))
	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("professional_kline_chart.html")
Exemple #3
0
def kline(stock_data: pd.DataFrame):
    """
    @input: column name ('date', 'open', 'close', 'min', 'max', 'Trading_Volume')
    """
    def calculate_ma(day_count: int, price: list):
        result: List[Union[float, str]] = []
        for i in range(len(price)):
            if i < day_count:
                result.append("-")
                continue
            sum_total = 0.0
            for j in range(day_count):
                sum_total += float(price[i - j])
            result.append(abs(float("%.3f" % (sum_total / day_count))))
        return result

    def process_stock_data(data):
        data = data[["date", "open", "close", "min", "max", "Trading_Volume"]]
        data.columns = ["date", "open", "close", "low", "high", "volume"]
        if is_datetime(data["date"]):
            data_times = data["date"].dt.strftime("%Y-%m-%d").to_list()
        else:
            data_times = data["date"].to_list()
        values = data.values.tolist()
        volumes = []
        for i, tick in enumerate(data.values.tolist()):
            volumes.append([i, tick[5], 1 if tick[1] > tick[2] else -1])
        return {
            "categoryData": data_times,
            "values": values,
            "volumes": volumes,
        }

    chart_data = process_stock_data(stock_data)

    kline_data = [data[1:-1] for data in chart_data["values"]]
    kline = Kline(init_opts=opts.InitOpts(animation_opts=opts.AnimationOpts(
        animation=False), ))
    kline.add_xaxis(xaxis_data=chart_data["categoryData"])
    kline.add_yaxis(
        series_name="kline",
        y_axis=kline_data,
        itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),
    )
    kline.set_global_opts(
        legend_opts=opts.LegendOpts(is_show=True, pos_left="center"),
        datazoom_opts=[
            opts.DataZoomOpts(
                is_show=False,
                type_="inside",
                xaxis_index=[0, 1],
                range_start=85,
                range_end=100,
            ),
            opts.DataZoomOpts(
                is_show=True,
                xaxis_index=[0, 1],
                type_="slider",
                pos_top="85%",
                range_start=85,
                range_end=100,
            ),
        ],
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
        ),
        tooltip_opts=opts.TooltipOpts(
            trigger="axis",
            axis_pointer_type="cross",
            background_color="rgba(245, 245, 245, 0.8)",
            border_width=1,
            border_color="#ccc",
            textstyle_opts=opts.TextStyleOpts(color="#000"),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_show=False,
            dimension=2,
            series_index=5,
            is_piecewise=True,
            pieces=[
                {
                    "value": 1,
                    "color": "#00da3c"
                },
                {
                    "value": -1,
                    "color": "#ec0000"
                },
            ],
        ),
        axispointer_opts=opts.AxisPointerOpts(
            is_show=True,
            link=[{
                "xAxisIndex": "all"
            }],
            label=opts.LabelOpts(background_color="#777"),
        ),
        brush_opts=opts.BrushOpts(
            x_axis_index="all",
            brush_link="all",
            out_of_brush={"colorAlpha": 0.1},
            brush_type="lineX",
        ),
    )

    close = np.array(chart_data["values"])[:, 2]
    ma_items = [5, 10, 20, 60]

    line = Line(init_opts=opts.InitOpts(animation_opts=opts.AnimationOpts(
        animation=False), )).add_xaxis(xaxis_data=chart_data["categoryData"])
    for ma in ma_items:
        line.add_yaxis(
            series_name="MA" + str(ma),
            y_axis=calculate_ma(day_count=ma, price=close),
            is_smooth=True,
            is_symbol_show=False,
            is_hover_animation=False,
            linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
    line.set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))

    bar = Bar(init_opts=opts.InitOpts(animation_opts=opts.AnimationOpts(
        animation=False), ))
    bar.add_xaxis(xaxis_data=chart_data["categoryData"])
    bar.add_yaxis(
        series_name="Volume",
        y_axis=chart_data["volumes"],
        xaxis_index=1,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=False),
    )

    bar.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            is_scale=True,
            grid_index=1,
            boundary_gap=False,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=False),
            split_number=20,
            min_="dataMin",
            max_="dataMax",
        ),
        yaxis_opts=opts.AxisOpts(
            grid_index=1,
            is_scale=True,
            split_number=2,
            axislabel_opts=opts.LabelOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_show=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )

    overlap_kline_line = kline.overlap(line)

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1000px",
        height="800px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    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="63%",
                                height="16%"),
    )
    grid_chart.render("kline.html")
    display(HTML(filename="kline.html"))
    return grid_chart
Exemple #4
0
    for key in source:
        if base_path != "":
            path = base_path + "." + key
        else:
            path = key
        if re.match(r"/^\$/", key):
            pass
        else:
            child = {"name": path, "children": []}
            target["children"].append(child)
            if isinstance(source[key], dict):
                convert(source[key], child, path)
            else:
                target["value"] = source["$count"]


convert(source=data, target=tree_map_data, base_path="")

(TreeMap(init_opts=opts.InitOpts(width="1280px", height="720px")).add(
    series_name="option",
    data=tree_map_data["children"],
    visual_min=300,
    leaf_depth=1,
    label_opts=opts.LabelOpts(position="middle"),
).set_global_opts(
    legend_opts=opts.LegendOpts(is_show=False),
    title_opts=opts.TitleOpts(title="Echarts 配置项查询分布",
                              subtitle="2016/04",
                              pos_left="leafDepth"),
).render("echarts_option_query.html"))
Exemple #5
0
print(china_data)
# 全国疫情地图
# 自定义的每一段的范围,以及每一段的特别的样式。
# pieces = [
#     {'min': 10000, 'color': '#540d0d'},
#     {'max': 9999, 'min': 1000, 'color': '#9c1414'},
#     {'max': 999, 'min': 500, 'color': '#d92727'},
#     {'max': 499, 'min': 100, 'color': '#ed3232'},
#     {'max': 99, 'min': 10, 'color': '#f27777'},
#     {'max': 9, 'min': 1, 'color': '#f7adad'},
#     {'max': 0, 'color': '#f7e4e4'},
# ]
labels = [data[0] for data in china_data]
counts = [data[1] for data in china_data]


p = Pie(init_opts=opts.InitOpts(height="500px"))
p.add("累计确诊",[list(z) for z in zip(labels,counts)],center=["40%","70%"])

# m = Map()
# m.add("累计确诊", [list(z) for z in zip(labels, counts)], 'china')

#系列配置项,可配置图元样式、文字样式、标签样式、点线样式等
p.set_series_opts(label_opts=opts.LabelOpts(font_size=12,formatter="{b}: {c}"),
                  is_show=False)
#全局配置项,可配置标题、动画、坐标轴、图例等
p.set_global_opts(title_opts=opts.TitleOpts(title='全国实时确诊数据',
                                            subtitle='数据来源:丁香园'),                                                                                
                  legend_opts=opts.LegendOpts(is_show=False))       #是否显示视觉映射配置
#render()会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 m.render("mycharts.html")
p.render(path='html/全国实时确诊数据饼图.html')
Exemple #6
0
def generate_bar_html(rows, title):
    x = []
    y = []
    up_count = 0
    down_count = 0
    for row in rows:
        x.append(row[0])
        y.append({'value': row[1], 'range': [row[2], row[3]]})

        if row[3] < 0:
            down_count += row[1]
        elif row[2] > 0:
            up_count += row[1]

    bar = Bar(init_opts=opts.InitOpts(height='700px',
                                      width='1424px',
                                      theme=ThemeType.SHINE,
                                      chart_id="cb_tree_map"))
    bar.add_xaxis(x)
    bar.add_yaxis(
        "个数",
        y,
        yaxis_index=0,
        bar_width=50,
        category_gap='1%',
        gap='1%',
        label_opts=opts.LabelOpts(
            position="top",
            formatter=JsCode("function(x){return x.data[0];}")),
    )
    bar.set_series_opts(itemstyle_opts=opts.ItemStyleOpts(color=JsCode(
        "function(x){return x.data['range'][0]=='0'?'lightgray':(x.data['range'][0] < 0 ? 'lightgreen':'lightcoral')}"
    )))
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
            title="=========" + title + "=========",
            subtitle="(跌:" + str(down_count) + " 涨:" + str(up_count) + ")",
            subtitle_textstyle_opts=opts.TextStyleOpts(font_weight='bold',
                                                       font_size='15px'),
            pos_left='center',
            pos_top='-1px',
        ),
        tooltip_opts=opts.TooltipOpts(is_show=False),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(
            # data=None,
            # type_='category',
            # name_gap=0,
            # name_rotate=90,
            # axislabel_opts=opts.LabelOpts(
            #     rotate=-60,
            # ),
            name='价格涨跌区间',
            name_gap=35,
            is_scale=True,
            name_location='middle',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=True,
                                            # symbol=['none', 'arrow']
                                            )),
        yaxis_opts=opts.AxisOpts(
            type_='value',
            name='个数',
            # name_rotate=90,
            name_gap=35,
            name_location='middle',
            # min_=0,
            # max_=max_value,
            is_scale=True,
            axislabel_opts=opts.LabelOpts(formatter='{value}'),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            # symbol=['none', 'arrow']
                                            )),
    )

    bar_html = bar.render_embed('template.html', html_utils.env)
    return bar_html
Exemple #7
0
def get_year_chart(year: str):
    map_data = [[[x["name"], x["value"]] for x in d["data"]] for d in MapData
                if d["time"] == year][0]
    min_data, max_data = (minNum, maxNum)
    data_mark: List = []
    i = 0
    for x in time_list:
        if x == year:
            data_mark.append(total_num[i])
        else:
            data_mark.append("")
        i = i + 1

    map_chart = (Map().add(
        series_name="",
        data_pair=map_data,
        maptype="world",
        zoom=1,
        center=[119.5, 34.5],
        is_map_symbol_show=False,
        itemstyle_opts={
            "normal": {
                "areaColor": "#323c48",
                "borderColor": "#404a59"
            },
            "emphasis": {
                "label": {
                    "show": Timeline
                },
                "areaColor": "rgba(255,255,255, 0.5)",
            },
        },
    ).set_global_opts(
        title_opts=opts.TitleOpts(
            title="" + str(year) + "全球主要国家(除中国外感染超过300例)NCP实时动态",
            subtitle="",
            pos_left="center",
            pos_top="top",
            title_textstyle_opts=opts.TextStyleOpts(
                font_size=25, color="rgba(255,255,255, 0.9)"),
        ),
        tooltip_opts=opts.TooltipOpts(
            is_show=True,
            formatter=JsCode("""function(params) {
                    if ('value' in params.data) {
                        return params.data.value[2] + ': ' + params.data.value[0];
                    }
                }"""),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_calculable=True,
            dimension=0,
            pos_left="30",
            pos_top="center",
            range_text=["High", "Low"],
            range_color=["lightskyblue", "yellow", "orangered"],
            textstyle_opts=opts.TextStyleOpts(color="#ddd"),
            min_=min_data,
            max_=max_data,
        ),
    ))

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

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

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

    return grid_chart
Exemple #8
0
def god_j_mtm_adapt_bolling_chart(df):
    """子母布林自适应完整图"""

    # 母布林线上轨、下轨数据
    p_uppers = pyecharts_float_values_data(df, 'upper')
    p_lower = pyecharts_float_values_data(df, 'lower')

    # 子布林线上轨、中轨、下轨数据
    uppers = pyecharts_float_values_data(df, 'up', int(1e15))
    lowers = pyecharts_float_values_data(df, 'dn', int(1e15))
    medians = pyecharts_float_values_data(df, 'mtm_mean', int(1e15))
    # 信号信息
    signal_infos = bolling_signals_data(df)

    # k 线
    p_bolling_line = Line().add_xaxis(
        xaxis_data=pyecharts_time_data(df)).add_yaxis(
            y_axis=p_uppers,
            series_name='pUpper',
            markpoint_opts=opts.MarkPointOpts(data=[{
                'value': info[2],
                "coord": [info[0], info[1]],
                "itemStyle": {
                    "color": info[3]
                }
            } for info in signal_infos]),
            is_symbol_show=False,
            label_opts=None,
        ).add_yaxis(
            y_axis=p_lower,
            series_name='pLower',
            is_symbol_show=False,
            label_opts=None,
        )
    ohlc_chart = ohlc_kline_chart(df, x_axis_count=3)
    ohlc_chart.overlap(p_bolling_line)

    # 因子通道
    indicator_line_chart = Line().add_xaxis(
        xaxis_data=pyecharts_time_data(df)).add_yaxis(
            series_name='Upper',
            y_axis=uppers,
            is_smooth=True,
            is_symbol_show=False,
            is_hover_animation=False,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name='Lower',
            y_axis=lowers,
            is_smooth=True,
            is_symbol_show=False,
            is_hover_animation=False,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name='Meian',
            y_axis=medians,
            is_smooth=True,
            is_symbol_show=False,
            is_hover_animation=False,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False), )

    # 资金曲线
    equity_chart = equity_line_chart(df)

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1000px",
        height="800px",
        bg_color="#ffffff",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    grid_chart.add(
        ohlc_chart,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="30%"),
    )
    grid_chart.add(
        indicator_line_chart,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="43%",
                                height="30%"),
    )
    grid_chart.add(
        equity_chart,
        grid_opts=opts.GridOpts(pos_left="10%",
                                pos_right="8%",
                                pos_top="80%",
                                height="10%"),
    )
    return grid_chart
Exemple #9
0
def generate_line_html2(rows, select=None):
    line = Line(
        opts.InitOpts(height='500px', width='1424px', theme=ThemeType.LIGHT))

    x = []
    y1 = []
    y2 = []

    min_y = 10000
    max_y = 0
    for row in rows:
        x.append(row['date'])
        mid_price = row['mid_price']
        avg_premium = row['avg_premium']
        if mid_price > max_y:
            max_y = mid_price
        elif mid_price < min_y:
            min_y = mid_price

        y1.append(mid_price)
        y2.append(avg_premium)
    delta = max_y - min_y
    interval = round(delta / 5, 2)
    star_up1 = round(min_y + interval * 1, 2)
    star_up2 = round(min_y + interval * 2, 2)
    star_up3 = round(min_y + interval * 3, 2)
    star_up4 = round(min_y + interval * 4, 2)

    line.add_xaxis(x)
    line.extend_axis(
        yaxis=opts.AxisOpts(type_='value',
                            name='溢价率平均值(%)',
                            name_rotate=90,
                            name_gap=55,
                            name_location='middle',
                            is_scale=True,
                            axislabel_opts=opts.LabelOpts(
                                formatter='{value}%'),
                            splitline_opts=opts.SplitLineOpts(is_show=False),
                            axisline_opts=opts.AxisLineOpts(
                                is_on_zero=False, symbol=['none', 'arrow'])))

    line.add_yaxis("价格中位数", y1, yaxis_index=0)
    line.add_yaxis("溢价率平均值", y2, yaxis_index=1)

    line.set_global_opts(
        title_opts=opts.TitleOpts(title="用价格中位数估值",
                                  pos_left='center',
                                  pos_top=-5),
        tooltip_opts=opts.TooltipOpts(trigger='axis', ),
        legend_opts=opts.LegendOpts(
            is_show=True,
            pos_top=20,
            # pos_bottom=-50,
            selected_mode='multiple'),
        datazoom_opts={
            'start': 0,
            'end': 100
        },
        toolbox_opts=opts.ToolboxOpts(feature={
            'dataZoom': {},
        }),
        xaxis_opts=opts.AxisOpts(
            # data=None,
            type_='time',
            name='时间',
            name_gap=30,
            is_scale=True,
            name_location='middle',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            # axislabel_opts=opts.LabelOpts(formatter="{value}"), #echarts.format.formatTime('yy-MM-dd', value*1000)
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            symbol=['none', 'arrow'])),
        yaxis_opts=opts.AxisOpts(
            type_='value',
            name='价格中位数(元)',
            name_rotate=90,
            name_gap=55,
            name_location='middle',
            is_scale=True,
            axislabel_opts=opts.LabelOpts(formatter='{value}元'),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            symbol=['none', 'arrow'])),
        visualmap_opts=opts.VisualMapOpts(is_show=True,
                                          type_='color',
                                          pos_top='50',
                                          pos_left='5',
                                          min_=min_y,
                                          max_=max_y,
                                          is_piecewise=True,
                                          split_number=5,
                                          series_index=0,
                                          pieces=[
                                              {
                                                  'min': min_y,
                                                  'max': star_up1,
                                                  'color': '#93CE07',
                                                  'label': '★★★★★'
                                              },
                                              {
                                                  'min': star_up1,
                                                  'max': star_up2,
                                                  'color': '#FBDB0F',
                                                  'label': '★★★★'
                                              },
                                              {
                                                  'min': star_up2,
                                                  'max': star_up3,
                                                  'color': '#FC7D02',
                                                  'label': '★★★'
                                              },
                                              {
                                                  'min': star_up3,
                                                  'max': star_up4,
                                                  'color': '#FD0100',
                                                  'label': '★★'
                                              },
                                              {
                                                  'min': star_up4,
                                                  'max': max_y,
                                                  'color': '#AC3B2A',
                                                  'label': '★'
                                              },
                                          ]),
    )
    line.set_colors(['lightcoral', 'lightskyblue'])
    line.set_series_opts(
        symbol='none',
        smooth=False,
        linestyle_opts=opts.LineStyleOpts(width=2, ),
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            is_silent=True,
            symbol='none',
            label_opts=opts.LabelOpts(
                position='end',
                is_show=False,
                formatter=JsCode("function (params){return params.name}")),
            linestyle_opts=opts.LineStyleOpts(
                color='#333',
                type_='dashed',
            ),
            data=[
                opts.MarkLineItem(y=min_y, name='0%'),
                opts.MarkLineItem(y=star_up1, name='20%'),
                opts.MarkLineItem(y=star_up2, name='40%'),
                opts.MarkLineItem(y=star_up3, name='60%'),
                opts.MarkLineItem(y=star_up4, name='80%'),
                opts.MarkLineItem(y=max_y, name='100%'),
            ]),
    )
    line_html = line.render_embed('template.html', env)
    return line_html
Exemple #10
0
def book_rating_pie(id,num) -> Pie:
    (genre,num) = book_rating(id,num)
    if genre == 0:
        return 0
    c = (
        #     Pie(init_opts=opts.InitOpts(width="", height="", bg_color=""))
        Pie()
        .add(
            series_name="图书评分",
            data_pair=[list(z) for z in zip(["评分5", "评分4", "评分3", "评分2", "评分1"], list(map(float, genre)))],
            center=["45%", "50%"],
            radius=["40%", "55%"],
            label_opts=opts.LabelOpts(
                is_show=True,
                position="outside",
                formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}%  {per|{d}%}  ",
                background_color="#eee",
                border_color="#aaa",
                border_width=1,
                border_radius=4,
                rich={
                    "a": {"color": "#999", "lineHeight": 22, "align": "center"},
                    "abg": {
                        "backgroundColor": "#e3e3e3",
                        "width": "100%",
                        "align": "right",
                        "height": 22,
                        "borderRadius": [4, 4, 0, 0],
                    },
                    "hr": {
                        "borderColor": "#aaa",
                        "width": "100%",
                        "borderWidth": 0.5,
                        "height": 0,
                    },
                    "b": {"fontSize": 16, "lineHeight": 33},
                    "per": {
                        "color": "#eee",
                        "backgroundColor": "#334455",
                        "padding": [2, 4],
                        "borderRadius": 2,
                    },
                },
            ),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="图书评分分布",
                subtitle="数据量:" + str(num),
                #                                   pos_left="center",
                pos_left="38%",
                #                                   pos_top="20",
                #                                   title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
            ),
            legend_opts=opts.LegendOpts(is_show=True,
                                        pos_top="20",
                                        type_="scroll",
                                        pos_left="85%",
                                        orient="vertical"
                                        ),
            toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left="95%",
                                          feature={
                                              "dataZoom": {"yAxisIndex": "none"},
                                              "restore": {},
                                              "saveAsImage": {},
                                          }, ),
        )
        .set_series_opts(
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{a} <br/>{b}: {c}% ({d}%)"
            ),
            #         label_opts=opts.LabelOpts(color="rgba(1, 1, 1, 0.3)"),
        )
        .dump_options_with_quotes()
    )
    return c
Exemple #11
0
def ohlc_kline_chart(df, x_axis_count=2, signal_infos=[]):
    """创建一个 OHLC K线图,并返回
    :time_series 时间数组
    :ohlc_data   K线数据
    :x_axis_count 控制要缩放的 X 轴数量
    """
    time_series = pyecharts_time_data(df)
    ohlc_data = pyecharts_ohlc_data(df)
    kline = (Kline().add_xaxis(xaxis_data=time_series).add_yaxis(
        series_name="K线",
        y_axis=ohlc_data,
        yaxis_index=2,
        itemstyle_opts=opts.ItemStyleOpts(
            color="#314555",
            color0="#ec0000",
            border_color="#314555",
            border_color0="#ec0000",
        ),
        markpoint_opts=opts.MarkPointOpts(data=[{
            'value': info[2],
            "coord": [info[0], info[1]],
            "itemStyle": {
                "color": info[3]
            }
        } for info in signal_infos]),
    ).set_global_opts(
        legend_opts=opts.LegendOpts(
            is_show=True,
            pos_top=10,
            pos_left="center",
        ),
        title_opts=opts.TitleOpts(title=""),
        datazoom_opts=[
            opts.DataZoomOpts(
                is_show=True,
                xaxis_index=list(range(0, x_axis_count)),
                type_="slider",
                pos_top="90%",
                range_start=50,
                range_end=100,
            ),
        ],
        xaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitline_opts=opts.SplitLineOpts(
                is_show=True,
                linestyle_opts=opts.LineStyleOpts(type_='dotted')),
        ),
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
        ),
        tooltip_opts=opts.TooltipOpts(
            trigger="axis",
            axis_pointer_type="cross",
            background_color="rgba(245, 245, 245, 0.8)",
            border_width=1,
            border_color="#ccc",
            textstyle_opts=opts.TextStyleOpts(color="#000"),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_show=False,
            dimension=2,
            series_index=5,
            is_piecewise=True,
            pieces=[
                {
                    "value": 1,
                    "color": "#314555"
                },
                {
                    "value": -1,
                    "color": "#ec0000"
                },
            ],
        ),
        axispointer_opts=opts.AxisPointerOpts(
            is_show=True,
            link=[{
                "xAxisIndex": "all"
            }],
            label=opts.LabelOpts(background_color="#777"),
        ),
        brush_opts=opts.BrushOpts(
            x_axis_index="all",
            brush_link="all",
            out_of_brush={"colorAlpha": 0.1},
            brush_type="lineX",
        ),
    ))
    return kline
Exemple #12
0
def get_themeriver(data, lengend, num_frames):
    '''
    data = [
        ["2015/11/08", 10, "DQ"],
        ["2015/11/09", 15, "DQ"],
        ["2015/11/10", 35, "DQ"],
        ["2015/11/14", 7, "DQ"],
        ["2015/11/15", 2, "DQ"],
        ["2015/11/16", 17, "DQ"],
        ["2015/11/17", 33, "DQ"],
        ["2015/11/18", 40, "DQ"],
        ["2015/11/19", 32, "DQ"],
        ["2015/11/20", 26, "DQ"],
        ["2015/11/08", 35, "TY"],
        ["2015/11/09", 36, "TY"],
        ["2015/11/10", 37, "TY"],
        ["2015/11/11", 22, "TY"],
        ["2015/11/12", 24, "TY"],
        ["2015/11/13", 26, "TY"],
        ["2015/11/14", 34, "TY"],
        ["2015/11/15", 21, "TY"],
        ["2015/11/16", 18, "TY"],
        ["2015/11/17", 45, "TY"],
        ["2015/11/18", 32, "TY"],
        ["2015/11/19", 35, "TY"],
        ["2015/11/20", 30, "TY"],
        ["2015/11/08", 21, "SS"],
        ["2015/11/09", 25, "SS"],
        ["2015/11/10", 27, "SS"],
        ["2015/11/11", 23, "SS"],
        ["2015/11/12", 24, "SS"],
        ["2015/11/13", 21, "SS"],
        ["2015/11/14", 35, "SS"],
        ["2015/11/15", 39, "SS"],
        ["2015/11/16", 40, "SS"],
        ["2015/11/17", 36, "SS"],
        ["2015/11/18", 33, "SS"],
        ["2015/11/19", 43, "SS"],
        ["2015/11/20", 40, "SS"],
        ["2015/11/14", 7, "QG"],
        ["2015/11/15", 2, "QG"],
        ["2015/11/16", 17, "QG"],
        ["2015/11/17", 33, "QG"],
        ["2015/11/18", 40, "QG"],
        ["2015/11/19", 32, "QG"],
        ["2015/11/20", 26, "QG"],
        ["2015/11/21", 35, "QG"],
        ["2015/11/22", 40, "QG"],
        ["2015/11/23", 32, "QG"],
        ["2015/11/24", 26, "QG"],
        ["2015/11/25", 22, "QG"],
        ["2015/11/08", 10, "SY"],
        ["2015/11/09", 15, "SY"],
        ["2015/11/10", 35, "SY"],
        ["2015/11/11", 38, "SY"],
        ["2015/11/12", 22, "SY"],
        ["2015/11/13", 16, "SY"],
        ["2015/11/14", 7, "SY"],
        ["2015/11/15", 2, "SY"],
        ["2015/11/16", 17, "SY"],
        ["2015/11/17", 33, "SY"],
        ["2015/11/18", 40, "SY"],
        ["2015/11/19", 32, "SY"],
        ["2015/11/20", 26, "SY"],
        ["2015/11/21", 35, "SY"],
        ["2015/11/22", 4, "SY"],
        ["2015/11/23", 32, "SY"],
        ["2015/11/24", 26, "SY"],
        ["2015/11/25", 22, "SY"],
        ["2015/11/08", 10, "DD"],
        ["2015/11/09", 15, "DD"],
        ["2015/11/10", 35, "DD"],
        ["2015/11/11", 38, "DD"],
        ["2015/11/12", 22, "DD"],
        ["2015/11/13", 16, "DD"],
        ["2015/11/14", 7, "DD"],
        ["2015/11/15", 2, "DD"],
        ["2015/11/16", 17, "DD"],
        ["2015/11/17", 33, "DD"],
        ["2015/11/18", 4, "DD"],
        ["2015/11/19", 32, "DD"],
        ["2015/11/20", 26, "DD"],
    ]
    '''
    themeriver = (
        ThemeRiver().add(
            #["DQ", "TY", "SS", "QG", "SY", "DD"],
            lengend,
            data,
            singleaxis_opts=opts.SingleAxisOpts(
                pos_bottom="50%", min_=1, max_=num_frames),  #可以通过调整坐标轴来调整图的位置
            label_opts=opts.LabelOpts(is_show=False),
            tooltip_opts=opts.TooltipOpts(formatter="{a}")  #不能用 不知道为什么
        ).set_global_opts(
            title_opts=opts.TitleOpts(title="事件链河流图", subtitle="图例按突发性程度降序排序"),
            #tooltip_opts=opts.TooltipOpts(is_show=True,trigger="item",formatter='{@[0]}'),#formatter目前没效果???
            legend_opts=opts.LegendOpts(type_='scroll',
                                        pos_left="5%",
                                        orient='vertical',
                                        pos_top="55%"))
        #datazoom_opts=opts.DataZoomOpts())#图例设置
    )
    return themeriver
Exemple #13
0
def draw_chart():
    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=split_data_part(),
                symbol=["circle", "none"],
            ),
        ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
            is_silent=True, data=split_data_part())).
        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),
            ],
            # 三个图的 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"]).add_yaxis(
        series_name="MA5",
        y_axis=calculate_ma(day_count=5),
        is_smooth=True,
        linestyle_opts=opts.LineStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
    ).set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=1,
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            grid_index=1,
            split_number=3,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=True),
        ),
    ))
    # Overlap Kline + Line
    overlap_kline_line = kline.overlap(kline_line)

    # Bar-1
    print(data["vols"])
    bar_1 = (
        Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(
            series_name="Volumn",
            y_axis=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",
        y_axis=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="DIF",
        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)))
    # 最下面的柱状图和折线图
    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="3%", pos_right="1%", height="60%"),
    )
    # Volumn 柱状图
    grid_chart.add(
        bar_1,
        grid_opts=opts.GridOpts(pos_left="3%",
                                pos_right="1%",
                                pos_top="71%",
                                height="10%"),
    )
    # MACD DIFS DEAS
    grid_chart.add(
        overlap_bar_line,
        grid_opts=opts.GridOpts(pos_left="3%",
                                pos_right="1%",
                                pos_top="82%",
                                height="14%"),
    )
    grid_chart.render("1.professional_kline_chart.html")
Exemple #14
0
# 添加列
df['价格标签'] = price_cut
cut_purchase = df.groupby('价格标签')['销售额'].sum()
print(cut_purchase)

# 绘制饼图可以清晰地看出各价格区间货品销售额在总体占比情况:
data_pair = [
    list(z)
    for z in zip(cut_purchase.index.tolist(), cut_purchase.values.tolist())
]
# 绘制饼图
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.add('', data_pair, radius=['35%', '60%'])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='不同价格区间的销售额整体表现'),
                     legend_opts=opts.LegendOpts(orient='vertical',
                                                 pos_top='15%',
                                                 pos_left='2%'))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie1.set_colors([
    '#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'
])
pie1.render()


# 玩一个词云图
def get_cut_words(content_series):
    # 读入停用词表
    stop_words = []
    with open(
            r"C:/Users/Maggie/Desktop/Udemy-desktop/xiaoxiangxueyuan/Python认知打卡课课程资料包/资料代码整理/数据分析/解读乐高/stop_words.txt",
            'r',
                    "backgroundColor": "#e3e3e3",
                    "width": "100%",
                    "align": "right",
                    "height": 22,
                    "borderRadius": [4, 4, 0, 0],
                },
                "hr": {
                    "borderColor": "#aaa",
                    "width": "100%",
                    "borderWidth": 0.5,
                    "height": 0,
                },
                "b": {"fontSize": 16, "lineHeight": 33},
                "per": {
                    "color": "#eee",
                    "backgroundColor": "#334455",
                    "padding": [2, 4],
                    "borderRadius": 2,
                },
            },
        ),
    )
    .set_global_opts(legend_opts=opts.LegendOpts(pos_left="right", orient="vertical"),title_opts=opts.TitleOpts(title="面向用例比例"))
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        )
    )
    .render("nested_pies.html")
)
Exemple #16
0
def generate_scatter_html_with_multi_tables(tables,
                                            title="可转债分布情况",
                                            subtitle=None,
                                            select=None,
                                            use_personal_features=True,
                                            price_field_name='转债价格'):
    chart_id = str(abs(hash(title)))
    scatter = Scatter(
        opts.InitOpts(height='700px',
                      width='1424px',
                      theme=ThemeType.LIGHT,
                      chart_id=chart_id))
    scatter.add_js_funcs('chart_' + chart_id +
                         """.on('click', function(params){
            // alert(params)
            popWin.showWin("1200","600", params['data']['value'][3]);
        })
    """)

    for label, table in tables.items():
        if select is not None and label not in select:
            continue

        x = []
        y = []

        point_items = []
        rows = table._rows
        for row in rows:
            record = get_record(table, row)
            if record['溢价率'] is None:
                continue

            x1 = record[price_field_name]
            x.append(x1)
            y1 = record['溢价率'].replace('%', '') * 1
            amount = record.get("持有数量", 0)
            bond_name = record['名称'].replace('转债', '')
            bond_code = record['bond_code']
            bond_code = trade_utils.rebuild_bond_code(bond_code)
            y.append([y1])

            # todo symbol 轮出:triangle 轮入:diamond
            if use_personal_features and record.get(
                    'hold_id') is not None and amount > 0:
                point_items.append(
                    opts.MarkPointItem(
                        coord=[x1, y1],
                        symbol_size=amount,
                        itemstyle_opts=opts.ItemStyleOpts(
                            opacity=0.5,
                            border_color='#000',
                            border_width=1,
                        ),
                        value=[bond_name, x1, y1, bond_code, amount]))
            else:
                point_items.append(
                    opts.MarkPointItem(
                        coord=[x1, y1],
                        # symbol_size=symbol_size,
                        itemstyle_opts=opts.ItemStyleOpts(
                            # color='#fff',
                            # border_color='#000'
                        ),
                        value=[bond_name, x1, y1, bond_code]))

        scatter.add_xaxis(x)

        scatter.add_yaxis(
            label,
            y,
            label_opts=opts.LabelOpts(is_show=False),
            markpoint_opts=opts.MarkPointOpts(
                symbol='circle',
                symbol_size=10,
                data=point_items,
                label_opts=opts.LabelOpts(
                    position='bottom',
                    formatter=JsCode(
                        'function(params){return params.value[0]}'))),
            markline_opts=opts.MarkLineOpts(
                linestyle_opts=opts.LineStyleOpts(type_='dashed'),
                is_silent=True,
                label_opts=opts.LabelOpts(
                    position='end',
                    formatter=JsCode(
                        "function(params){return params.data['name'];}")),
                data=[
                    opts.MarkLineItem(x=utils.trade_utils.MID_X,
                                      name='中位数(' +
                                      str(utils.trade_utils.MID_X) + '元)'),
                    opts.MarkLineItem(y=utils.trade_utils.MID_Y,
                                      name='中位数(' +
                                      str(utils.trade_utils.MID_Y) + '%)'),
                ]))

    # scatter.add_xaxis(x)

    scatter.set_global_opts(
        title_opts=opts.TitleOpts(title=title,
                                  subtitle=subtitle,
                                  pos_left='center'),
        tooltip_opts=opts.TooltipOpts(formatter=get_hover_js_code()),
        legend_opts=opts.LegendOpts(pos_bottom=-5,
                                    # selected_mode='single'
                                    ),
        toolbox_opts=opts.ToolboxOpts(feature={
            'dataZoom': {},
        }),
        # visualmap_opts=opts.VisualMapOpts(
        #     type_="color", max_=150, min_=20, dimension=1
        # ),
        xaxis_opts=opts.AxisOpts(
            # data=None,
            type_='value',
            name='转债价格(元)',
            name_gap=30,
            is_scale=True,
            name_location='middle',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(formatter='{value}元'),
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            symbol=['none', 'arrow'])),
        yaxis_opts=opts.AxisOpts(
            type_='value',
            name='转股溢价率(%)',
            name_rotate=90,
            name_gap=35,
            name_location='middle',
            is_scale=True,
            axislabel_opts=opts.LabelOpts(formatter='{value}%'),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_on_zero=False,
                                            symbol=['none', 'arrow'])))
    scatter_html = scatter.render_embed('template.html', env)
    return scatter_html
Exemple #17
0
from pywebio.output import put_html
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (Pie().add(
    "",
    [list(z) for z in zip(Faker.choose(), Faker.values())],
    center=["35%", "50%"],
).set_global_opts(
    title_opts=opts.TitleOpts(title="Pie-调整位置"),
    legend_opts=opts.LegendOpts(pos_left="15%"),
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))

c.width = "100%"
put_html(c.render_notebook())
Exemple #18
0
if __name__ == '__main__':
    print(year_store_query())
    dataX, dataY1, dataY2 = year_store_query()
    radar = Radar(init_opts=opts.InitOpts(
        width="1280px", height="720px", bg_color="#CCCCCC"))
    radar.add_schema(
        schema=[
            opts.RadarIndicatorItem(name="门店订单金额", max_=34000),
            opts.RadarIndicatorItem(name="门店顾客数", max_=10000),
            opts.RadarIndicatorItem(name="门店商品类型", max_=10000),
            opts.RadarIndicatorItem(name="门店订单量", max_=10000)
        ],
        splitarea_opt=opts.SplitAreaOpts(
            is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
        textstyle_opts=opts.TextStyleOpts(color="#fff"),
    )
    radar.add(
        series_name="Store 1",
        data=[list(dataY1)],
        linestyle_opts=opts.LineStyleOpts(color="#CD0000"),
    )
    radar.add(
        series_name="Store 2",
        data=[list(dataY2)],
        linestyle_opts=opts.LineStyleOpts(color="#5CACEE"),
    )
    radar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    radar.set_global_opts(title_opts=opts.TitleOpts(title="2005年门店竞争优势多维分析"),
                          legend_opts=opts.LegendOpts())
    radar.render('radar.html')
Exemple #19
0
def genGeo(data):
    c = (
        Geo(init_opts=opts.InitOpts(
            width='1800px',
            height='1000px',
            bg_color='#0F1C3C',
        )).add_schema(
            maptype='china',
            itemstyle_opts=opts.ItemStyleOpts(
                border_color=JsCode("""
                    new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                    offset: 0,
                    color: '#00F6FF'
                }, {
                    offset: 1,
                    color: '#53D9FF'
                }], false)
                    """),
                color0='rgba(10,76,139,1)',
                border_width=1.0,
                opacity=0.8,
                color="#012366",
            ),
            label_opts=opts.LabelOpts(
                is_show=False,
                color='rgba(255,144,128,1)',
            ),
            emphasis_itemstyle_opts=opts.ItemStyleOpts(
                area_color='rgba(0,0,0,0)'),
            emphasis_label_opts=opts.LabelOpts(is_show=False),
            zoom=1.2,
        ).add(  # 添加散点图
            "",
            data,
            symbol_size=20,
            color='#EA7552',
            label_opts=opts.LabelOpts(
                is_show=True,
                color="#0f0",
                border_width=2.,
                font_size=18,
                position="inside",
                formatter=JsCode("""
                    function f(param){
                        return param.name + ','+ param.value[2]/10
                    }
                    """),
            )).set_series_opts(
                range_size=[12, 40],
                itemstyle_opts=opts.ItemStyleOpts(
                    border_width=1.0,
                    border_color='#215495',
                ),
                areastyle_opts=opts.AreaStyleOpts(
                    color={
                        "x":
                        0,
                        "y":
                        0,
                        "x2":
                        0,
                        "y2":
                        1,
                        "colorStops": [{
                            "offset": 0,
                            "color": '#073684'
                        }, {
                            "offset": 1,
                            "color": '#061E3D'
                        }],
                    })).set_global_opts(
                        title_opts=opts.TitleOpts(
                            title="全国本科院校分布图",
                            pos_left='40%',
                            pos_top='10%',
                            title_textstyle_opts=opts.TextStyleOpts(
                                color='white', font_size=20)),
                        visualmap_opts=opts.VisualMapOpts(
                            is_show=False,
                            type_='size',
                            min_=4 * 10,
                            max_=80 * 10,
                        ),
                        legend_opts=opts.LegendOpts(is_show=False),
                        tooltip_opts=opts.TooltipOpts(trigger="item",
                                                      formatter=JsCode("""
                    function f(param){
                        return param.name + ','+ param.value[2]/10
                    }
                    """))).render("university-geo.html"))
Exemple #20
0
def costEffectiveLine() -> Line:
    sql = "select area,AVG(rent)/area from house where area >= 5 group by area;"
    with connection.cursor() as cursor:
        cursor.execute(sql)
        rows = cursor.fetchall()
        rows = sorted(rows)
    data = dict(rows)

    x_data = data.keys()
    y_data = data.values()
    # 画图
    c = (Line().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="#c82c42"),
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color="red",
                                          border_color="#c82c42",
                                          border_width=3),
        tooltip_opts=opts.TooltipOpts(is_show=True,
                                      background_color="#196286"),
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="#c82c42"),
    ).set_global_opts(
        title_opts=opts.TitleOpts(
            title="面积性价比折线图",
            pos_top="3%",
            pos_left="center",
            title_textstyle_opts=opts.TextStyleOpts(color="#666666",
                                                    font_size=16),
        ),
        xaxis_opts=opts.AxisOpts(
            name="面积",
            type_="category",
            boundary_gap=False,
            axislabel_opts=opts.LabelOpts(margin=30, color="#666666"),
            axisline_opts=opts.AxisLineOpts(is_show=True),
            axistick_opts=opts.AxisTickOpts(
                is_show=True,
                length=25,
                linestyle_opts=opts.LineStyleOpts(color="#666666"),
            ),
        ),
        yaxis_opts=opts.AxisOpts(
            name="价格/(月租金/平方米)",
            type_="value",
            position="left",
            axislabel_opts=opts.LabelOpts(margin=20, color="#666666"),
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(width=2, color="#666666")),
            axistick_opts=opts.AxisTickOpts(
                is_show=True,
                length=15,
                linestyle_opts=opts.LineStyleOpts(color="#666666"),
            ),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    ).dump_options_with_quotes())
    return c
Exemple #21
0
map = Map(
    options.InitOpts(width='1200px',
                     height='600px',
                     bg_color="#ffffff",
                     page_title='中国疫情地图'))
map.add(
    series_name="累计确诊",  #标签名称
    data_pair=china_data.items(),  #传入数据
    is_map_symbol_show=False,  #不显示标记
    maptype='china',  #地图类型
)
map.set_global_opts(title_opts=options.TitleOpts(title='中国新冠肺炎累计确诊图',
                                                 pos_left='center'),
                    legend_opts=options.LegendOpts(is_show=True,
                                                   pos_left='left',
                                                   pos_top='60%'),
                    visualmap_opts=options.VisualMapOpts(max_=1100000,
                                                         is_piecewise=True,
                                                         pieces=[{
                                                             "max":
                                                             10,
                                                             'color':
                                                             '#fdebcf',
                                                             'label':
                                                             '10人以下'
                                                         }, {
                                                             "min":
                                                             10,
                                                             "max":
                                                             100,
Exemple #22
0
def genGeo(data, datapair):
    c = (
        Geo(init_opts=opts.InitOpts(bg_color='#344b58', )).add_schema(
            maptype="china",
            itemstyle_opts=opts.ItemStyleOpts(
                border_color='#344b58',
                border_width=2.0,
                area_color='rgba(0,0,0,0)',
                color="#eeeeee",
            ),
            label_opts=opts.LabelOpts(
                is_show=False,
                color='rgba(255,144,128,1)',
            ),
            emphasis_itemstyle_opts=opts.ItemStyleOpts(
                area_color='rgba(0,0,0,0)'),
            emphasis_label_opts=opts.LabelOpts(is_show=False)).add(  # 添加动态散点图
                "",
                data,
                type_=ChartType.EFFECT_SCATTER,
                # symbol_size=20,
                effect_opts=opts.EffectOpts(period=5,
                                            scale=5,
                                            brush_type='fill'),
                label_opts=opts.LabelOpts(
                    is_show=True,
                    formatter="{b}",
                    color="rgba(255,144,128,1)",
                    border_width=2.,
                    font_size=18,
                )).
        add(  # 添加线段图
            "geo",
            datapair,
            type_=ChartType.LINES,
            symbol_size=7,
            effect_opts=opts.EffectOpts(symbol="circle",
                                        symbol_size=8,
                                        trail_length=0.08,
                                        color="rgba(255,144,128,1)"),
            linestyle_opts=opts.LineStyleOpts(
                curve=0.5,
                width=2.5,
                opacity=0.8,
                color=JsCode(
                    """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                        offset: 0,
                        color: '#00acea'
                    }, {
                        offset: 1,
                        color: '#FF8C00'
                    }])""")),
            label_opts=opts.LabelOpts(is_show=False)).set_global_opts(
                title_opts=opts.TitleOpts(title="十一人口流动图"),
                visualmap_opts=opts.VisualMapOpts(
                    min_=0,
                    max_=1000,
                    textstyle_opts=opts.TextStyleOpts(color='white')),
                legend_opts=opts.LegendOpts(is_show=False),
                tooltip_opts=opts.TooltipOpts(trigger="item", formatter='{b}'),
            ))
    tl.add(c, "{}年".format(series[i]))
Exemple #23
0
def plot_kline(ka,
               bs=None,
               file_html="kline.html",
               width="1400px",
               height="680px"):
    """

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

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

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

    # draw volume
    bar_1 = (Bar().add_xaxis(xaxis_data=x).add_yaxis(
        series_name="Volumn",
        yaxis_data=df.vol.tolist(),
        xaxis_index=1,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                function(params) {
                    var colorList;
                    if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) {
                        colorList = '#ef232a';
                    } else {
                        colorList = '#14b143';
                    }
                    return colorList;
                }
                """)),
    ).set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=1,
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(is_show=True, position='inside')),
        legend_opts=opts.LegendOpts(is_show=False),
    ))

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

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

    # draw MACD
    overlap_bar_line = bar_2.overlap(line_2)

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

    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="60%"),
    )
    grid_chart.add(
        bar_1,
        grid_opts=opts.GridOpts(pos_left="3%",
                                pos_right="1%",
                                pos_top="71%",
                                height="10%"),
    )
    grid_chart.add(
        overlap_bar_line,
        grid_opts=opts.GridOpts(pos_left="3%",
                                pos_right="1%",
                                pos_top="82%",
                                height="14%"),
    )
    grid_chart.render(path=file_html)
Exemple #24
0
    def genetateLineArea(self,dates,scores,trainning):
        x_data = dates
        y_data = scores

        background_color_js = (
            "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
            "[{offset: 0, color: '#0a243D'}, {offset: 1, color: '#133457'}], false)"
        )
        area_color_js = (
            "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
            "[{offset: 0, color: '#FF6295'}, {offset: 1, color: '#3fbbff0d'}], false)"
        )

        c = (
            Line(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
            .add_xaxis(xaxis_data=x_data)
            .add_yaxis(
                series_name="注册总量",
                y_axis=y_data,
                is_smooth=True,
                is_symbol_show=True,
                symbol="circle",
                symbol_size=6,
                linestyle_opts=opts.LineStyleOpts(color="#fff"),
                label_opts=opts.LabelOpts(is_show=True, position="top", color="white"),
                itemstyle_opts=opts.ItemStyleOpts(
                    color="red", border_color="#fff", border_width=3
                ),
                tooltip_opts=opts.TooltipOpts(is_show=False),
                areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js), opacity=1),
            )
            .set_global_opts(
                title_opts=opts.TitleOpts(
                    title=trainning+"\n历史成绩",
                    pos_bottom="5%",
                    pos_left="center",
                    title_textstyle_opts=opts.TextStyleOpts(color="#fff", font_size=22),
                ),
                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),
            )
            .render("C:\\Users\\dell\\Desktop\\line.html")
            # .render("./datavisual/"+trainning+".html")
        )
        gl.set_value("filename",trainning+".html")
Exemple #25
0
from pywebio.output import put_html
import json

from pyecharts import options as opts
from pyecharts.charts import Graph

with open("les-miserables.json", "r", encoding="utf-8") as f:
    j = json.load(f)
    nodes = j["nodes"]
    links = j["links"]
    categories = j["categories"]

c = (Graph(init_opts=opts.InitOpts(width="1000px", height="600px")).add(
    "",
    nodes=nodes,
    links=links,
    categories=categories,
    layout="circular",
    is_rotate_label=True,
    linestyle_opts=opts.LineStyleOpts(color="source", curve=0.3),
    label_opts=opts.LabelOpts(position="right"),
).set_global_opts(
    title_opts=opts.TitleOpts(title="Graph-Les Miserables"),
    legend_opts=opts.LegendOpts(orient="vertical",
                                pos_left="2%",
                                pos_top="20%"),
))

c.width = "100%"
put_html(c.render_notebook())
def plot(session, individual):
    """
    visualizing data of individual in session
    :param session:
    :param individual:
    :return:
    """
    eeg = SEED_IV(session=session,
                  individual=individual,
                  modal='concat',
                  shuffle=False,
                  balance=False,
                  normalization=1)
    X, Y = eeg.get_X_Y()
    eeg = X[:, :310]
    eye = X[:, 310:]
    eeg = eeg.reshape(-1, 62, 5)
    b, n, d = eeg.shape
    page = Page()
    # 眼动特征可视化
    # 1-12瞳孔直径
    ling_pupil = (Line().add_xaxis([i for i in range(b)]).add_yaxis(
        'pupil diameter 1',
        numpy_vector_to_python(eye[:, 0]),
        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
            'pupil diameter 2',
            numpy_vector_to_python(eye[:, 1]),
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                'pupil diameter 3',
                numpy_vector_to_python(eye[:, 2]),
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    'pupil diameter 4',
                    numpy_vector_to_python(eye[:, 3]),
                    label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                        'pupil diameter mean 1',
                        numpy_vector_to_python(eye[:, 4]),
                        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                            'pupil diameter mean 2',
                            numpy_vector_to_python(eye[:, 5]),
                            label_opts=opts.LabelOpts(
                                is_show=False)).add_yaxis(
                                    'pupil diameter mean 3',
                                    numpy_vector_to_python(eye[:, 6]),
                                    label_opts=opts.LabelOpts(is_show=False)).
                  add_yaxis('pupil diameter mean 4',
                            numpy_vector_to_python(eye[:, 7]),
                            label_opts=opts.LabelOpts(
                                is_show=False)).add_yaxis(
                                    'pupil diameter std 1',
                                    numpy_vector_to_python(eye[:, 8]),
                                    label_opts=opts.LabelOpts(
                                        is_show=False)).add_yaxis(
                                            'pupil diameter std 2',
                                            numpy_vector_to_python(eye[:, 9]),
                                            label_opts=opts.LabelOpts(
                                                is_show=False)).add_yaxis(
                                                    'pupil diameter std 3',
                                                    numpy_vector_to_python(
                                                        eye[:, 10]),
                                                    label_opts=opts.LabelOpts(
                                                        is_show=False)).
                  add_yaxis('pupil diameter std 4',
                            numpy_vector_to_python(eye[:, 11]),
                            label_opts=opts.LabelOpts(
                                is_show=False)).set_global_opts(
                                    title_opts=opts.TitleOpts(
                                        title='pupil diameter feature'),
                                    legend_opts=opts.LegendOpts()))
    page.add(ling_pupil)
    # dispersion
    line_dispersion = (Line().add_xaxis([i for i in range(b)]).add_yaxis(
        'dispersion 1',
        numpy_vector_to_python(eye[:, 12]),
        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
            'dispersion 2',
            numpy_vector_to_python(eye[:, 13]),
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                'dispersion 3',
                numpy_vector_to_python(eye[:, 14]),
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    'dispersion 4',
                    numpy_vector_to_python(eye[:, 15]),
                    label_opts=opts.LabelOpts(is_show=False)).set_global_opts(
                        title_opts=opts.TitleOpts(title='dispersion'),
                        legend_opts=opts.LegendOpts()))
    page.add(line_dispersion)

    #fixation duration
    line_fixation = (Line().add_xaxis([i for i in range(b)]).add_yaxis(
        'fixation 1',
        numpy_vector_to_python(eye[:, 16]),
        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
            'fixation 2',
            numpy_vector_to_python(eye[:, 17]),
            label_opts=opts.LabelOpts(is_show=False)).set_global_opts(
                title_opts=opts.TitleOpts(title='fixation'),
                legend_opts=opts.LegendOpts()))
    page.add(line_fixation)

    # saccade
    line_saccade = (Line().add_xaxis([i for i in range(b)]).add_yaxis(
        'saccade 1',
        numpy_vector_to_python(eye[:, 18]),
        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
            'saccade 2',
            numpy_vector_to_python(eye[:, 19]),
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                'saccade 3',
                numpy_vector_to_python(eye[:, 20]),
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    'saccade 4',
                    numpy_vector_to_python(eye[:, 21]),
                    label_opts=opts.LabelOpts(is_show=False)).set_global_opts(
                        title_opts=opts.TitleOpts(title='saccade'),
                        legend_opts=opts.LegendOpts()))
    page.add(line_saccade)

    # event statistics
    line_event = (Line().add_xaxis([i for i in range(b)]).add_yaxis(
        'event 1',
        numpy_vector_to_python(eye[:, 22]),
        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
            'event 2',
            numpy_vector_to_python(eye[:, 23]),
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                'event 3',
                numpy_vector_to_python(eye[:, 24]),
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    'event 4',
                    numpy_vector_to_python(eye[:, 25]),
                    label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                        'event 5',
                        numpy_vector_to_python(eye[:, 26]),
                        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                            'event 6',
                            numpy_vector_to_python(eye[:, 27]),
                            label_opts=opts.LabelOpts(
                                is_show=False)).add_yaxis(
                                    'event 7',
                                    numpy_vector_to_python(eye[:, 28]),
                                    label_opts=opts.LabelOpts(is_show=False)).
                  add_yaxis(
                      'event 8',
                      numpy_vector_to_python(eye[:,
                                                 29]),
                      label_opts=opts.LabelOpts(
                          is_show=False)).add_yaxis(
                              'event 9',
                              numpy_vector_to_python(eye[:,
                                                         30]),
                              label_opts=opts.LabelOpts(
                                  is_show=False)).set_global_opts(
                                      title_opts=opts.TitleOpts(title='event'),
                                      legend_opts=opts.LegendOpts()))
    page.add(line_event)
    # 62个电极的信息,每个电极的信息,画出五种波
    for i in range(62):
        line = (Line().add_xaxis([i for i in range(b)]).add_yaxis(
            'delta wave',
            numpy_vector_to_python(eeg[:, i, 0]),
            color='red',
            label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                'theta wave',
                numpy_vector_to_python(eeg[:, i, 1]),
                color='yellow',
                label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                    'alpha wave',
                    numpy_vector_to_python(eeg[:, i, 2]),
                    color='green',
                    label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                        'beta wave',
                        numpy_vector_to_python(eeg[:, i, 3]),
                        color='blue',
                        label_opts=opts.LabelOpts(is_show=False)).add_yaxis(
                            'gamma wave',
                            numpy_vector_to_python(eeg[:, i, 4]),
                            color='black',
                            label_opts=opts.LabelOpts(
                                is_show=False)).set_global_opts(
                                    title_opts=opts.TitleOpts(
                                        title='electrode %d' % i),
                                    legend_opts=opts.LegendOpts()))
        page.add(line)
    save_path = '../../chart/Raw_data_visualization/%d/%d' % (session,
                                                              individual)
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    page.render(
        path=os.path.join(save_path, '%d_%d_norm_feature.html' %
                          (session, individual)))
Exemple #27
0
def kline_pro(kline: List[dict],
              fx: List[dict] = None,
              bi: List[dict] = None,
              xd: List[dict] = None,
              bs: List[dict] = None,
              title: str = "缠中说禅K线分析",
              width: str = "1200px",
              height: str = '680px') -> Grid:
    """绘制缠中说禅K线分析结果

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    chart_macd = chart_macd.overlap(line)

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

    grid_chart = Grid(init_opts)
    grid_chart.add(chart_k, grid_opts=grid0_opts)
    grid_chart.add(chart_vol, grid_opts=grid1_opts)
    grid_chart.add(chart_macd, grid_opts=grid2_opts)
    return grid_chart
Exemple #28
0
        'color': '#f27777'
    },
    {
        'max': 9,
        'min': 1,
        'color': '#f7adad'
    },
    {
        'max': 0,
        'color': '#f7e4e4'
    },
]
labels = [data[0] for data in china_data]
counts = [data[1] for data in china_data]

m = Map()
m.add("累计确诊", [list(z) for z in zip(labels, counts)], 'china')

# 系列配置项,可配置图元样式、文字样式、标签样式、点线样式等
m.set_series_opts(label_opts=opts.LabelOpts(font_size=12), is_show=False)
# 全局配置项,可配置标题、动画、坐标轴、图例等
m.set_global_opts(
    title_opts=opts.TitleOpts(title='全国实时确诊数据', subtitle='数据来源:丁香园'),
    legend_opts=opts.LegendOpts(is_show=True),
    visualmap_opts=opts.VisualMapOpts(
        pieces=pieces,
        is_piecewise=True,  # 是否为分段型
        is_show=True))  # 是否显示视觉映射配置
# render()会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 m.render("mycharts.html")
m.render(path='data/全国实时确诊数据.html')
def draw_charts():
    kline_data = [data[1:-1] for data in chart_data["values"]]
    kline = (Kline().add_xaxis(
        xaxis_data=chart_data["categoryData"]).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"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    xaxis_index=[0, 1],
                    range_start=98,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0, 1],
                    type_="slider",
                    pos_top="85%",
                    range_start=98,
                    range_end=100,
                ),
            ],
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),
            tooltip_opts=opts.TooltipOpts(
                trigger="axis",
                axis_pointer_type="cross",
                background_color="rgba(245, 245, 245, 0.8)",
                border_width=1,
                border_color="#ccc",
                textstyle_opts=opts.TextStyleOpts(color="#000"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=5,
                is_piecewise=True,
                pieces=[
                    {
                        "value": 1,
                        "color": "#00da3c"
                    },
                    {
                        "value": -1,
                        "color": "#ec0000"
                    },
                ],
            ),
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{
                    "xAxisIndex": "all"
                }],
                label=opts.LabelOpts(background_color="#777"),
            ),
            brush_opts=opts.BrushOpts(
                x_axis_index="all",
                brush_link="all",
                out_of_brush={"colorAlpha": 0.1},
                brush_type="lineX",
            ),
        ))

    line = (Line().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(
        series_name="MA5",
        y_axis=calculate_ma(day_count=5, data=chart_data),
        is_smooth=True,
        is_hover_animation=False,
        linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
    ).add_yaxis(
        series_name="MA10",
        y_axis=calculate_ma(day_count=10, data=chart_data),
        is_smooth=True,
        is_hover_animation=False,
        linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
    ).add_yaxis(
        series_name="MA20",
        y_axis=calculate_ma(day_count=20, data=chart_data),
        is_smooth=True,
        is_hover_animation=False,
        linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
    ).add_yaxis(
        series_name="MA30",
        y_axis=calculate_ma(day_count=30, data=chart_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=chart_data["categoryData"]).add_yaxis(
        series_name="Volume",
        y_axis=chart_data["volumes"],
        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(init_opts=opts.InitOpts(
        width="1000px",
        height="800px",
        animation_opts=opts.AnimationOpts(animation=False),
    ))
    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="63%",
                                height="16%"),
    )

    grid_chart.render("professional_kline_brush.html")
Exemple #30
0
def drawFunnel(title, data, savedir='./results'):
    checkDir(savedir)
    funnel = (Funnel(init_opts=options.InitOpts(theme=ThemeType.MACARONS))
             .add('', [list(item) for item in data.items()], label_opts=options.LabelOpts(position="inside"))
             .set_global_opts(title_opts=options.TitleOpts(title=title, pos_left='center'), legend_opts=options.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%')))
    funnel.render(os.path.join(savedir, title+'.html'))