def create_wordcloud(self, json_file, title='词云', column='title'): text = self.get_text(json_file, column=column) clear_word = self.split_word(text) data = self.word_counter(clear_word) wd = WordCloud() wd.add(series_name=title, data_pair=data, word_size_range=[40, 150]) wd.set_global_opts(title_opts=opts.TitleOpts(title="你的文章词云", subtitle="基于你的博客数据生成", title_textstyle_opts=opts.TextStyleOpts(font_size=23)), tooltip_opts=opts.TooltipOpts(is_show=True)) # wd.render_notebook() wd.render(self.path + os.sep + 'topic_wordcloud.html')
list = [] for i in range(len(jobNameList)): list.append((jobNameList[i], MaxSalaryList[i])) showJob = [] for i in range(showNum): showJob.append(random.choice(list)) showJobnameArr = [] showSalArr = [] for (job, sal) in showJob: showJobnameArr.append(job) showSalArr.append(sal) showlist = [str(i) for i in range(1, showNum + 1)] (Line().set_global_opts( tooltip_opts=opts.TooltipOpts(is_show=False), xaxis_opts=opts.AxisOpts(type_="category"), yaxis_opts=opts.AxisOpts( type_="value", axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), title_opts=opts.TitleOpts(title="兰州最高薪水折线图")).add_xaxis( xaxis_data=showlist).add_yaxis( series_name="", y_axis=showSalArr, symbol="emptyCircle", is_symbol_show=True, is_smooth=True, label_opts=opts.LabelOpts(is_show=False), ).render("./view/maxSalaryLineChart.html"))
48.7, 18.8, 6.0, 2.3, ], label_opts=opts.LabelOpts(is_show=False), ).extend_axis(yaxis=opts.AxisOpts( name="温度", type_="value", min_=0, max_=25, interval=5, axislabel_opts=opts.LabelOpts(formatter="{value} °C"), )).set_global_opts( tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), xaxis_opts=opts.AxisOpts(type_="category", axispointer_opts=opts.AxisPointerOpts( is_show=True, type_="shadow")), yaxis_opts=opts.AxisOpts( name="水量", type_="value", min_=0, max_=250, interval=50, axislabel_opts=opts.LabelOpts(formatter="{value} ml"), axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), ))
"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(legend_opts=opts.LegendOpts( pos_left='left', orient='vertical')).set_series_opts( tooltip_opts=opts.TooltipOpts( trigger='item', formatter="{a} <br/>{b}: {c} ({d}%)")).set_colors( ['#60acfc', '#32d3eb', '#5bc49f']).render('age_ratio.html'))
"Southern": "南区", "Tai Po": "大埔", "Tsuen Wan": "荃湾", "Tuen Mun": "屯门", "Wan Chai": "湾仔", "Wong Tai Sin": "黄大仙", "Yau Tsim Mong": "油尖旺", "Yuen Long": "元朗", } (Map(init_opts=opts.InitOpts(width="1400px", height="800px")).add_js_funcs( "echarts.registerMap('HK', {});".format(data)).add( series_name="香港18区人口密度", maptype="HK", data_pair=MAP_DATA, name_map=NAME_MAP_DATA, is_map_symbol_show=False).set_global_opts( title_opts=opts.TitleOpts(title="香港18区人口密度 (2011)", subtitle="人口密度数据来自Wikipedia", subtitle_link=WIKI_LINK), tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b}<br/>{c} (p / km2)"), visualmap_opts=opts.VisualMapOpts( min_=800, max_=50000, range_text=["High", "Low"], is_calculable=True, range_color=["lightskyblue", "yellow", "orangered"], ), ).render("population_density_of_HongKong.html"))
def v_tradecost(self, start=None, end=yesterdayobj(), rendered=True): """ visualization giving the average cost line together with netvalue line :returns: pyecharts.line """ funddata = [] costdata = [] pprice = self.price[self.price["date"] <= end] pcftable = self.cftable if start is not None: pprice = pprice[pprice["date"] >= start] pcftable = pcftable[pcftable["date"] >= start] for _, row in pprice.iterrows(): date = row["date"] funddata.append(row["netvalue"]) cost = 0 if (date - self.cftable.iloc[0].date).days >= 0: cost = self.unitcost(date) costdata.append(cost) coords = [] for i, r in pcftable.iterrows(): coords.append([ r.date, pprice[pprice["date"] <= r.date].iloc[-1]["netvalue"] ]) upper = self.cftable.cash.abs().max() lower = self.cftable.cash.abs().min() if upper == lower: upper = 2 * lower def marker_factory(x, y): buy = self.cftable[self.cftable["date"] <= x].iloc[-1]["cash"] if buy < 0: color = "#ff7733" else: color = "#3366ff" size = (abs(buy) - lower) / (upper - lower) * 5 + 5 return opts.MarkPointItem( coord=[x.date(), y], itemstyle_opts=opts.ItemStyleOpts(color=color), # this nested itemstyle_opts within MarkPointItem is only supported for pyechart>1.7.1 symbol="circle", symbol_size=size, ) line = Line() line.add_xaxis([d.date() for d in pprice.date]) line.add_yaxis( series_name="基金净值", y_axis=funddata, is_symbol_show=False, ) line.add_yaxis( series_name="持仓成本", y_axis=costdata, is_symbol_show=False, markpoint_opts=opts.MarkPointOpts( data=[marker_factory(*c) for c in coords], ), ) line.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(is_show=True, type_="slider", range_start=50, range_end=100), opts.DataZoomOpts( is_show=True, type_="slider", orient="vertical", range_start=50, range_end=100, ), ], tooltip_opts=opts.TooltipOpts( is_show=True, trigger="axis", trigger_on="mousemove", axis_pointer_type="cross", ), ) if rendered: return line.render_notebook() else: return line
def draw_line_charts(input_data,input_data2,canshu =[],path=''): canshu_list = [] max0 = int(max(input_data[canshu].max())*1.001) min0 = int(min(input_data[canshu].min())*0.995) print(max0,min0) for i in canshu: canshu_dict0 = {} canshu_dict0[i] = input_data[i] canshu_list.append(canshu_dict0) print(input_data.keys()) print(input_data.tail(100)) input_data['candle_begin_time'] = pd.to_datetime(input_data['candle_begin_time']) time_list = input_data['candle_begin_time'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')).values.tolist() tab = Tab() line_base = Line(init_opts=opts.InitOpts(width="1500px", height="700px", theme=ThemeType.DARK)).add_xaxis(time_list) line_base.add_yaxis(series_name="close:", y_axis=input_data['close'].values, is_symbol_show=False, color="#FF0000") line_base.set_global_opts( datazoom_opts=[opts.DataZoomOpts(range_start=95, range_end=100,), opts.DataZoomOpts( type_="inside", range_start=95, range_end=100, )], title_opts=opts.TitleOpts(title="资金曲线变化"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), yaxis_opts=opts.AxisOpts( is_scale=True, 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=True) ) for ix,v in enumerate(canshu_list): v0:str value0:dict for k,v0 in v.items(): name =k value0 = v0 data0 = pd.DataFrame(value0) data0.fillna(method='bfill',inplace=True) # print(data0) line_base.add_yaxis( series_name=name, y_axis=data0.values.tolist(), yaxis_index=2, linestyle_opts=opts.LineStyleOpts(), label_opts=opts.LabelOpts(is_show=False), ) line_base.extend_axis( yaxis=opts.AxisOpts( name="资金情况", name_location="start", type_="value", max_= max0, min_= min0, is_inverse=False, axistick_opts=opts.AxisTickOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False),)) tab.add(line_base,'资金变化') table0 = Table().add(list(input_data2.columns), input_data2.values.tolist()).set_global_opts( title_opts=ComponentTitleOpts(title="策略统计", subtitle=str(dt.datetime.now()))) table0.add_js_funcs(''' document.write("<p style='color:#FF0000;'> 注释:none </p>" ''') tab.add(table0,'策略统计表') html0 =tab.render(path) if os.path.exists(html0): print("ok!保存在:") print(html0) else: print('保存失败!')
def musics_star_comments_count_scatter(id, num) -> Scatter: (key,val,maxx,num) = musics_star_comments_count(id, num) if key == 0: return 0 x_data = list(map(float, key)) y_data = list(map(int, val)) c = ( Scatter() # init_opts=opts.InitOpts(width="1600px", height="1000px") .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="评论数", y_axis=y_data, # symbol_size=20, label_opts=opts.LabelOpts(is_show=False), ) .set_series_opts() .set_global_opts( title_opts=opts.TitleOpts(title="评论数与评分的关系", subtitle="数据量:" + str(num),), xaxis_opts=opts.AxisOpts( # 坐标轴类型。可选: # 'value': 数值轴,适用于连续数据。 # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。 # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同, # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。 # 'log' 对数轴。适用于对数数据。 type_="value", name="评分", splitline_opts=opts.SplitLineOpts(is_show=True), max_=10, min_=min(x_data) - 1 ), yaxis_opts=opts.AxisOpts( type_="value", name="评论数", axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), # tooltip_opts=opts.TooltipOpts(is_show=True), tooltip_opts=opts.TooltipOpts( trigger="item", formatter="评分 评论数 <br/>{c}条" ), visualmap_opts=opts.VisualMapOpts( # type_="size", max_=int(maxx), # min_=0, range_color=[ "#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", "#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026", ], ), toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left="95%", feature={ "dataZoom": {"yAxisIndex": "none"}, "dataView": {}, "restore": {}, "saveAsImage": {}, }, ), ) .dump_options_with_quotes() ) return c
week_name_list = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"] high_temperature = [11, 11, 15, 13, 12, 13, 10] low_temperature = [1, -2, 2, 5, 3, 2, 0] (Line(init_opts=opts.InitOpts(width="1600px", height="800px")).add_xaxis( xaxis_data=week_name_list).add_yaxis( series_name="最高气温", y_axis=high_temperature, markpoint_opts=opts.MarkPointOpts(data=[ opts.MarkPointItem(type_="max", name="最大值"), opts.MarkPointItem(type_="min", name="最小值"), ]), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="average", name="平均值")]), ).add_yaxis( series_name="最低气温", y_axis=low_temperature, markpoint_opts=opts.MarkPointOpts( data=[opts.MarkPointItem(value=-2, name="周最低", x=1, y=-1.5)]), markline_opts=opts.MarkLineOpts(data=[ opts.MarkLineItem(type_="average", name="平均值"), opts.MarkLineItem(symbol="none", x="90%", y="max"), opts.MarkLineItem(symbol="circle", type_="max", name="最高点"), ]), ).set_global_opts( title_opts=opts.TitleOpts(title="未来一周气温变化", subtitle="纯属虚构"), tooltip_opts=opts.TooltipOpts(trigger="axis"), toolbox_opts=opts.ToolboxOpts(is_show=True), xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False), ).render("temperature_change_line_chart.html"))
def music_rating_pie(id,num) -> Pie: (genre,num) = music_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 musics_star_pubdate_scatter(id, num) -> Scatter: (key,val,num) = musics_star_pubdate(id, num) if key == 0: return 0 x_data = list(map(str, key)) y_data = list(map(float, val)) c = ( Scatter() # init_opts=opts.InitOpts(width="1600px", height="1000px") .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="评分", y_axis=y_data, # symbol_size=20, label_opts=opts.LabelOpts(is_show=False), ) .set_series_opts() .set_global_opts( title_opts=opts.TitleOpts(title="发行时间与评分的关系", subtitle="数据量:" + str(num),), xaxis_opts=opts.AxisOpts( # type_="value", type_='time', name="发行时间", splitline_opts=opts.SplitLineOpts(is_show=True), # max_=10, # min_=min(y_data)-1 ), yaxis_opts=opts.AxisOpts( type_="value", name="评分", axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), max_=10, min_=min(y_data) - 1 ), tooltip_opts=opts.TooltipOpts( is_show=True, trigger="item", formatter="发行时间 评分 <br/>{c}分" ), visualmap_opts=opts.VisualMapOpts( max_=10, range_color=[ "#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", "#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026", ], ), toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left="95%", feature={ "dataZoom": {"yAxisIndex": "none"}, "dataView": {}, "restore": {}, "saveAsImage": {}, }, ), ) .dump_options_with_quotes() ) return c
# visualMap 组件离容器右侧的距离 pos_right='right', ), tooltip_opts=opts.TooltipOpts( # 提示框浮层的背景颜色。 background_color='white', # 提示框浮层的边框宽。 border_width=1, # 文字样式配置项,参考 `series_options.TextStyleOpts` textstyle_opts=opts.TextStyleOpts(color='#00C791'), # 回调函数,回调函数格式: # (params: Object|Array) => string # 参数 params 是 formatter 需要的单个数据集。 formatter=(JsCode(""" function(params){ return params.name + ' : ' + '<br/>' + '现存确诊:'+params.data.value[3] + '<br/>' + '累积确诊:'+params.data.value[0] + '<br/>' + '死亡人数:'+params.data.value[1] + '<br/>' + '治愈人数:'+params.data.value[2]; } """)))) # 默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置 .render("China_2019-nCov_map.html"), ) #system函数可以将字符串转化成命令在服务器上运行,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程;
["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"], ["2015/11/21", 35, "DD"], ["2015/11/22", 40, "DD"], ["2015/11/23", 32, "DD"], ["2015/11/24", 26, "DD"], ["2015/11/25", 22, "DD"], ["2015/11/26", 16, "DD"], ["2015/11/27", 22, "DD"], ["2015/11/28", 10, "DD"], ] (ThemeRiver().add( series_name=x_data, data=y_data, singleaxis_opts=opts.SingleAxisOpts(pos_top="50", pos_bottom="50", type_="time"), ).set_global_opts(tooltip_opts=opts.TooltipOpts( trigger="axis", axis_pointer_type="line")).render("theme_river.html"))
def draw_chan(stock, stock_df, kc, end_time, period): # stock_df_original = stock_df[[ 'date', 'open', 'close', 'low', 'high', 'money' ]] stock_df_bi = kc.getFenBI_df()[['date', 'chan_price']] stock_df_xd = kc.getFenDuan_df()[['date', 'chan_price']] kline = ( # Kline({"theme": ThemeType.DARK}) Kline().add_xaxis( xaxis_data=stock_df_original['date'].tolist(), ).add_yaxis( series_name=stock, y_axis=stock_df_original[['open', 'close', 'low', 'high']].tolist(), itemstyle_opts=opts.ItemStyleOpts( color="#ec0000", color0="#00da3c"), #添加用 Hex 字符串表示的红和绿两种颜色,对应着 K线涨和跌的颜色。 ).set_global_opts( title_opts=opts.TitleOpts(title="缠论", ), xaxis_opts=opts.AxisOpts(type_="category"), # 分割线 yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), legend_opts=opts.LegendOpts(is_show=True), toolbox_opts=opts.ToolboxOpts(), datazoom_opts=[ opts.DataZoomOpts( is_show=False, type_="inside", #xaxis_index=[0, 1], range_start= 0, #添加两个「数据区域缩放」功能,一个看的到(用鼠标拉缩图最下面的 slider),一个看不到(用鼠标直接在图中拉缩),并且设置 xaxis_index =[0,1],表示用 K 线图(index 0)来控制柱状图(index 1)。 range_end=100, ), opts.DataZoomOpts( is_show=True, #xaxis_index=[0, 1], type_="slider", pos_top="90%", range_start= 0, #index为1和2的两幅图的数据局部伸缩跟着index0那幅图,这样就实现了用一根x轴的slider可以任意缩放三幅图的数据 range_end=100, ), ], tooltip_opts=opts.TooltipOpts( trigger="axis", axis_pointer_type="cross", #将两幅图的提示框合并在一起。 background_color="rgba(245, 245, 245, 0.8)", border_width=1, border_color="#ccc", textstyle_opts=opts.TextStyleOpts(color="#000"), ), visualmap_opts=opts.VisualMapOpts( is_show=False, dimension=2, series_index=3, is_piecewise=True, pieces=[ { "value": -1, "color": "#ec0000" }, { "value": 1, "color": "#00da3c" }, ], ), #坐标轴指示器配置和区域选择组件配置使得数据和轴可以一起联动。 axispointer_opts=opts.AxisPointerOpts( is_show=True, link=[{ "xAxisIndex": "all" }], label=opts.LabelOpts(background_color="#777"), ), brush_opts=opts.BrushOpts( x_axis_index="all", brush_link="all", out_of_brush={"colorAlpha": 0.1}, brush_type="linex", ), )) Biline = ( Line().add_xaxis(xaxis_data=stock_df_bi['date'].tolist()).add_yaxis( series_name='笔', y_axis=stock_df_bi['chan_price'].tolist(), is_smooth=False, is_connect_nones=True, is_hover_animation=False, #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"), linestyle_opts=opts.LineStyleOpts(color="red", width=2, opacity=0.5), label_opts=opts.LabelOpts(is_show=True), ) # .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")) ) overlap = kline.overlap(Biline) crp = CentralRegionProcess(kc.getFenDuan_df(), kc, isdebug=False) crp.define_central_region() stock_zs_x, stock_zs_y = crp.convert_to_graph_data() if (stock_df_xd is not None) and (len(stock_zs_x) != 0): # print('if') for i in range(0, len(stock_zs_x), 2): XD_line = ( Line().add_xaxis(xaxis_data=stock_df_xd['date'].tolist()). add_yaxis( series_name='段', y_axis=stock_df_xd['chan_price'].tolist(), is_smooth=False, is_connect_nones=True, is_hover_animation=False, #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"), linestyle_opts=opts.LineStyleOpts(color="blue", width=2, opacity=0.5), label_opts=opts.LabelOpts(is_show=False), ).set_series_opts(markarea_opts=opts.MarkAreaOpts( is_silent=True, data=[[{ 'xAxis': stock_zs_x[i], 'yAxis': stock_zs_y[i] }, { 'xAxis': stock_zs_x[i + 1], 'yAxis': stock_zs_y[i + 1] }]])) # .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")) ) elif stock_df_xd is not None: # print('elif') XD_line = ( Line().add_xaxis(xaxis_data=stock_df_xd['date'].tolist()). add_yaxis( series_name='段', y_axis=stock_df_xd['chan_price'].tolist(), is_smooth=False, is_connect_nones=True, is_hover_animation=False, #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"), linestyle_opts=opts.LineStyleOpts(color="blue", width=2, opacity=0.5), label_opts=opts.LabelOpts(is_show=False), )) overlap = overlap.overlap(XD_line) # MA_line = ( # Line() # .add_xaxis(xaxis_data=stock_df_original['date'].tolist(),) # .add_yaxis( # series_name="MA5", # y_axis= talib.SMA(stock_df['close'],timeperiod = 5).tolist(), # is_smooth=True, # is_hover_animation=False, # linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5), # label_opts=opts.LabelOpts(is_show=False), # ) # .add_yaxis( # series_name="MA10", # y_axis= talib.SMA(stock_df['close'],timeperiod = 10).tolist(), # is_smooth=True, # is_hover_animation=False, # linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5), # label_opts=opts.LabelOpts(is_show=False), # ) # .add_yaxis( # series_name="MA13", # y_axis= talib.SMA(stock_df['close'],timeperiod = 13).tolist(), # is_smooth=True, # is_hover_animation=False, # linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5), # label_opts=opts.LabelOpts(is_show=False), # ) # .add_yaxis( # series_name="MA34", # y_axis= talib.SMA(stock_df['close'],timeperiod = 34).tolist(), # is_smooth=True, # is_hover_animation=False, # linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5), # label_opts=opts.LabelOpts(is_show=False), # ) # .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")) # ) # Volume_Bar = ( # Bar() # .add_xaxis(xaxis_data=stock_df_original['date'].tolist()) # .add_yaxis( # series_name="money", # yaxis_data=stock_df_original['money'].tolist(), # xaxis_index=2, # yaxis_index=2, # label_opts=opts.LabelOpts(is_show=False), # markline_opts=opts.MarkLineOpts( # data=[opts.MarkLineItem(type_="average", name="平均值")] # ), # itemstyle_opts=opts.ItemStyleOpts( # color=JsCode( # """ # function(params) { # var colorList; # if (params.data >= 0) { # colorList = '#ef232a'; # } else { # colorList = '#14b143'; # } # return colorList; # } # """ # # """ # # function(params) { # # var colorList; # # if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) { # # colorList = '#ef232a'; # # } else { # # colorList = '#14b143'; # # } # # return colorList; # # } # # """ # ) # ), # ) # .set_global_opts( # title_opts=opts.TitleOpts( # title='', # ), # xaxis_opts=opts.AxisOpts( # type_="category", # grid_index=2, # is_scale=True, # # axislabel_opts=opts.LabelOpts(is_show=False), # 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=2, # is_scale=True, # split_number=2, # axislabel_opts=opts.LabelOpts(is_show=False), # axisline_opts=opts.AxisLineOpts(is_show=False), # axistick_opts=opts.AxisTickOpts(is_show=False), # splitarea_opts=opts.SplitAreaOpts( # is_show=True, # areastyle_opts=opts.AreaStyleOpts(opacity=1) # ), # ), # # xaxis_opts=opts.AxisOpts(is_scale=True), # legend_opts=opts.LegendOpts(is_show=False), # datazoom_opts=opts.DataZoomOpts(type_="inside"), # ) # ) # # overlap = overlap.overlap(Volume_Bar) print("it's here") if len(stock_zs_x) != 0: for i in range(0, len(stock_zs_x), 2): zs1_line = (Line().add_xaxis( xaxis_data=stock_zs_x[i:i + 2], ).add_yaxis( series_name="中枢", y_axis=np.append(stock_zs_y[i], stock_zs_y[i]), is_smooth=False, is_hover_animation=False, linestyle_opts=opts.LineStyleOpts(color="red", width=1.5, opacity=0.5), label_opts=opts.LabelOpts(is_show=False), ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))) zs2_line = (Line().add_xaxis( xaxis_data=stock_zs_x[i:i + 2], ).add_yaxis( series_name="中枢", y_axis=np.append(stock_zs_y[i + 1:i + 2], stock_zs_y[i + 1:i + 2]), is_smooth=False, is_hover_animation=False, linestyle_opts=opts.LineStyleOpts(color="red", width=1.5, opacity=0.5), label_opts=opts.LabelOpts(is_show=False), ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))) zs3_line = (Line().add_xaxis(xaxis_data=np.append( stock_zs_x[i:i + 1], stock_zs_x[i:i + 1])).add_yaxis( series_name="中枢", y_axis=stock_zs_y[i:i + 2], is_smooth=False, is_hover_animation=False, linestyle_opts=opts.LineStyleOpts(color="red", width=1.5, opacity=0.5), label_opts=opts.LabelOpts(is_show=False), ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))) zs4_line = (Line().add_xaxis(xaxis_data=np.append( stock_zs_x[i + 1:i + 2], stock_zs_x[i + 1:i + 2])).add_yaxis( series_name="中枢", y_axis=stock_zs_y[i:i + 2], is_smooth=False, is_hover_animation=False, linestyle_opts=opts.LineStyleOpts(color="red", width=1.5, opacity=0.5), label_opts=opts.LabelOpts(is_show=False), ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))) zs1 = zs1_line.overlap(zs2_line) zs2 = zs3_line.overlap(zs4_line) zs = zs1.overlap(zs2) overlap.overlap(zs) overlap.render("diagram/{0}@{1}#{2}.html".format(stock[0:6], end_time[0:10], period)) print("it's done")
def world_data_all(): ############################################### world_message = pd.DataFrame(pd.read_excel(readPath+'/世界总体疫情信息/世界总体疫情信息.xlsx')) # 获取当前工作路径下的data数据 data_gb = world_message.groupby(by='continent') ####将世界总体的信息以不同的洲进行分组 world_gb = data_gb.agg(np.sum) world_gb continent = ['亚洲', '其他', '北美洲', '南美洲', '大洋洲', '欧洲', '非洲'] world_continent = continent continent_isUpdated = list(world_gb['isUpdated']) continent_confirmAdd = list(world_gb['confirmAdd']) continent_confirm = list(world_gb['confirm']) continent_dead = list(world_gb['dead']) continent_heal = list(world_gb['heal']) continent_nowConfirm = list(world_gb['nowConfirm']) continent_nowConfirmCompare = list(world_gb['nowConfirmCompare']) continent_ConfirmCompare = list(world_gb['confirmCompare']) continent_healCompare = list(world_gb['healCompare']) continent_deadCompare = list(world_gb['deadCompare']) Line_World = ( Line() .add_xaxis(xaxis_data=world_continent) # .add_yaxis(series_name='新增确诊',yaxis_data=world_confirmAdd) .add_yaxis(series_name='确诊', y_axis=continent_confirm, label_opts=opts.LabelOpts(is_show=False)) .add_yaxis(series_name='死亡', y_axis=continent_dead, label_opts=opts.LabelOpts(is_show=False)) .add_yaxis(series_name='治愈', y_axis=continent_heal, label_opts=opts.LabelOpts(is_show=False)) .add_yaxis(series_name='现存确诊', y_axis=continent_nowConfirm, label_opts=opts.LabelOpts(is_show=False)) .set_global_opts(title_opts=opts.TitleOpts(title='各大洲总信息', pos_left='50%', pos_top='10%'), tooltip_opts=opts.TooltipOpts(axis_pointer_type='cross')) ) Pie_continent_confirm = ( Pie() .add(series_name='死亡', data_pair=[(i, j) for i, j in zip(world_continent, continent_dead)], rosetype='radius') # .add(series_name='确诊',data_pair=[(i,j) for i,j in zip(continent_continent,continent_confirm)]) ) Pie_continent_heal = ( Pie() .add(series_name='治愈', data_pair=[(i, j) for i, j in zip(world_continent, continent_heal)], rosetype='radius') ) Pie_continent_nowconfirm = ( Pie() .add(series_name='现存确诊', data_pair=[(i, j) for i, j in zip(world_continent, continent_nowConfirm)], rosetype='radius') ) # Pie_continent_confirm.render(savaPath + '\\daliy_changes_view\\各大洲确诊信息.html') # Pie_continent_heal.render(savaPath + '\\daliy_changes_view\\各大洲治愈信息.html') # Pie_continent_nowconfirm.render(savaPath + '\\daliy_changes_view\\各大洲现存确诊信息.html') # Line_World.render(savaPath + '\\daliy_changes_view\\各大洲总信息.html') if flag: dwf.write_to_file(savaPath + '/各大洲确诊信息.txt',str(Pie_continent_confirm.dump_options_with_quotes())) dwf.write_to_file(savaPath + '/各大洲治愈信息.txt',str(Pie_continent_heal.dump_options_with_quotes())) dwf.write_to_file(savaPath + '/各大洲现存确诊信息.txt',str(Pie_continent_nowconfirm.dump_options_with_quotes())) dwf.write_to_file(savaPath + '/各大洲总信息.txt',str(Line_World.dump_options_with_quotes())) page.add(Pie_continent_confirm) page.add(Pie_continent_heal) page.add(Pie_continent_nowconfirm) page.add(Line_World)
'elementType': 'labels.text.fill', 'stylers': { 'visibility': 'off' } }] })) for index, row in X.iterrows(): c = c.add_coordinate(index, row['y'], row['x']) for group in X.groupby('labels'): c = c.add(series_name=group[0], type_="scatter", is_large=True, large_threshold=2000, symbol_size=5, label_opts=opts.LabelOpts(is_show=False), tooltip_opts=opts.TooltipOpts(formatter='{c}'), data_pair=[ list(z) for z in zip(list(group[1].index), group[1]['labels']) ]) c = (c.add_control_panel( navigation_control_opts=opts.BMapNavigationControlOpts( position=BMapType.ANCHOR_TOP_LEFT), maptype_control_opts=opts.BMapTypeControlOpts())) c = c.set_global_opts(title_opts=opts.TitleOpts(title="Clusters of Crime")) c.render(name + 'scatter.html') # In[393]: map_c = pd.read_csv('dbscanoutput.csv')[:10000] map_c.columns = ['x', 'y', 'labels']
] ], "outliers": [], }, ] c = (Boxplot( init_opts=opts.InitOpts(width="1600px", height="800px")).add_xaxis( xaxis_data=axis_data).add_yaxis( series_name="category0", y_axis=data[0]["boxData"], tooltip_opts=opts.TooltipOpts( formatter=JsCode("""function(param) { return [ 'Experiment ' + param.name + ': ', 'upper: ' + param.data[0], 'Q1: ' + param.data[1], 'median: ' + param.data[2], 'Q3: ' + param.data[3], 'lower: ' + param.data[4] ].join('<br/>') }""")), ).add_yaxis( series_name="category1", y_axis=data[1]["boxData"], tooltip_opts=opts.TooltipOpts( formatter=JsCode("""function(param) { return [ 'Experiment ' + param.name + ': ', 'upper: ' + param.data[0], 'Q1: ' + param.data[1], 'median: ' + param.data[2], 'Q3: ' + param.data[3], 'lower: ' + param.data[4]
pos_top="40px", pos_left="center", title="TITLE", subtitle="SUBTITLE", title_textstyle_opts=txt_opts ) # %% # ## SERIES OPTIONS # ### Explaination Options TOOlTIP = { "click": opts.TooltipOpts( is_show=True, trigger="item", trigger_on="click", axis_pointer_type="shadow", formatter="名称:{a} <br/> {b}: {c}%" ), "mouse": opts.TooltipOpts( is_show=True, trigger="axis", trigger_on="mousemove", axis_pointer_type="cross", formatter="名称:{a} <br/> {b}: {c}%" ), "hidden": opts.TooltipOpts( is_show=False ) } LABEL_OPTS = {
def grid_muti_yaxis(): x_data = ["{}月".format(i) for i in range(1, 13)] bar = ( Bar() .add_xaxis(x_data) .add_yaxis( "蒸发量", [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], yaxis_index=0, color="#d14a61", ) .add_yaxis( "降水量", [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], yaxis_index=1, color="#5793f3", ) .extend_axis( yaxis=opts.AxisOpts( name="蒸发量", type_="value", min_=0, max_=250, position="right", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="d14a61") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ) ) .extend_axis( yaxis=opts.AxisOpts( type_="value", name="温度", min_=0, max_=25, position="left", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#675bba") ), axislabel_opts=opts.LabelOpts(color="#{value} °C"), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1) ), ) ) .set_global_opts( yaxis_opts=opts.AxisOpts( name="降水量", min_=0, max_=250, position="right", offset=80, axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#5793f3") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ), title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), ) ) line = ( Line() .add_xaxis(x_data) .add_yaxis( "平均温度", [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2], yaxis_index=2, color="#675bba", label_opts=opts.LabelOpts(is_show=False), ) ) bar.overlap(line) return Grid().add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
1、迷之颜色映射的问题 """ x_data = ["直接访问", "邮件营销", "联盟广告", "视频广告", "搜索引擎"] y_data = [335, 310, 274, 235, 400] data_pair = [list(z) for z in zip(x_data, y_data)] data_pair.sort(key=lambda x: x[1]) (Pie(init_opts=opts.InitOpts( width="1600px", height="800px", bg_color="#2c343c")).add( series_name="访问来源", data_pair=data_pair, rosetype="radius", radius="55%", center=["50%", "50%"], label_opts=opts.LabelOpts(is_show=False, position="center"), ).set_global_opts( title_opts=opts.TitleOpts( title="Customized Pie", pos_left="center", pos_top="20", title_textstyle_opts=opts.TextStyleOpts(color="#fff"), ), legend_opts=opts.LegendOpts(is_show=False), ).set_series_opts( tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"), label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"), ).render("customized_pie.html"))
def draw_charts(kline_data ,canshu ={} ,canshu2={},vol_bar=False,markline_show1 =False ,markline_show2 =False, path = '0501'): ''' df['candle_begin_time','open','high','low','close','volume'] [['candle_begin_time','open','high','low','close','volume']] kdata = df[['open', 'high', 'low', 'close']].values.tolist() df['candle_begin_time'].values.tolist() :return: ''' df = kline_data.copy() df['candle_begin_time'] = pd.to_datetime(df['candle_begin_time']) time_list = df['candle_begin_time'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')).values.tolist() vol = df['volume'].values.tolist() kline = Kline() kline.add_xaxis(xaxis_data=time_list) signal_pos_list = [] if 'signal' in df.columns: print('signal,存在!') df['pos'] = df['signal'].shift(1) for i in df[df['pos'] > 0].index: bar0 = df.iloc[i] sig_pos0 = opts.MarkPointItem(name="做多", coord=[bar0['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),bar0.low -2], value='买', symbol ='circle', symbol_size =[20,40], itemstyle_opts = {'color': 'red'}) signal_pos_list.append(sig_pos0) for i in df[df['pos'] < 0].index: bar0 = df.iloc[i] sig_pos0 = opts.MarkPointItem(name="做空", coord=[bar0['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),bar0.high +3], value='卖', symbol='circle', symbol_size=[20, 40], itemstyle_opts={'color': 'blue'}) signal_pos_list.append(sig_pos0) for i in df[df['pos'] == 0].index: bar0 = df.iloc[i] sig_pos0 = opts.MarkPointItem(name="平仓", coord=[bar0['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'),bar0.low - 2], value='平', symbol ='triangle', symbol_size =[20,40], itemstyle_opts = {'color': 'green'}) signal_pos_list.append(sig_pos0) else : df['pos'] =None markline =[] if markline_show1 and ('signal' in df.columns) : area_index_list =[i for i in df[(df['pos'] ==0)|(df['pos'] >0)|(df['pos'] <0)].index] for ix,i in enumerate(area_index_list): if ix+1 > len(area_index_list)-1: break i_now = df.iloc[area_index_list[ix]] i_next = df.iloc[area_index_list[ix+1]] if (i_now['pos'] >0) or (i_now['pos'] <0) : log_info = f"价差:={i_next['open']-i_now['open']}--({i_next['open']}-{i_now['open']})" else : log_info =f"平仓:{i_next['open']}---开仓:{i_now['open']}" sig_area = [{"xAxis": i_now['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'), "yAxis": i_now['open'] , "value": None}, {"xAxis": i_next['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'), "yAxis": i_now['open'], "value":log_info}] sig_area_v = [{"xAxis": i_next['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'), "yAxis": i_now['open'] , "value": None}, {"xAxis": i_next['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'), "yAxis": i_next['open'], "value":None}] markline.append(sig_area) markline.append(sig_area_v) elif markline_show2 and ('signal' in df.columns): area_index_list =[i for i in df[(df['pos'] ==0)|(df['pos'] >0)|(df['pos'] <0)].index] for ix,i in enumerate(area_index_list): i_now = df.iloc[area_index_list[ix]] i_1_now = df.iloc[area_index_list[ix-1]] if ix != 0 else 0 if i_now['pos'] == 0: log_info = f"交易价: {round(i_now['open'], 1)} +- 2__盈亏:{round(i_now['open'], 1) - round(i_1_now['open'], 1)}" else: log_info = f"交易价: {round(i_now['open'],1)} +- 2" sig_area = [{"xAxis": i_now['candle_begin_time'].strftime('%Y-%m-%d %H:%M:%S'), "yAxis": i_now['open'] , "value": None}, {"xAxis": (i_now['candle_begin_time']+timedelta(minutes=15)).strftime('%Y-%m-%d %H:%M:%S'), "yAxis": i_now['open'], "value":log_info}] markline.append(sig_area) colors = {'red': 'rgb((220,20,60)','red2': 'rgb((250,20,40)', 'yangzi': 'rgb(255,0,255)', 'zi': 'rgb(128,0,128)', 'sehnzi': 'rgb(148,0,211)', 'blue': 'rgb(0,0,255)', 'qing': 'rgb(0,255,255)', 'black': 'rgb(0,0,0)', 'shengreen': 'rgb(157,255,212)', 'green': 'rgb(0,255,0)', 'yellow': 'rgb(255,255,0)', 'glod': 'rgb(218,165,32)', 'orange': 'rgb(255,165,0)', 'brown': 'rgb(165,42,42)'} kline.add_xaxis(xaxis_data=time_list) kline.add_yaxis(series_name="oclh", xaxis_index=1, yaxis_index=1, y_axis =df.loc[:, ['open', 'close', 'low', 'high']].values.tolist(), markline_opts=opts.MarkLineOpts(data=markline, linestyle_opts=opts.LineStyleOpts(type_='dotted',width=3,color='red',opacity=0.5), label_opts=opts.LabelOpts(position="right", color="blue", font_size=13),), #官网给出的样本 markpoint_opts=opts.MarkPointOpts(data=signal_pos_list), itemstyle_opts=opts.ItemStyleOpts(color="#ec0090", color0="#00aa3c"), ) kline.set_global_opts( legend_opts=opts.LegendOpts(is_show=True,pos_top=30, pos_left="left",orient='vertical'), datazoom_opts=[ opts.DataZoomOpts( is_show=False, type_="inside", xaxis_index=[0, 1], range_start=90, range_end=100, orient='vertical'), opts.DataZoomOpts( is_show=True, xaxis_index=[0, 1], type_="slider", pos_top="20%", range_start=90, range_end=100,orient='vertical'),], yaxis_opts =opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),), title_opts=opts.TitleOpts( title = 'K_line', pos_top='middle', title_textstyle_opts=opts.TextStyleOpts( color='black',font_weight='bold' ,font_size=20)), tooltip_opts=opts.TooltipOpts( trigger="axis", trigger_on='"mousemove"',#click|mousemove axis_pointer_type="cross", is_show_content=True, is_always_show_content=True, background_color="rgba(20, 105, 245, 0.1)", border_width=1, border_color= "#ccc", position = ['70%','30%'], textstyle_opts=opts.TextStyleOpts(font_size=10,color="#000"),), visualmap_opts=opts.VisualMapOpts( is_show=True, 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",), ) if len(canshu.keys())>0: cos = list(colors.values()) line = Line() for k,v in canshu.items(): line.add_xaxis(xaxis_data=time_list) line.set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")) co = cos.pop() line.add_yaxis( series_name=k, y_axis = [y for y in v.values.tolist() if y != np.nan], xaxis_index=1, yaxis_index=1, is_smooth=False, is_connect_nones=False,# 是否连接空数据 is_symbol_show=False,#是否显示值的位置,默认显示。 color = co, is_hover_animation = False, # 是否开启 hover 在拐点标志上的提示动画效果。 linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.9,color=co), label_opts=opts.LabelOpts(is_show =True,position='middle',distance=2,rotate=5,color = 'rgb(165,42,42)'), itemstyle_opts=opts.ItemStyleOpts(color=co),) kline = kline.overlap(line) grid_chart = Grid(init_opts=opts.InitOpts(width = "1500px",height= "700px",theme=ThemeType.DARK)) grid_chart.add(kline,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%",pos_top='4%' ,height="70%")) if( vol_bar == True) or (len(canshu2.keys())==0): bar = Bar() bar.add_xaxis(xaxis_data=time_list) bar.add_yaxis( series_name="volume", y_axis=vol, xaxis_index=1, yaxis_index=2, 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=True), ) grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="80%", height="15%"),) if len(canshu2.keys())>0 : line2 = Line() line2.add_xaxis(xaxis_data=time_list) for i, k in enumerate(canshu2.keys()): co = random.choice(list(colors.values())) line2.add_yaxis( series_name=k, y_axis=[y for y in canshu2[k].values.tolist()], xaxis_index=1, yaxis_index=i + 1, is_smooth=True, is_symbol_show=False, is_hover_animation=True, color=co, z_level=0, linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.5, color=co), label_opts=opts.LabelOpts(is_show=False), ) if k == list(canshu2.keys())[-1]: continue line2.extend_axis(yaxis=opts.AxisOpts(name=k, type_="value", position="right", min_=None, max_=None, axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=co)), axislabel_opts=opts.LabelOpts(formatter="{value}"), )) line2.set_global_opts(xaxis_opts=opts.AxisOpts( type_="category", is_scale=True, grid_index=1, split_number=20, min_="dataMin", max_="dataMax", 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), ), yaxis_opts=opts.AxisOpts(name=k, grid_index=i + 1, position='right', splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), min_=None, max_=None, is_scale=True, offset=50, ), ) grid_chart.add(line2,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="75%", height="23%"),is_control_axis_index=True) tab = Tab() zijin_data = (kline_data['per_lr'].cumsum()) zijin_data.fillna(method='ffill', inplace=True) zijin_line = Line(init_opts=opts.InitOpts(width = "1500px",height= "700px",theme=ThemeType.DARK)).add_xaxis(time_list) zijin_line.add_yaxis(series_name="zijin_line:", y_axis=zijin_data.values, color="#FF0000") zijin_line.set_global_opts( datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], title_opts=opts.TitleOpts(title="资金曲线变化"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), yaxis_opts = opts.AxisOpts( is_scale=True, 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=True) ) tab.add(grid_chart,'kline' ) tab.add(zijin_line,'资金曲线变化' ) tab.render(f"{path}.html") html0 = tab.render(f"{path}.html") if os.path.exists(html0): print("ok!保存在:") print(html0) else: print('保存失败!')
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 draw_charts(x_axis_list, oclh_data_list, volume_list, tech_line_dict): upColor = '#ec0000' downColor = '#00da3c' upBorderColor = '#8A0000' downBorderColor = '#008F2' kline = (Kline().add_xaxis(x_axis_list).add_yaxis( series_name="kline", y_axis=oclh_data_list, markpoint_opts=opts.MarkPointOpts( data=gen_mark_points_data_list())).set_series_opts( itemstyle_opts=opts.ItemStyleOpts( color=upColor, color0=downColor, border_color=upBorderColor, border_color0=downBorderColor), ).set_global_opts( legend_opts=opts.LegendOpts(pos_bottom=10, pos_left="center"), xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( 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": downColor }, { "value": -1, "color": upColor }, ], ), datazoom_opts=[ opts.DataZoomOpts( type_="inside", xaxis_index=[0, 1], range_start=98, range_end=100, ), opts.DataZoomOpts( type_="slider", xaxis_index=[0, 1], range_start=98, range_end=100, pos_top='85%', ) ], 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", ), title_opts=opts.TitleOpts(title="Kline"))) if tech_line_dict: line = (Line().add_xaxis(xaxis_data=x_axis_list).set_global_opts( xaxis_opts=opts.AxisOpts(type_="category"))) [ line.add_yaxis( series_name=name, y_axis=value_list, is_smooth=True, is_hover_animation=False, linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5), label_opts=opts.LabelOpts(is_show=False), ) for name, value_list in tech_line_dict.items() ] kline = kline.overlap(line) bar = (Bar().add_xaxis(x_axis_list).add_yaxis( series_name="成交量", yaxis_data=volume_list, 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), )) grid_chart = Grid(init_opts=opts.InitOpts( width="2000px", height="800px", animation_opts=opts.AnimationOpts(animation=False), )) grid_chart.add(kline, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="50%")) grid_chart.add(bar, grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="63%", height="16%")) folder_path = get_folder_path("backtesting_result_pyecharts") file_path = f"{folder_path}/render.html" grid_chart.render(path=file_path) return file_path
def draw_bar(cls, title: str, xaxis_data: List[str], yaxis_data: pd.DataFrame) -> Bar: """ 根据df内容绘制柱状图 :param title: 标题 :param xaxis_data: 横轴数据 :param yaxis_data: 纵轴绘制数据 :return: """ # 获取dataframe最大最小值 min_data = yaxis_data.min().min() max_data = yaxis_data.max().max() c = ( Bar(init_opts=opts.InitOpts( width=DEFAULT_WIDTH, animation_opts=opts.AnimationOpts( animation_delay=200, animation_easing="bounceOut"), # 增加启动动效 )).add_xaxis(xaxis_data).set_series_opts(label_opts=opts.LabelOpts( is_show=True)). set_global_opts( title_opts=opts.TitleOpts(title=title, pos_left="0%"), toolbox_opts=opts.ToolboxOpts(), # 显示工具箱 tooltip_opts=opts.TooltipOpts(is_show=True), axispointer_opts=opts.AxisPointerOpts( is_show=True, type_="none"), # 指针移动时显示所有数值 legend_opts=opts.LegendOpts( is_show=True, selected_mode="multiple", # pos_bottom="0%", # pos_right="0%", # orient="vertical", ), # 显示图例说明 datazoom_opts=[ opts.DataZoomOpts( range_start=0, range_end=100, orient="vertical", pos_left=DATAZOOM_VERTICAL_POS_LEFT, ), opts.DataZoomOpts(range_start=0, range_end=100, orient="horizontal"), ], # 增加缩放配置横纵轴都支持缩放 # visualmap_opts=opts.VisualMapOpts(type_="color", max_=1, min_=-1), # visualmap_opts = opts.VisualMapOpts(max_ = max_data, min_ = min_data) )) # 遍历dataframe 依次添加数据到y轴 column_list = yaxis_data.columns.tolist() for column in column_list: c.add_yaxis( column, yaxis_data[column].tolist(), # markpoint_opts=opts.MarkPointOpts( # data=[ # opts.MarkPointItem(type_="min"), # opts.MarkPointItem(type_="max"), # ] # ), ) return c
750, 800, 700, 600, 400, ] c = (Line().add_xaxis(xaxis_data=x_data).add_yaxis( series_name="用电量", y_axis=y_data, is_smooth=True, label_opts=opts.LabelOpts(is_show=False), linestyle_opts=opts.LineStyleOpts(width=2), ).set_global_opts( title_opts=opts.TitleOpts(title="一天用电量分布", subtitle="纯属虚构"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), xaxis_opts=opts.AxisOpts(boundary_gap=False), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(formatter="{value} W"), splitline_opts=opts.SplitLineOpts(is_show=True), ), visualmap_opts=opts.VisualMapOpts( is_piecewise=True, dimension=0, pieces=[ { "lte": 6, "color": "green" }, { "gt": 6,
def plot_kline(ka, bs=None, file_html="kline.html", width="1400px", height="680px"): """ :param ka: KlineAnalyze :param bs: pd.DataFrame 买卖点,包含三个字段 ["操作提示", "交易时间", "交易价格"] :param file_html: str :param width: str :param height: str :return: None """ df = ka.to_df(use_macd=True, ma_params=( 5, 20, )) x = df.dt.to_list() title = "%s | %s 至 %s" % (ka.symbol, ka.start_dt, ka.end_dt) kline = ( Kline().add_xaxis(xaxis_data=x).add_yaxis( series_name="", y_axis=df[['open', 'close', 'low', 'high']].values.tolist(), itemstyle_opts=opts.ItemStyleOpts( color="#ef232a", color0="#14b143", border_color="#ef232a", border_color0="#14b143", ), ).set_series_opts(markarea_opts=opts.MarkAreaOpts( is_silent=True)).set_global_opts( title_opts=opts.TitleOpts(title=title, pos_left="0"), xaxis_opts=opts.AxisOpts( type_="category", is_scale=True, boundary_gap=False, axisline_opts=opts.AxisLineOpts(is_on_zero=False), splitline_opts=opts.SplitLineOpts(is_show=False), split_number=20, min_="dataMin", max_="dataMax", ), yaxis_opts=opts.AxisOpts( is_scale=True, splitline_opts=opts.SplitLineOpts(is_show=True), axislabel_opts=opts.LabelOpts(is_show=True, position="inside")), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"), datazoom_opts=[ opts.DataZoomOpts(is_show=False, type_="inside", xaxis_index=[0, 0], range_end=100), opts.DataZoomOpts(is_show=True, xaxis_index=[0, 1], pos_top="96%", range_end=100), opts.DataZoomOpts(is_show=False, xaxis_index=[0, 2], range_end=100), ], # 三个图的 axis 连在一块 axispointer_opts=opts.AxisPointerOpts( is_show=True, link=[{ "xAxisIndex": "all" }], label=opts.LabelOpts(background_color="#777"), ), )) kline_line = (Line().add_xaxis(xaxis_data=x).add_yaxis( series_name="笔", y_axis=df.bi.tolist(), is_smooth=False, is_connect_nones=True, symbol='diamond', symbol_size=8, linestyle_opts=opts.LineStyleOpts(opacity=1, type_='dotted', width=2), label_opts=opts.LabelOpts(is_show=False), ).add_yaxis( series_name="线段", y_axis=df.xd.tolist(), is_smooth=False, is_connect_nones=True, symbol='triangle', symbol_size=12, linestyle_opts=opts.LineStyleOpts(opacity=1, type_='solid', width=2), label_opts=opts.LabelOpts(is_show=True, position='right'), ).set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=1, axislabel_opts=opts.LabelOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( grid_index=1, split_number=3, axisline_opts=opts.AxisLineOpts(is_on_zero=False), axistick_opts=opts.AxisTickOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=True, position="inside"), ), )) # Overlap Kline + Line overlap_kline_line = kline.overlap(kline_line) if isinstance(bs, pd.DataFrame) and len(bs) > 0: c = (Scatter().add_xaxis(bs['交易时间'].to_list()).add_yaxis( "买卖点", bs['交易价格'].to_list(), label_opts=opts.LabelOpts( is_show=True, position="left", formatter=JsCode( "function(params){return bsName[params.dataIndex][0];}")), )) overlap_kline_line = overlap_kline_line.overlap(c) # draw volume bar_1 = (Bar().add_xaxis(xaxis_data=x).add_yaxis( series_name="Volumn", yaxis_data=df.vol.tolist(), xaxis_index=1, yaxis_index=1, label_opts=opts.LabelOpts(is_show=False), itemstyle_opts=opts.ItemStyleOpts(color=JsCode(""" function(params) { var colorList; if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) { colorList = '#ef232a'; } else { colorList = '#14b143'; } return colorList; } """)), ).set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=1, axislabel_opts=opts.LabelOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(is_show=True, position='inside')), legend_opts=opts.LegendOpts(is_show=False), )) # Bar-2 (Overlap Bar + Line) bar_2 = (Bar().add_xaxis(xaxis_data=x).add_yaxis( series_name="MACD", yaxis_data=df.macd.tolist(), xaxis_index=2, yaxis_index=2, label_opts=opts.LabelOpts(is_show=False), itemstyle_opts=opts.ItemStyleOpts(color=JsCode(""" function(params) { var colorList; if (params.data >= 0) { colorList = '#ef232a'; } else { colorList = '#14b143'; } return colorList; } """)), ).set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=2, axislabel_opts=opts.LabelOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( grid_index=2, split_number=4, axisline_opts=opts.AxisLineOpts(is_on_zero=False), axistick_opts=opts.AxisTickOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=True, position="inside"), ), legend_opts=opts.LegendOpts(is_show=False), )) line_2 = (Line().add_xaxis(xaxis_data=x).add_yaxis( series_name="DIF", y_axis=df['diff'].tolist(), xaxis_index=2, yaxis_index=2, label_opts=opts.LabelOpts(is_show=False), ).add_yaxis( series_name="DEA", y_axis=df['dea'].tolist(), xaxis_index=2, yaxis_index=2, label_opts=opts.LabelOpts(is_show=False), ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False))) # draw MACD overlap_bar_line = bar_2.overlap(line_2) # 最后的 Grid grid_chart = Grid( init_opts=opts.InitOpts(width=width, height=height, page_title=title)) grid_chart.add_js_funcs("var barData = {}".format( df[['open', 'close', 'low', 'high']].values.tolist())) if isinstance(bs, pd.DataFrame) and len(bs) > 0: grid_chart.add_js_funcs("var bsName = {}".format( bs[["操作提示", "交易价格"]].values.tolist())) grid_chart.add( overlap_kline_line, grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="60%"), ) grid_chart.add( bar_1, grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="71%", height="10%"), ) grid_chart.add( overlap_bar_line, grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="82%", height="14%"), ) grid_chart.render(path=file_html)
def find_proportion_render(x, y, z, part_name, main_name, query, table_path, answer): x = list(map(str, x)) y = list(map(float, y)) z = list(map(float, z)) colorList = ['#f36c6c', '#e6cf4e', '#20d180', '#0093ff'] y_part = [] y_main = [] for i in range(len(y)): percentage = y[i] / z[i] * 100 percentage = str(percentage).split('.')[0] + '.' + str( percentage).split('.')[1][:2] y_part.append( opts.BarItem( name=x[i], value=y[i], label_opts=opts.LabelOpts(position="insideTop", formatter=str(percentage) + "%"), itemstyle_opts=opts.ItemStyleOpts(color=colorList[2]))) y_main.append(opts.BarItem( name=x[i], value=z[i] - y[i], )) bar = Bar() bar.add_xaxis(x) bar.add_yaxis('', y_axis=y_part, stack='stack1', label_opts=opts.LabelOpts(position="insideTop"), itemstyle_opts=opts.ItemStyleOpts(color=colorList[2]), tooltip_opts=opts.TooltipOpts(formatter=part_name + ':{c}')), bar.add_yaxis('', y_axis=y_main, stack='stack1', label_opts=opts.LabelOpts(is_show=False), color="gray", tooltip_opts=opts.TooltipOpts(formatter=main_name + ':{c}')) bar.set_global_opts( datazoom_opts=[ opts.DataZoomOpts(range_start=10, range_end=90), opts.DataZoomOpts(type_="inside") ], legend_opts=opts.LegendOpts(is_show=False), graphic_opts=[ opts.GraphicText( graphic_item=opts.GraphicItem( left="center", top="bottom", ), graphic_textstyle_opts=opts.GraphicTextStyleOpts( # 可以通过jsCode添加js代码,也可以直接用字符串 text=[ '\n' + "Q:" + ' ' + query + '\n' + 'A:' + ' ' + answer ], font="14px Microsoft YaHei", graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#333"))) ]) bar.render("aggregation.html") grid = Grid(init_opts=opts.InitOpts( width="100%", height="100%", renderer=globals.RenderType.SVG, )) grid.add(bar, grid_opts={'left': '20%', 'bottom': '34%'}) option1 = grid.dump_options_with_quotes() option1 = json.loads(option1) option = {"option": [option1], "query": query} return option
+(latExtent[0] + lngIndex * cellSizeCoord[0]).toFixed(6), +(lngExtent[0] + latIndex * cellSizeCoord[1]).toFixed(6) ])); } """).add( series_name="", data_pair=j["data"], type_=ChartType.CUSTOM, render_item=JsCode("renderItem"), itemstyle_opts=opts.ItemStyleOpts(color="yellow"), encode={ "tooltip": 2 }, ).set_global_opts( title_opts=opts.TitleOpts(title="BMap-Custom 图"), tooltip_opts=opts.TooltipOpts(is_show=True, formatter=None), visualmap_opts=opts.VisualMapOpts( is_piecewise=True, pos_top="10", pos_left="10", is_inverse=True, pieces=[{ "value": i, "color": color_list[i] } for i in range(len(color_list))], dimension=2, border_color="#ccc", border_width=2, background_color="#eee", range_opacity=0.7, ),
from pyecharts.faker import Faker # from pyecharts.charts import Page # 顺序多图 # from pyecharts.globals import SymbolType # from pyecharts.charts import Page, WordCloud # from pyecharts.render import make_snapshot # from snapshot_selenium import snapshot # 渲染图片 bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) # 设置主题 bar.add_xaxis(['衬衫', '羊毛衫', '学纺纱', '裤子', '高跟鞋', '袜子']) bar.add_yaxis('商家A', [5, 20, 36, 10, 75, 90]) bar.add_yaxis('商家B', [15, 6, 45, 20, 35, 66]) # render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件 # 也可以传入路径参数,如 bar.render("mycharts.html") bar.set_global_opts(title_opts=opts.TitleOpts(title='主标题', subtitle='副标题'), toolbox_opts=opts.ToolboxOpts(is_show=True), tooltip_opts=opts.TooltipOpts(is_show=True), visualmap_opts=opts.VisualMapOpts(is_show=True), datazoom_opts=opts.DataZoomOpts(is_show=True)) bar.render(path='C:\\Users\\tangyun\\Desktop\\生成图像\\figure1.html') # make_snapshot(snapshot, bar.render(), 'bar.png') def bar_base() -> Bar: c = (Bar().add_xaxis(Faker.choose()).add_yaxis( '商家A', Faker.values()).add_yaxis('商家B', Faker.values()).set_global_opts( title_opts=opts.TitleOpts(title='Bar-基本示例', subtitle='副标题'), toolbox_opts=opts.ToolboxOpts(is_show=True))) return c
import pyecharts.options as opts from pyecharts.charts import Tree async def get_json_data(url: str) -> dict: async with ClientSession(connector=TCPConnector(ssl=False)) as session: async with session.get(url=url) as response: return await response.json() # 获取官方的数据 data = asyncio.run( get_json_data(url="https://echarts.baidu.com/examples/data/asset/data/flare.json") ) ( Tree(init_opts=opts.InitOpts(width="1400px", height="800px")) .add( series_name="", data=[data], pos_top="18%", pos_bottom="14%", layout="radial", symbol="emptyCircle", symbol_size=7, ) .set_global_opts( tooltip_opts=opts.TooltipOpts(trigger="item", trigger_on="mousemove") ) .render("Radial_tree.html") )