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
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")
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
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"))
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')
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
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
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
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
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
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
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
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")
# 添加列 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") )
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
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())
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')
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"))
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
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,
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]))
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)
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")
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)))
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
'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")
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'))