# -*- encoding: utf-8 -*- # ----------------------------------------------------------------------------- # @File Name : radar_chart.py # @Time : 2020/12/1 下午4:50 # @Author : X. Peng # @Email : acepengxiong@163.com # @Software : PyCharm # ----------------------------------------------------------------------------- import base64 import os import time from io import BytesIO import imgkit import pyecharts.options as opts from pyecharts.charts import Radar import cv2 import numpy as np def gen_radar_chart(radar_chart_data): """ Gallery 使用 pyecharts 1.1.0 参考地址: https://echarts.apache.org/examples/editor.html?c=radar 目前无法实现的功能: 1、雷达图周围的图例的 textStyle 暂时无法设置背景颜色 """ radar_chart = radar_chart_data['data'][0:5] v1 = [[data['data'] for data in radar_chart]] radar = Radar( init_opts=opts.InitOpts(bg_color="#fff", animation_opts=opts.AnimationOpts(animation=False))).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), ], # schema=[ # opts.RadarIndicatorItem(name=data['name'], max_=float(data['data'])) for data in radar_chart # ], splitarea_opt=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1, color=[ 'rgba(194, 194, 194, 0.5)', 'rgba(232, 232, 232, 1)', 'rgba(242, 242, 242, 1)', 'rgba(247, 247, 247, 0.92)', 'rgba(247, 247, 247, 0.5)', ]) ), textstyle_opts=opts.TextStyleOpts(color="#000", font_size=14), ).add( series_name="预算分配(Allocated Budget)", data=v1, linestyle_opts=opts.LineStyleOpts(width=2, color="#999999"), tooltip_opts=None ).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts( # title_opts=opts.TitleOpts( # title="综合评分", subtitle=radar_chart_data['data'][5]['data'], pos_top="center", pos_left="46%", # title_textstyle_opts={'color': '#333', # 'fontSize': 18, # 'lineHeight': 20, # 'fontWeight': 'normal' # }, # subtitle_textstyle_opts={'color': '#983612' if float(radar_chart_data['data'][5]['data']) > 60 else '#22999F', # 'fontSize': 20, # 'lineHeight': 23, # 'fontWeight': 'bolder', # }), legend_opts=opts.LegendOpts(selected_mode=False, is_show=False) ) # radar.render("basic_radar_chart.html") # img_content = work_dir + "/app/html/{}.png".format(str(uuid.uuid4())) # make_snapshot(snapshot, "basic_radar_chart.html", img_content, delay=2) html = radar.render_embed() start = time.time() image_bin = imgkit.from_string(html, None) print('propose_fund cost', time.time() - start) # 读取图片 img1 = np.frombuffer(image_bin, np.uint8) img = cv2.imdecode(img1, cv2.IMREAD_ANYCOLOR) # 获取宽度和高度 height = len(img) width = len(img[0]) img = img[0:height, 160:750] img_bin = cv2.imencode(".png", img)[1].tobytes() img_content = 'data:image/png;base64,' + base64.b64encode(img_bin).decode('utf-8') return img_content if __name__ == '__main__': gen_radar_chart()