def get_line_ba(self,df, init_account, stock_info): trade_dates = np.array(df.trade_date).tolist() balances = np.array((df['balance'] - init_account) / init_account).tolist() c = ( Line() .add_xaxis(trade_dates) .add_yaxis("收益率" , balances , is_smooth=True, is_hover_animation=False, linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.9), label_opts=opts.LabelOpts(is_show=False), ) .set_global_opts( title_opts=opts.TitleOpts(title=stock_info['name']), xaxis_opts=opts.AxisOpts( is_scale=True, type_="category", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), datazoom_opts=[ opts.DataZoomOpts( is_show=True, xaxis_index=[0], type_="slider", pos_top="90%", range_start=90, range_end=100, ), # opts.DataZoomOpts( # is_show=True, # yaxis_index=[0], # type_="slider", # orient = 'vertical', # # pos_top="90%", # pos_right="0%", # range_start=0, # range_end=100, # ), ], tooltip_opts=opts.TooltipOpts( trigger="axis", axis_pointer_type="cross", background_color="rgba(245, 245, 245, 0.8)", border_width=1, border_color="#ccc", textstyle_opts=opts.TextStyleOpts(color="#000"), ), ) ) return c
def drawer2(stage_name, data): c_schema = [ { "name": "乐", "max": 0.55, "min": 0 }, { "name": "好", "max": 0.55, "min": 0 }, { "name": "哀", "max": 0.55, "min": 0 }, { "name": '恶', "max": 0.55, "min": 0 }, { "name": "惧", "max": 0.55, "min": 0 }, ] c = (Radar().set_colors(["#CC3300"]).add_schema( schema=c_schema, shape="circle", center=["50%", "50%"], radius="80%", angleaxis_opts=opts.AngleAxisOpts( min_=0, max_=360, is_clockwise=False, interval=5, axistick_opts=opts.AxisTickOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), ), radiusaxis_opts=opts.RadiusAxisOpts( min_=-4, max_=4, interval=2, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), polar_opts=opts.PolarOpts(), splitarea_opt=opts.SplitAreaOpts(is_show=False), splitline_opt=opts.SplitLineOpts(is_show=False), ).add( series_name=stage_name, data=data, areastyle_opts=opts.AreaStyleOpts(opacity=0.1), linestyle_opts=opts.LineStyleOpts(width=3), ).render("res\\output\\multi-emotion\\image\\" + stage_name + ".html"))
def draw_Kline(self): """ 画股票的K线图,需要传入四个数据 分别是["open", "close", "high", "low"] :return: 画出图像 """ Df_s1 = Read_One_Stock(self.SC).select_col("open", "high", "low", "close", "vol", "amount") length = Df_s1.shape[0] Df_s1.sort_values("trade_date", inplace=True) Df_s1.index = list(range(length)) price = np.array(Df_s1[["open", "close", "high", "low"]]).tolist() date = np.array(Df_s1["trade_date"], dtype=np.string_).tolist() ma_value_5 = calculate_ma_n(list(Df_s1['close']), 5) ma_value_10 = calculate_ma_n(list(Df_s1['close']), 10) ma_value = np.array([ma_value_5, ma_value_10]).tolist() kline = Kline() kline.set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts=[opts.DataZoomOpts()], title_opts=opts.TitleOpts(title="K-Line of {}".format(self.SC)), ) kline.add_xaxis(date) kline.add_yaxis('K-Line', price) line = Line() line.add_xaxis(date) line.add_yaxis(series_name="ma5", y_axis=ma_value[0], label_opts=opts.LabelOpts(is_show=False)) line.add_yaxis(series_name="ma10", y_axis=ma_value[1], label_opts=opts.LabelOpts(is_show=False)) line.set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts=[opts.DataZoomOpts()], title_opts=opts.TitleOpts(title="")) kline.overlap(line) kline.render("./Plots/{} Candle Plot.html".format(self.SC))
def heat_plot(data): n, m = data.shape x, y = np.arange(0, n, 1), np.arange(0, m, 1) x, y = np.meshgrid(x, y, indexing='ij') z = data.values.flatten() x = m - 1 - x _data = list(zip(y.flatten(), x.flatten(), z)) _data = [[int(d[0]), int(d[1]), np.round(d[2], 4)] for d in _data] h = ( HeatMap( init_opts=opts.InitOpts(width="1000px", height="300px")).add_xaxis( xaxis_data=data.columns.astype(str).tolist()).add_yaxis( series_name="", yaxis_data=data.index.astype(str).tolist()[::-1], value=_data, label_opts=opts.LabelOpts(position='inside', is_show=True, font_size=15), ).set_series_opts().set_global_opts( # toolbox_opts=opts.ToolboxOpts(is_show=True), legend_opts=opts.LegendOpts(is_show=False), tooltip_opts=opts.TooltipOpts(is_show=True, ), xaxis_opts=opts.AxisOpts( type_="category", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), yaxis_opts=opts.AxisOpts( type_="category", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), visualmap_opts=opts.VisualMapOpts(min_=z.min(), max_=z.max(), is_calculable=True, orient="vertical", pos_left="left"), toolbox_opts=opts.ToolboxOpts( is_show=True, feature=opts.ToolBoxFeatureOpts( save_as_image=opts.ToolBoxFeatureSaveAsImageOpts( background_color='white', connected_background_color="white", pixel_ratio=2, name="pic", ), )), )) return h
def draw(self,freq=""): kdata=[] ktime=[] kvol=[] for i in range(len(self.klines_merge)): current_kline = self.klines_merge[i] onedata=[] onedata.append(current_kline['open']) onedata.append(current_kline['close']) onedata.append(current_kline['low']) onedata.append(current_kline['high']) kdata.append(onedata) ktime.append(current_kline['date']) kvol.append(current_kline['volume']) kline=(Kline().add_xaxis(ktime) .add_yaxis(series_name= self.klines_merge[0]['code'],y_axis= kdata, markline_opts=opts.MarkLineOpts(label_opts=opts.LabelOpts(position="middle", color="blue", font_size=15), data=self.split_data_part(), symbol=["circle", "none"],), ) .set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True, splitarea_opts=opts.SplitAreaOpts(is_show=True,areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts = [opts.DataZoomOpts()], title_opts=opts.TitleOpts(title=self.klines_merge[0]['code']) , ) .set_series_opts( markarea_opts=opts.MarkAreaOpts(is_silent=True, data=self.split_data_part()) ) ) bar = (Bar().add_xaxis(ktime).add_yaxis("",kvol)) path =self.klines_merge[0]['code']+"-"+freq+".html"; kline.render(path)
def draw_amount_bar(self): """ 画出股票的成交量和 需要传入的数据是股票的["amount" :return: """ # SC = "000021.SZ" Df_s1 = Read_One_Stock(self.SC).select_col("vol", "amount") length = Df_s1.shape[0] Df_s1.sort_values("trade_date", inplace=True) Df_s1.index = list(range(length)) amount = np.array(Df_s1["amount"]).tolist() date = np.array(Df_s1["trade_date"], dtype=np.string_).tolist() bar = Bar() bar.set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts=[opts.DataZoomOpts()], title_opts=opts.TitleOpts(title="K-Line of {}".format(self.SC))) bar.add_xaxis(date) bar.add_yaxis("Amounts", amount, label_opts=opts.LabelOpts(is_show=False)) bar.render("./Plots/{} Amount Bar Plot.html".format(self.SC))
def plot(self): # 资金曲线 value_array,date_array,max_retrace,max_retrace_date,max_return,min_return = self.calculate() date_list = [i.strftime('%Y-%m-%d') for i in date_array] subtitle = "最大回撤 {} {:.2%}, 最高收益率 {:.2%} 最低收益率 {:.2%}, 目前收益率 {:.2%}".format(max_retrace_date,max_retrace,max_return,min_return,value_array[-1]) data_dict = glovar.query.history(security_list=self.betaStock, field_list=['close'], limit=len(date_list), unit='1D') beta = data_dict[self.betaStock][:,0] beta = beta/beta[0]-1 alpha = value_array - beta security_name = self.betaStock save_name = glovar.context.run_params['start_date'][:10]+'---'+glovar.context.run_params['end_date'][:10] ( Line() .add_xaxis(date_list) .add_yaxis("策略", value_array.round(3).tolist()) .add_yaxis(security_name, beta.round(3).tolist()) .add_yaxis("Alpha", alpha.round(3).tolist(), is_symbol_show=False) .set_global_opts(title_opts=opts.TitleOpts(title='资金曲线',subtitle=subtitle), xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1))), datazoom_opts=[opts.DataZoomOpts()]) .render(sys.path[0]+'/img/{}/{}/{}.html'.format(self.run_params['mode'], self.run_params['strategy'], save_name)) )
def gen_line(df1, symbol, price_min, price_max): #df1['datetime'] = df1['date'] + ' ' + df1['time'] df1['datetime'] = df1['date'] dt_list = list(df1['datetime']) close_list = df1.apply(lambda record: float(record['close']), axis=1).tolist() close_list = np.array(close_list) line1 = Line(init_opts=opts.InitOpts(height='700px', width='1300px')) line1.set_global_opts( yaxis_opts=opts.AxisOpts( min_=price_min, #min_=999, max_=price_max, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts=[ opts.DataZoomOpts( is_show=True, type_="slider", range_start=0, range_end=100, ), ], ) line1.add_xaxis(xaxis_data=dt_list) line1.add_yaxis( symbol, y_axis=close_list, ) line1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) return line1
def year_store_order_base(): # 不同门店的年营业额数据查询 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()) return radar
def gen_line_two(self, df1): df1['datetime'] = df1['date'] + ' ' + df1['time'] dt_list1 = list(df1['datetime']) # print( len(dt_list1) ) # dt_list1 = [s[5:10] for s in dt_list1] close_list1 = df1.apply(lambda record: float(record['close']), axis=1).tolist() close_list1 = np.array(close_list1) kline = Line() kline.add_xaxis(dt_list1) kline.add_yaxis('resid', close_list1, xaxis_index=1, yaxis_index=1, label_opts=opts.LabelOpts(is_show=False)) kline.set_global_opts(yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1))), legend_opts=opts.LegendOpts(is_show=True, pos_right="40%") #xaxis_opts=opts.AxisOpts(type_='time')) ) return kline
def draw_net_value(result): timeline = result['portfolio'].index timeline = [i.strftime("%Y/%m/%d") for i in timeline] # print(timeline) total_value = result['portfolio']['total_value'].tolist() total_value_b = result['benchmark_portfolio']['total_value'].tolist() rtn_line = (Line(init_opts=opts.InitOpts( width="1400px", height="500px")).add_xaxis(timeline).add_yaxis( "回测总资产", total_value, ).add_yaxis( "基准总资产", total_value_b, ).set_global_opts( title_opts=opts.TitleOpts(title="总资产"), xaxis_opts=opts.AxisOpts(is_scale=True, type_='time'), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts=[opts.DataZoomOpts(pos_bottom="-1%")], toolbox_opts=opts.ToolboxOpts(is_show=True), ).set_series_opts(label_opts=opts.LabelOpts(is_show=False))) return rtn_line
def radar_product_rating_base(): """ 此函数用于获取产品多维评价的雷达图的参数。 Returns ------- tl : TYPE-echarts parameters return echarts parameters. """ # data query dataX, products, list_dataY = product_rating_query() c_schema = [] for i in range(len(dataX)): c_schema.append({"name":dataX[i],"max":5,"min":0}) # Declare objects, render pictures tl = Timeline() for i in range(len(products)): c = ( Radar(init_opts=opts.InitOpts(width="1280px", height="720px")) .add_schema(schema=c_schema, splitarea_opt=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), textstyle_opts=opts.TextStyleOpts(color="#fff"), ) .add(series_name=products[i], data=[list(list_dataY[i])], linestyle_opts=opts.LineStyleOpts(color="#CD0000"), ) .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) .set_global_opts(title_opts=opts.TitleOpts(title="Multi-dimensional analysis of product performance"), legend_opts=opts.LegendOpts(pos_left="80%", pos_top="50%")) ) tl.add(c, "{}".format(products[i])) return tl
def radar_base(data, email_max_number, copy_max_number, copied_max_number, receiver_max_num, mail_server_max_number) -> Radar: radar = ( Radar(init_opts=opts.InitOpts(width="1280px", height="720px")) .add_schema( schema=[ opts.RadarIndicatorItem(name="邮件数量", max_=email_max_number), opts.RadarIndicatorItem(name="含有抄送的邮件数量", max_=copy_max_number), opts.RadarIndicatorItem(name="被抄送的邮件数量", max_=copied_max_number), opts.RadarIndicatorItem(name="联系人数量", max_=receiver_max_num), opts.RadarIndicatorItem(name="服务器个数", max_=mail_server_max_number), ], splitarea_opt=opts.SplitAreaOpts( is_show=True ), textstyle_opts=opts.TextStyleOpts(color="#000000"), ) ) for mailbox in data: tot = 0 for num in data[mailbox][0]: tot += num if num is not 0: radar.add( series_name=mailbox, data=data[mailbox], linestyle_opts=opts.LineStyleOpts(color=utils.randomColor(), width=1), ) radar.set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts( legend_opts=opts.LegendOpts() ) return radar
def line_smooth(index, data, name) -> Line: c = ( Line(init_opts=opts.InitOpts( theme=ThemeType.ROMANTIC, # width="100%", height="500px", )).add_xaxis(index).add_yaxis( "Sentiment value", data, is_smooth=True, is_connect_nones=True, yaxis_index=0).extend_axis(yaxis=opts.AxisOpts( name="Stock K-line", is_scale=True, position="right", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#675bba")), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts( opacity=1)), )).set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( name="Sentiment Value", is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1))), datazoom_opts=[opts.DataZoomOpts(pos_bottom="-2%")], title_opts=opts.TitleOpts(title="Sentiment Analysis : " + name), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"), )) return c
def line(self, data, xaxis=None, position=0): if not xaxis: xaxis = self.xaxis line = Line(init_opts=opts.InitOpts(**self.chart_opt)).add_xaxis(xaxis_data=xaxis) for d in data: line.add_yaxis( series_name=d["label"], y_axis=d["data"], is_smooth=True, is_selected=True, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(opacity=1), label_opts=opts.LabelOpts(is_show=False), ) line.set_global_opts( xaxis_opts=opts.AxisOpts( type_="category", grid_index=position, is_scale=True, axislabel_opts=opts.LabelOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( is_scale=True, axistick_opts=opts.AxisTickOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=False), splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), ) return line
def user_ability_radar(v1, v2) -> Radar: radar = (Radar(init_opts=opts.InitOpts()).add_schema( schema=[ opts.RadarIndicatorItem(name="字符串", max_=100), opts.RadarIndicatorItem(name="线性表", max_=100), opts.RadarIndicatorItem(name="数组", max_=100), opts.RadarIndicatorItem(name="查找算法", max_=100), opts.RadarIndicatorItem(name="排序算法", max_=100), opts.RadarIndicatorItem(name="数字操作", max_=100), opts.RadarIndicatorItem(name="树结构", max_=100), opts.RadarIndicatorItem(name="图结构", max_=100), ], splitarea_opt=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), textstyle_opts=opts.TextStyleOpts(color="#000"), ).add( series_name="学生平均得分", data=v2, linestyle_opts=opts.LineStyleOpts(color="#5CACEE", width=3, opacity=0.7), ).add( series_name="学生能力评估", data=v1, linestyle_opts=opts.LineStyleOpts(color="#CD0000", width=3, opacity=0.7), ).set_series_opts(label_opts=opts.LabelOpts( is_show=False)).set_global_opts(title_opts=opts.TitleOpts(), legend_opts=opts.LegendOpts())) return radar
def getRadar(self, sheet: xlrd.sheet) -> Radar: namelist = sheet.col_values(0, 1) maxvaluelist = sheet.col_values(1, 1) maxlist = [ opts.RadarIndicatorItem(name=namelist[i], max_=maxvaluelist[i]) for i in range(len(namelist)) ] valuelists = dict() for i in range(2, sheet.ncols): valuelists[sheet.cell(0, i).value] = sheet.col_values(i, 1) r = Radar() r.add_schema( schema=maxlist, splitarea_opt=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), textstyle_opts=opts.TextStyleOpts(color="#fff"), ) #设置颜色的列表 colorstr = ["#CD0000", "#5CACEE", "#7B68EE", "#FFFF00"] colorth = 0 for name, values in valuelists.items(): r.add( series_name=name, data=values, linestyle_opts=opts.LineStyleOpts(color=colorstr[colorth]), ) colorth = (colorth + 1) % len(colorstr) #颜色循环 r.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) r.set_global_opts(title_opts=opts.TitleOpts( title=sheet.name, title_textstyle_opts=opts.TextStyleOpts(color="#fff")), legend_opts=opts.LegendOpts()) return r
def kline_base() -> Kline: chinaDayList, worlddata = get_chinaDayList() #每日确诊增加数 a = [] c = [x['confirm'] for x in chinaDayList] for i in range(len(c)): if i == 0: a.append(0) else: a.append(int(c[i]) - int(c[i - 1])) b = [] for i in range(len(a)): if i == 0: b.append([0, 0, 0, a[i]]) elif i == 1: b.append([0, 0, a[i - 1], a[i]]) elif i == 2: b.append([0, a[i - 2], a[i - 1], a[i]]) else: b.append([a[i - 3], a[i - 2], a[i - 1], a[i]]) c = (Kline().add_xaxis([x['date'] for x in chinaDayList]).add_yaxis( "kline", b).set_global_opts( yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), xaxis_opts=opts.AxisOpts(is_scale=True), title_opts=opts.TitleOpts(title="2019-nCov K线图"), datazoom_opts=[opts.DataZoomOpts(pos_bottom="-2%")], )) return c
def kline_itemstyle() -> Kline: c = ( Kline() .add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]) .add_yaxis( "kline", data, itemstyle_opts=opts.ItemStyleOpts( color="#ec0000", color0="#00da3c", border_color="#8A0000", border_color0="#008F28", ), ) .set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), datazoom_opts=[opts.DataZoomOpts(type_="inside")], title_opts=opts.TitleOpts(title="Kline-ItemStyle"), ) ) return c
def kline_base(mydate, data, name) -> Kline: kline = ( Kline() .add_xaxis(mydate) .add_yaxis("%s" % name, data, markpoint_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="max", value_dim="close")] ), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(type_="max", value_dim="close")] ), itemstyle_opts=opts.ItemStyleOpts( color="#ec0000", color0="#00da3c", border_color="#8A0000", border_color0="#008F28", ), ) .set_global_opts( yaxis_opts=opts.AxisOpts(is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), xaxis_opts=opts.AxisOpts(is_scale=True, axislabel_opts=opts.LabelOpts(rotate=-30)), title_opts=opts.TitleOpts(title="股票走势"), datazoom_opts=[opts.DataZoomOpts()], toolbox_opts=opts.ToolboxOpts(is_show=True), ) ) return kline
def bar_base() -> Kline: exchane = ccxt.okex() kline_BTC = exchane.fetch_ohlcv('BTC/USDT', timeframe=time_change) df_BTC = pd.DataFrame(kline_BTC, dtype='float') df_BTC[0] = pd.to_datetime(df_BTC[0], unit='ms') # 转换为想要的时间 date = df_BTC[0].tolist() list_BTC_USDT = np.array(df_BTC[[1, 4, 3, 2]]).tolist() c = ( Kline() .add_xaxis(date) .add_yaxis('BTC', list_BTC_USDT) .set_global_opts( yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), xaxis_opts=opts.AxisOpts(is_scale=True), datazoom_opts=[opts.DataZoomOpts(type_="inside")], title_opts=opts.TitleOpts(title="")) .dump_options() ) return c
def get_transactions_of_ticker(ticker): """ 返回某个股票的全年数据,用于前端绘制图形 :param ticker: :return: """ global transaction_data global ticker_to_transaction_index if ticker not in ticker_to_transaction_index: return utils.error_response('no such ticker') idx = ticker_to_transaction_index[ticker] data = transaction_data.values[idx] date, list1, list2 = data[:, 0], data[:, 3:5], data[:, 5:7] list0 = np.concatenate([list2, list1], axis=1) kline = (Kline().add_xaxis(date.tolist()).add_yaxis( "k line chart", list0.tolist()).set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), datazoom_opts=[opts.DataZoomOpts()], title_opts=opts.TitleOpts(title=""), )) return kline.dump_options_with_quotes()
def candle(self, data, label="", xaxis=None, zoom_setting=[], position=0, show_rgb=False, mark_point=[], mark_line=[]): zoomopt = [] for setting in zoom_setting: zoomopt.append( opts.DataZoomOpts(**setting) ) if not xaxis: xaxis = self.xaxis rgb_color = { "itemstyle_opts": opts.ItemStyleOpts( color="#ef232a", color0="#14b143", border_color="#ef232a", border_color0="#14b143", ), } if not show_rgb: rgb_color = {} mark_point_item = [] for point in mark_point: mark_point_item.append( opts.MarkPointItem(**point), ) return (Kline(init_opts=opts.InitOpts(**self.chart_opt)) .add_xaxis(xaxis_data=xaxis) .add_yaxis( series_name=label, y_axis=data, markpoint_opts=opts.MarkPointOpts(data=mark_point_item), markline_opts=opts.MarkLineOpts( label_opts=opts.LabelOpts( position="middle", color="blue", font_size=15 ), data=mark_line, symbol=["circle", "none"], ), **rgb_color ) .set_series_opts( markarea_opts=opts.MarkAreaOpts(is_silent=True, data=[]) ) .set_global_opts( title_opts=opts.TitleOpts(title="Candle Chart", pos_left="0"), xaxis_opts=opts.AxisOpts( type_="category", grid_index=position, is_scale=True, boundary_gap=False, axislabel_opts=opts.LabelOpts(is_show=True), ), 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"), datazoom_opts=zoomopt, ) )
def draw_centrality(): degree_centrality = nx.degree_centrality(G) closeness_centrality = nx.closeness_centrality(G) betweenness_centrality = nx.betweenness_centrality(G) degree_centrality_sort = sorted(degree_centrality, key=lambda x: degree_centrality[x], reverse=True) closeness_centrality_sort = sorted(closeness_centrality, key=lambda x: closeness_centrality[x], reverse=True) betweenness_centrality_sort = sorted(betweenness_centrality, key=lambda x: betweenness_centrality[x], reverse=True) top_authors = sorted( [(x, degree_centrality[x] + closeness_centrality[x] + betweenness_centrality[x]) for x in set.intersection( set(betweenness_centrality_sort[:30]), set(closeness_centrality_sort[:30]), set(degree_centrality_sort[:30]))], key=lambda x: x[1], reverse=True) table = prettytable.PrettyTable( ['Rank', 'Name', 'Degree centrality', 'Closeness centrality', 'Betweenness centrality', 'Sum centrality']) [table.add_row( [index + 1, value[0], round(degree_centrality[value[0]], 3), round(closeness_centrality[value[0]], 3), round(betweenness_centrality[value[0]], 3), round(value[1], 3)]) for index, value in enumerate(top_authors)] print(table) h_authors = set.intersection( set(betweenness_centrality_sort[:15]), set(closeness_centrality_sort[:15]), set(degree_centrality_sort[:15])) data = [[G.nodes[x]["name"], [betweenness_centrality[x], closeness_centrality[x], degree_centrality[x]]] for x in h_authors[:10]] c = ( Radar() .add_schema( schema=[ opts.RadarIndicatorItem(name="Betweenness centrality [0,0.15]", max_=0.15, min_=0), opts.RadarIndicatorItem(name="Closeness centrality [0,0.6]", max_=0.6, min_=0), opts.RadarIndicatorItem(name="Degree centrality [0,0.35]", max_=0.35, min_=0), ], shape="circle", center=["50%", "50%"], radius="80%", splitarea_opt=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), textstyle_opts=opts.TextStyleOpts(color="#000"), ).set_series_opts(label_opts=opts.LabelOpts(is_show=False)) ) for x in data: color = randomcolor() c.add( series_name=x[0], data=[x[1]], areastyle_opts=opts.AreaStyleOpts(opacity=0.1, color=color), linestyle_opts=opts.LineStyleOpts(width=1, color=color), label_opts=opts.LabelOpts(is_show=False) ) return c
def abc(): ts_code='002713.SZ' csv_file = '{0}.csv'.format(ts_code) render_html = '{0}.html'.format(ts_code) end_date = datetime.now().strftime('%Y%m%d') df = None if not os.path.exists(csv_file): MY_TOKEN = '190040a13eb5b092ca76fa003f58d693c9121e0fc621f6d2ad221468' ts.set_token(MY_TOKEN) pro = ts.pro_api() df1 = pro.daily(ts_code=ts_code, start_date='20140101', end_date=end_date) df = df1.sort_values(by=['trade_date']) df.reset_index(level=0, inplace=True) df.drop(['index'], axis=1, inplace=True) print(df) df.to_csv(csv_file) if not df is None: df = pd.read_csv(csv_file) date = df.trade_date.tolist() data = [] for idx in df.index : row=[df.iloc[idx]['open'],df.iloc[idx]['close'],df.iloc[idx]['low'],df.iloc[idx]['high']] data.append(row) WIDTH = 1100 HEIGHT = 550 chart_init = { "width": WIDTH, "height": HEIGHT, } kline = Kline() kline.add_xaxis(date).add_yaxis('日K', data) kline.set_global_opts( xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts( is_scale=True, splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), ), datazoom_opts=[opts.DataZoomOpts()], # title_opts=opts.TitleOpts(title='日K线图:{0}'.format(ts_code)), ) # kline.add_yaxis( # "日K", # date, # data, # mark_point=["max"], # is_datazoom_show=True, # ) # 生成一个名为 render.html 的文件 kline.render(render_html) kline.render_notebook() # kline.render('a.html') # 在jupyter中使用,只需要使用xxx.render_notebook() 方法即可在Jupyter中显示图
def _timeline(perf, name=""): tl = Timeline(init_opts=opts.InitOpts(width="1000px", height="400px")) series = perf.index.get_level_values(0).unique() if isinstance( perf.index, pd.MultiIndex) else [name] for i, _w in enumerate(series): _data = perf.loc[_w] if isinstance(perf.index, pd.MultiIndex) else perf n, m = _data.shape x, y = np.arange(0, n, 1), np.arange(0, m, 1) x, y = np.meshgrid(x, y, indexing='ij') z = _data.values.flatten() data = list(zip(y.flatten(), x.flatten(), z)) data = [[int(d[0]), int(d[1]), np.round(d[2], 4)] for d in data] h = (HeatMap( init_opts=opts.InitOpts(width="1000px", height="300px")).add_xaxis( xaxis_data=_data.columns.astype(str).tolist()).add_yaxis( series_name="", yaxis_data=_data.index.astype(str).tolist(), value=data, label_opts=opts.LabelOpts(position='inside', is_show=True), ).set_series_opts().set_global_opts( toolbox_opts=opts.ToolboxOpts(is_show=True), legend_opts=opts.LegendOpts(is_show=False), tooltip_opts=opts.TooltipOpts(is_show=True, ), xaxis_opts=opts.AxisOpts( type_="category", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), yaxis_opts=opts.AxisOpts( type_="category", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), visualmap_opts=opts.VisualMapOpts(min_=z.min(), max_=z.max(), is_calculable=True, orient="vertical", pos_left="left"), )) tl.add(h, "{}".format(_w)) if not isinstance(perf.index, pd.MultiIndex): tl.add_schema(is_timeline_show=False) return tl
def box_plot(data: dict, title: str = "箱线图", width: str = "900px", height: str = "680px") -> Boxplot: """ :param data: 数据 样例: data = { "expr 0": [960, 850, 830, 880], "expr 1": [960, 850, 830, 880], } :param title: :param width: :param height: :return: """ x_data = [] y_data = [] for k, v in data.items(): x_data.append(k) y_data.append(v) init_opts = opts.InitOpts(page_title=title, width=width, height=height) chart = Boxplot(init_opts=init_opts) chart.add_xaxis(xaxis_data=x_data) chart.add_yaxis(series_name="", y_axis=y_data) chart.set_global_opts(title_opts=opts.TitleOpts(pos_left="center", title=title), tooltip_opts=opts.TooltipOpts(trigger="item", axis_pointer_type="shadow"), xaxis_opts=opts.AxisOpts( type_="category", boundary_gap=True, splitarea_opts=opts.SplitAreaOpts(is_show=False), axislabel_opts=opts.LabelOpts(formatter="{value}"), splitline_opts=opts.SplitLineOpts(is_show=False), ), yaxis_opts=opts.AxisOpts( type_="value", name="", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ) )) return chart
def gen_kline(df1): dt_list = list(df1['datetime']) kline_data = df1.apply(lambda record: [ float(record['open']), float(record['close']), float(record['low']), float(record['high']) ], axis=1).tolist() #kline = Kline(init_opts=opts.InitOpts(width='1000px')) kline = Kline() kline.add_xaxis(list(df1['datetime'])) kline.add_yaxis('日K', kline_data) kline.set_global_opts( title_opts=opts.TitleOpts(title='K线'), datazoom_opts=[ opts.DataZoomOpts( is_show=True, type_="slider", xaxis_index=[0, 1, 2], range_start=0, range_end=100, ), opts.DataZoomOpts( is_show=False, type_="inside", xaxis_index=[0, 1, 2], range_start=0, range_end=100, ), ], legend_opts=opts.LegendOpts(is_show=False), 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"), ), axispointer_opts=opts.AxisPointerOpts( is_show=True, link=[{ "xAxisIndex": "all" }], label=opts.LabelOpts(background_color="#777"), ), ) return kline
def RadarChart(BookNumsOfPubs: list, NamesOfPubs: list, AvgPoints: list, AvgPrice: list): ''' 出版物数量前10的出版社的数量和评分\n :param BookNumsOfPubs: 详见RankOfPublisher()函数 :param NamesOfPubs: 同上 :param AvgPoints: 同上 :param AvgPrice: 同上 :return: 画图函数,不知道能返回什么 ''' global dir_to_save AvgPrice = [[x * 80 for x in AvgPrice]] # 价格放大到原来的80倍 AvgPoints = [[math.exp(x) for x in tqdm(AvgPoints)]] # 平均分取指数,放大差异 BookNumsOfPubs = [[5 * x for x in BookNumsOfPubs]] # 书籍数量放大5倍,与放大后的评分在同一数量级,便于可视化 # 以上数据处理方式没有什么理论依据,仅仅是调整到了一个数量级。有关的统计学知识后续学习 ( Radar(init_opts=opts.InitOpts(width="1000px", height="500px", bg_color="#CCCCCC")) .add_schema( schema=[ opts.RadarIndicatorItem(name=NamesOfPubs[0], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[1], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[2], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[3], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[4], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[5], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[6], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[7], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[8], max_=5500), opts.RadarIndicatorItem(name=NamesOfPubs[9], max_=5500), ], splitarea_opt=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) ), textstyle_opts=opts.TextStyleOpts(color="#228B22"), ) .add( series_name="平均分(取指数后)", data=AvgPoints, linestyle_opts=opts.LineStyleOpts(color="#D9173B"), ) .add( series_name="出版物数量(扩大5倍后)", data=BookNumsOfPubs, linestyle_opts=opts.LineStyleOpts(color="#0000CD"), ) .add( series_name="出版物均价(扩大80倍后)", data=AvgPrice, linestyle_opts=opts.LineStyleOpts(color="#FFD700"), ) .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts( title_opts=opts.TitleOpts(title="出版物数量前10的出版社"), legend_opts=opts.LegendOpts() ) .render(dir_to_save + "Top10PubsInBookNums_radar.html") ) print("Successfully drew Top10PubsInBookNums_radar")
def draw_centrality(): degree_centrality = nx.degree_centrality(G) closeness_centrality = nx.closeness_centrality(G) betweenness_centrality = nx.betweenness_centrality(G) degree_centrality_sort = sorted(degree_centrality, key=lambda x: degree_centrality[x], reverse=True) closeness_centrality_sort = sorted(closeness_centrality, key=lambda x: closeness_centrality[x], reverse=True) betweenness_centrality_sort = sorted( betweenness_centrality, key=lambda x: betweenness_centrality[x], reverse=True) h_authors = set.intersection(set(betweenness_centrality_sort[:15]), set(closeness_centrality_sort[:15]), set(degree_centrality_sort[:15])) data = [[ G.nodes[x]["name"], [ betweenness_centrality[x], closeness_centrality[x], degree_centrality[x] ] ] for x in h_authors] c = (Radar().add_schema( schema=[ opts.RadarIndicatorItem(name="Betweenness centrality [0,1]", max_=1, min_=0), opts.RadarIndicatorItem(name="Closeness centrality [0,0.6]", max_=0.6, min_=0), opts.RadarIndicatorItem(name="Degree centrality [0,0.1]", max_=0.1, min_=0), ], shape="circle", center=["50%", "50%"], radius="80%", splitarea_opt=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), textstyle_opts=opts.TextStyleOpts(color="#000"), ).set_series_opts(label_opts=opts.LabelOpts(is_show=False))) for x in data: color = randomcolor() c.add(series_name=x[0], data=[x[1]], areastyle_opts=opts.AreaStyleOpts(opacity=0.1, color=color), linestyle_opts=opts.LineStyleOpts(width=1, color=color), label_opts=opts.LabelOpts(is_show=False)) c.render("radar_angle_radius_axis.html")