pyecharts 画雷达图

pyecharts 画雷达图

背景

手里面有一份上海市所有板块的与企业相关数据如下,里面有五个关键指标,分别是常住人口,现有办公人口,企业数量,新增招聘人口,平均月薪,还有一个类别标签,总共4类,表示各个板块属于哪个大类。现在的任务是找一个展现方式能够分门别类的把各属性表现出来,于是想到了雷达图,这次用pyecharts来实现。
在这里插入图片描述

绘图思路

看了pyecharts 官方文档,其数据是下面那种格式,由逗号隔开的列表构成的大列表,可以看成一个矩阵块。pandas 读进来的数据框是空格隔开的,所以先把数据按类别分成四个数据框,给每个数据框每一行加逗号隔开再组合成大列表,即形成一个矩阵块,然后四个矩阵块又组合成一个大的列表,每个矩阵块作为绘图的数据输入添加进去。
在这里插入图片描述

# -*- coding: utf-8 -*-
"""
project_name:radar
@author: 帅帅de三叔
Created on Mon Oct 21 17:28:01 2019
"""
from pyecharts import options as opts #用以设置
from pyecharts.charts import Radar #导入雷达类
import pandas as pd #导入数据分析模块
radar_data=pd.read_excel("产业数据_雷达图.xlsx",sheet_name='Sheet4',index_col=u'编号') #读取数据

def get_matrix(): #定义数据转换函数
    matrix=[] #由矩阵构成的数组
    for classification in radar_data['类别2'].unique(): #按类别
        class_=radar_data[radar_data['类别2']==classification]
        features=class_.iloc[:,1:-1]
        mat=[]
        for row in range(features.shape[0]): #每一类再按行循环
            #print(row)
            value_class= ",".join(str(i) for i in features.values[row]).split(",") #series中间元用逗号隔开
            value=[float(x) for x in value_class] #构造由浮点数构成的数组,一个数组就是雷达图里面一个多边形
            mat.append(value) #追加到小mat里面
        matrix.append(mat) #小mat追加到大的matrix里面去
    #print(matrix) #查看matrix格式
    return matrix

def radar(): #定义绘图函数
    c_schema = [
                {"name": "常住人口", "max": 110, "min": -1},
                {"name": "现有办公人口", "max": 110, "min": -1},
                {"name": "企业数量", "max": 110, "min": -1},
                {"name": "新增招聘人口", "max": 110,"min":-1},
                {"name": "平均月薪", "max": 110,"min":-1},] #以字典形式设置雷达图指标名称和范围   
    radar=Radar() #初始化对象,单独调用
    radar.add("Class=0",get_matrix()[0],color="#f9713c") #添加第一类数据并绘图
    radar.add("Class=1",get_matrix()[1],color="#4169E1") #添加第二类数据并绘图
    radar.add("Class=2",get_matrix()[2],color="#00BFFF") #添加第三类数据并绘图
    radar.add("Class=3",get_matrix()[3],color="#3CB371") #添加第四类数据并绘图         
    radar.add_schema(schema=c_schema,shape="polygon") #schema设置
    radar.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #是否打标签
    radar.set_global_opts(title_opts=opts.TitleOpts(title="企业指标")) #标题
    return radar.render("radar.html") #渲染成html格式

if __name__=="__main__":
    radar()

代码解读

代码定义出两个函数 **get_matrix()**和 radar() 分别用来处理数据和绘图,关键是处理数据,首先一行一行的字符串处理加逗号隔开,然后再浮点型转化成数组,每一个数组就是雷达图里面一个多边形,然后追加到mat里面去,每个mat就是矩阵块,即一个类别的数据,然后所有类别追加在一起就构成了matrix 列表,然后用切片技术作为绘图的数据输入, pyecharts例子大多是链式调用,这里采用的是单独调用。

效果图

最后渲染成html格式效果图,有一定的互动效果,可以勾选Class=0,只显示第0类雷达图,画一次就能把4类一次性画出来。
在这里插入图片描述

发布了45 篇原创文章 · 获赞 12 · 访问量 8656

猜你喜欢

转载自blog.csdn.net/zengbowengood/article/details/102681278