Exemple #1
0
 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"))
Exemple #3
0
    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)
Exemple #6
0
    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))
Exemple #7
0
	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))
		)
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
    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
Exemple #11
0
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
Exemple #13
0
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
Exemple #14
0
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
Exemple #15
0
 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
Exemple #16
0
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
Exemple #17
0
    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
Exemple #18
0
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
Exemple #19
0
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
Exemple #20
0
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
Exemple #21
0
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
Exemple #22
0
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()
Exemple #23
0
    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,
            )
        )
Exemple #24
0
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中显示图
Exemple #26
0
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
Exemple #27
0
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
Exemple #28
0
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")
Exemple #30
0
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")