利用pyecharts绘制雷达图的案例(含参数解释)
目录
一、概念介绍
二、数据导入
三、图像绘制
四、 参数解释
Part 1:背景图添加
Part 2:add_schema
Part 3:绘制雷达链
Part 4 :set_series_opts
一、概念介绍
雷达图(Radar Chart),或称为戴布拉图、蜘蛛网图。图形以一点为中心,每一变量维度为一极坐标轴,n个维度即形成n轴的由内向外放射状图形,形似蜘蛛网。
图形示例:(图源百度)
分析上图,我们可以得到一家企业或者某个部门在经营管理上的评分分布。
图形的基本构成如下:
雷达图的应用特点:
① 同样是属于比较与分布类型,雷达图与柱状图最明显的差异是,柱状图在实际场景中通常被用于进行单(多)维度定性数据的可视化,比如一次期中考试,绘制柱状图来对比八个班级的语文平均分;而雷达图常常用于单(多)个体的多维度数据对比,进而呈现并帮助分析对象的优劣处,比如在这次考试中,绘制雷达图来观察二班的语文、数学、英语、生物、化学、物理科目平均分的优良分布。
② 如果遇到多总体,我们可以使用多幅雷达图,或者单幅雷达图中多层数据线的形式进行总体间对比。
③ 无论是变量特征还是对象总体都不要太多,前者(>10)会使得图像的轴过多,包含信息量过大而弱化了可读性,一眼看去让人感觉很复杂。后者(>5)要么会使得线条交叉密集,要么就是多重覆盖域因附着不同填充色而导致的信息覆盖问题,当然,如果每个总体都是单维突出类型,信息突出效果还是很好的。
④ 雷达图使用的数据是多特征的,会出现一种很常见的情况,比如年龄和收入的量纲或者说取值范围是不一致的。因为雷达图是维度内的粗略对比,我们并不会去根据图形计算一班和二班的数学平均分差究竟是多少,只需要得到二班在这次期中考试中数学比一班考得好的结论就可以,所以为了将各维度数据在一个取值范围内,我们在绘图前会考虑将数据归一化或者标准化。
⑤ 在应用场景上,通常有财务状况综合评价、用户画像、员工评分、医疗症状自评等等
二、数据导入
在本案例中,我们虚构了某部门五位员工的月度评价数据,希望绘制雷达图以向管理或人事部门反映员工们的亮点与不足之处。
import pandas as pd
data = pd.DataFrame(pd.read_excel('案例数据.xlsx'))# 生成绘图series
data_radar = []
for row in range(data.shape[0]):dic = {}value = []for col in range(1,data.shape[1]):value.append(int(data.iloc[row,col]))dic['name'],dic['value'] = data['员工'][row],valuedata_radar.append([dic])# 各特征维度取值范围
scope = []
for col in range(1,data.shape[1]):dic = {}dic['name'] = data.columns[col]dic['max'],dic['min'] = max(data.iloc[:,col]),0scope.append(dic)
在这里,为了突出优秀,我们数轴范围最大值来源于样本数据。如果min,max都取决于样本,绘图结果等价于使用了归一法。这个范围是可以自定义的,看你想要展现什么信息,或者作为绘图的调整。
我们需要绘制雷达图的数据结构为:
如果数据量比较少,希望自己手动输入的话,也可以按如下格式:
data_radar = [[{'name':'许一','value':[22,3,3,7,3,5]}],[{'name':'刘二','value':[27,2,4,10,4,3]}]# ...]
三、图像绘制
为了下文便于解释参数,这里我们将多数调整为显示。使用python编程语言,调用pyecharts包得到以下图形。
实现代码如下:
from pyecharts import options as opts
from pyecharts.charts import Radar
from pyecharts.commons.utils import JsCodec = (# Radar()Radar(init_opts=opts.InitOpts(bg_color={"type": "pattern", "image": JsCode("img"), "repeat": "no-repeat"})).add_js_funcs( """ var img = new Image();img.src = '背景.jpg'; """).add_schema(schema=scope,shape="circle",center=["50%", "50%"],#宽高:900px*500pxradius="60%",angleaxis_opts=opts.AngleAxisOpts(min_=0,max_=360,is_clockwise=False,interval=10,axistick_opts=opts.AxisTickOpts(is_show=True),axislabel_opts=opts.LabelOpts(is_show=True),axisline_opts=opts.AxisLineOpts(is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True)),radiusaxis_opts=opts.RadiusAxisOpts(min_=0,max_=30,interval=5,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),polar_opts=opts.PolarOpts(),splitline_opt=opts.SplitLineOpts(is_show=False)).add(series_name="许一",data=data_radar[0],areastyle_opts=opts.AreaStyleOpts(opacity=0.2),linestyle_opts=opts.LineStyleOpts(width=2),color='#fc5a50').add(series_name="刘二",data=data_radar[1],areastyle_opts=opts.AreaStyleOpts(opacity=0.2),linestyle_opts=opts.LineStyleOpts(width=2),color='#35ad6b').add(series_name="张三",data=data_radar[2],areastyle_opts=opts.AreaStyleOpts(opacity=0.2),linestyle_opts=opts.LineStyleOpts(width=2),color='#3d7afd').add(series_name="李四",data=data_radar[3],areastyle_opts=opts.AreaStyleOpts(opacity=0.2),linestyle_opts=opts.LineStyleOpts(width=2),color='#aa23ff').add(series_name="王五",data=data_radar[4],areastyle_opts=opts.AreaStyleOpts(opacity=0.2),linestyle_opts=opts.LineStyleOpts(width=2),color='#fcb001').set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title = '员工评价',subtitle = '林老头ss',pos_left='left')).render("雷达图示例.html")
)
四、 参数解释
Part 1:背景图添加
在默认情况下,我们的背景是白板,而initopts给我们提供了背景色、背景图、绘画主题等多种自定义选项。上述代码中负责背景图添加的部分如下,图片我选择的是一只可爱的小鲨鱼。
如果无需增加背景,则Radar()即可。如果需要增加背景图片,我们只需要在上述代码中更改img.src部分,因为我这里背景图是放在同级目录,所以不需要提供存储路径。
如果是想要更改背景色、主题等,可以参考地图案例的参数解释。利用pyecharts绘制分级地图的案例_林老头ss的博客-CSDN博客
Part 2:add_schema
add_schema 负责我们雷达图的设置:
① schema :指定雷达图的特征标签,每个轴的最大最小取值(方便画点),此前我们已经生成了取值范围的scope【{}】型,直接赋值就行。
② shape、center、radius :
shape即雷达图的外轮廓形状,circle圆形为默认值。
center为中心的位置,[50%,50%]指的是画布宽50%和高50%的位置,默认画布的宽高数据是900px*500px。。
radius是雷达图外圆的半径长度,60%指的是当前画布的宽度和高度中较小者的60%。
③ AngleAxisOpts :角度坐标选项设置
min_,max_ 指定角度范围。
is_clockwise=False 角度递增的方向是否按照时钟转动(顺时针)的方向。
interval 径向轴显示的间隔区间大小值,interval=10表示每隔10°划分径向轴角度。
剩下四个参数分别对应如下:
④ RadiusAxisOpts :径向轴选项设置
min_,max_ 同理,设置径向轴的取值范围。
interval 用于径向轴上的划分,interval = 5 表示每隔 5 划分径向轴长度。
SplitAreaOpts 用来设置我们的间隔区域,is_show=True才会有灰白相间的效果,opacity指的是不透明度,可以取[0,1] , 数值越大颜色越深。
⑤ PolarOpts : 极坐标的设置,我们选择默认值。
⑥ splitline_opt :如果设置为True,增加分割线,变化如下图所示(不显示雷达链,免得遮挡)
-- 注意,上面的选项点亮了才会显示对应总体的分布数据线。
Part 3:绘制雷达链
add()用于一条一条自定义绘制总体的雷达链。
series_name :数据序列的名称,即总体名称。在静态图中它不会显示,交互过程中可以看到(如上上图)。
data :对应总体的数据list,格式为[{'name':'XX','value':[num,num,num]}],具体参考我们的数据结构。这里需要注意的是,我们value的长度要和特征维度数一致。
areastyle_opts :覆盖域的透明度设置,因为我们这里是五总体,必须要调整填充色的透明度。
linestyle_opts : 雷达链的线条宽度设置
color :指定不同总体雷达图的颜色,这里可以保证边界和内部填充色一致,而饱和度不同。
symbol :设置数据点的形状,默认是空心圆。如果我们以许一的雷达链举例,数据点的形状改为三角形,即在color后面增加symbol = SymbolType.TRIANGLE,得到的结果如下:
其余的形状可以参考水球图的参数解释部分:利用pyecharts绘制水球图的案例_林老头ss的博客-CSDN博客_水球图pyecharts
Part 4 :set_series_opts
这一部分用于设置数据序列的显示,我们只提LabelOpts,对数据序列数值标签的设置,默认is_show是True,多总体情况下数字标签多容易显得很混乱,影响视觉观感。
如果不想把所有雷达链绘制在一幅图中,我们也可以每一个总体画一个然后再排布,此时每个总体的所有label和color用一个颜色也会很好看。
希望对您有所帮助~
利用pyecharts绘制雷达图的案例(含参数解释)相关推荐
- 利用Pyecharts绘制仪表盘图的案例【含参数解释】
目录 一.概念解释 二.数据导入 三.单指针仪表盘 四.参数解释 五.多指针仪表盘 一.概念解释 仪表盘图(Gauge),这里指的并不是人力常用的多图表在同页面聚合排布的绘图方法. 仪 ...
- 利用Pyecharts绘制漏斗图的案例【含参数详解】
一.概念介绍 漏斗图(Funnel),也称为倒三角图,借助echarts的解释如下: Funnel diagram is suitable for one-way analysis of single ...
- 利用pyecharts绘制水球图的案例
一.概念介绍 水球图(Liquid Fill Chart),听名字或许比较陌生,但从命名的角度也可以猜测出此类图像以球形水波显示.水球图属于填充仪表盘类,可以用于生动地展示单个百分比数据或评分数据. ...
- python【Matlibplot绘图库】利用matlibplot绘制雷达图
文章目录 1.基本构造 2.比较功能 1.基本构造 之前在一些数据分析案例中看到用 Go 语言绘制的雷达图,非常的漂亮,就想着用matlibplot.pyplot也照着画一个,遗憾的是matlibpl ...
- python绘图:利用matlibplot绘制雷达图
之前在一些数据分析案例中看到用 Go 语言绘制的雷达图,非常的漂亮,就想着用matlibplot.pyplot也照着画一个,遗憾的是matlibplot.pyplot模块中没有直接绘制雷达图的函数,不 ...
- 利用Canvas绘制雷达图
雷达图(蜘蛛网图)是一种常见的数据分析图表,本文采用canvas来绘制雷达图,并最终封装成一个小组件.首先来看一下最终的效果图: 如何画正多边形 以正五边形雷达图为例(其他任意正多边形也一样),如下图 ...
- 利用pyecharts绘制分级地图的案例
一.概念介绍 分级统计地图,或许在以前大家还不常见,但是疫情期间,借助分级地图向我们呈现全国各省市风险地区情况.确诊或死亡人数情况等的应用还是数不胜数的,效果也让人一目了然.显然,分级地图即是在我们整 ...
- 利用matplotlib绘制圆环图的案例
一.概念介绍 圆环图(Donut Chart),又称为环形图,甜甜圈图.它从饼图变形而来,单环的作用上与饼图相似,用于展示定性数据中小类占大类的比例关系. Q: 那既然都有饼图了,为什么还要圆环图呢? ...
- 利用matplotlib绘制马赛克图的案例
一.概念介绍 马赛克图(Mosaic plot),基于列联表的数据排布,展现二维定性变量下的取值大小,我们可以将它想象成三维柱状图的俯视,颜色差异或面积大小常被用于区分每个块的赋值大小. · 什么是列 ...
- 利用Joypy绘制嵴线图的案例
一.概念介绍 嵴线图(ridgeline plot),用来展示同一维度的几个数据的分布情况,每一层嵴线(峰峦)都是一个直方图或者密度图,层层堆叠形成了最终的嵴线图. · 嵴线图一般用于多类别(> ...
最新文章
- npm WARN saveError ENOENT: no such file or directory, open ‘/Users/....../package.json‘的解决办法
- ucore-lab1-练习6report
- 使用jquery插件报错:TypeError:$.browser is undefined的解决方法
- HEC-RAS二维溃坝洪水模拟(尾矿库)
- Function语意学之Member的各种调用方式
- C#Redis 事务操作
- Xamarin devexpress Grid
- 七款非常好用的电脑数据恢复软件推荐
- 35岁是继续做测试,还是回家送外卖?
- redis过期策略有哪些?内存淘汰机制有哪些?
- PR曲线与ROC曲线
- jsp+servelt+mysql+tomcat 四六级单词查询系统
- 10个3d立体字ps金属字图层样式下载
- 超高度近视合并白内障患者如何重返年轻优视力
- 该怎么设置macOS 的开机启动项
- 组成新数python_小组组名大全
- 技术总结--android篇(四)--工具类总结
- Mac免费思维导图软件:幕布 for mac
- 计算机编程常用的英语,100916计算机编程常用的英语
- 反向代理和正向代理之间的区别
热门文章
- 手把手教你如何免费把多张图片合并为PDF文件,一看就懂。
- js 单击、双击、连续多次点击
- npm link详解
- 反向题在测试问卷信效度_科学网—调查问卷的信度、效度分析方法(转载) - 谢卫军的博文...
- 让Firefox支持Wap浏览器功能的插件
- 盘点 4 个开源小游戏
- geth 搭建 私有链节点
- 计算机睡眠和休眠哪个更好,电脑睡眠和休眠哪个好 有什么区别
- matlab gpa排名,GPA如何决定申请排名多少的大学?(附TOP100大学要求)
- 风行视频app v3.4.3.1