当前位置:   article > 正文

pyehcharts雷达图_pyecharts雷达图

pyecharts雷达图

目录

1.主程序

2.模板和相应数据的编写和相关文件操作


前言

雷达图可以将游戏角色的不同能力值对比可视化,不仅让我们好判断哪种英雄在什么方面比较强,应该在什么时候使用,该买不该买;也可以帮助完善游戏,使其图像化,提升用户体验。


 代码展示

  1. from pyecharts import Radar
  2. import webbrowser,os,json
  3. colors=["red","darkblue","lightblue","orange","darkgreen","darkgoldenrod"]
  4. #这一段做的仅仅是打开存放雷达图模板的json文件和存放想展示的各项指标的数据的json文件
  5. with open("soldiers.json", encoding="utf-8") as f:#文件包含中文,要解码,用到uft-8解码
  6. cont = json.load(f)#各项数据,结构一般为字典嵌套字典
  7. with open("sample.json",encoding="utf-8") as f1:
  8. st=json.load(f1)#雷达图生成的背景模板
  9. lst_data=[list(cont[key].values()) for key in cont]
  10. #main program
  11. chart=Radar("托斯帕国的兵种战力分析")#创建雷达图对象
  12. chart.config(c_schema=st)#添加背景模板,注意格式
  13. for j in range(len(cont)):#用循环添加多组数据,第一组为键,第二组为分析的对应数据
  14. chart.add(
  15. list(cont.keys())[j],#分析的对象名
  16. [lst_data[j]],#分析的对象属性及其数据
  17. legend_pos="80%",#图例靠右的程度
  18. legend_orient="veritcal",#图例的展示方向为垂直方向
  19. line_color=colors[j]#雷达图的线条颜色
  20. )
  21. chart.render()#渲染图表
  22. webbrowser.open("file://"+os.path.realpath("render.html"))#生成图表

讲解

雷达图确实需要注意的点很多,而且创建背景模板和添加数据的这段代码似乎并不是那么容易想到。不过其实一点也不难,只要了解他是由几个模块构成的,再逐个构建就好了。我们先讲主程序,然后再讲模板和角色与其各项指标的格式。

1.主程序

雷达图需要我们添加一个背景版来支撑数据的呈现。他还需要一组或更多的数据加入。这里我们导入模板的使用的是chart对象的config()方法。注意,模板在本程序里是schema_1(参看下一个部分的代码,揣摩理解)

chart.add()中的第一个参数,list(cont.keys())[j]遍历由dict_()全体键组成的列表中的所有元素,代表要载入的图例名字。比如在这里它可以是:骑兵,剑士...我们就叫他们角色名吧。第二个参数是角色名对应的各项指标,比如骑士角色对应指标用程序把它打印出来就是:[[20,5,70,45,0.8]],表示近战20,远攻5,防御70等。一定要注意他是一个嵌套列表。为什么呢?明明嵌套列表中就只有一个元素,为什么不直接表示成一个列表?我们联系下图就能理解他代表什么。

另外,legend_poslegend_orient分别代表图例在画面中的位置,和图例是垂直于还是水平于页面。legend_pos 既可以是百分数(代表图例离左上角的距离比上整个页面的宽度)也可以是leftright,比较灵活。char.Radar()创建雷达图对象并初始化名字,显示在图表旁边。另外注意到chart的add()方法的最后一个参数line_color输入的是各组数据展现后的颜色。详细信息见下下图(运行结果)

2.模板和相应数据的编写和相关文件操作

参照下段代码的格式,仔细观察以下模板中各个max键和对应单兵种作战性能数据值的关系,多尝试。max表示的是这个属性的最大值。因为要保证雷达图是一个正多边形,因此最后呈现出来的雷达图各属性顶点距离max的长度其实是max值和属性值的比。比如近战这个属性的max是40,而防御的max是150,我们举弓箭手这个例子,他的近战是5,防御是30。那么最后表上呈现距离长的将是150/30 和40/20个pyecharts单位。这相当于增加了max小的属性的长度,因为本身雷达图表示的结果就很相对,就是一种比较。

另外我们注意看一下模板schema_1列表。列表的每一个字典元素的都将是雷达图的一个顶点,一个指标。也就是说schema_1中有多少个元素,雷达图就是正几边形。

剩下的一部分就很简单了,就是通过json库导入导出字典和列表作为雷达图展示的数据和背景图。我大致讲一下:json.dump(data,file)就是将data存入file中;json.load(file)就是把file中的数据加载出来,需要使用一个变量来接收该数据。代码这么抽象的东西是越说会越复杂的,大家只要基础过关,多试运行几次发现规律,就自然而然地会了。

  1. import json
  2. dict_={
  3. "骑兵": {"近战": 20, "远攻": 5, "防御": 70, "速度": 45, "攻击速度": 0.8},
  4. "剑士": {"近战": 12, "远攻": 1, "防御": 45, "速度": 12, "攻击速度": 1.4},
  5. "矛兵": {"近战": 18, "远攻": 4, "防御": 45, "速度": 12, "攻击速度": 0.8},
  6. "重装步兵": {"近战": 15, "远攻": 6, "防御": 90, "速度": 6, "攻击速度": 1.1},
  7. "巨人": {"近战": 30, "远攻": 0, "防御": 90, "速度": 5, "攻击速度": 0.6},
  8. "弓箭手": {"近战": 5, "远攻": 15, "防御": 30, "速度": 14, "攻击速度": 1.2}
  9. }
  10. schema_1 = [
  11. {"name": "近战", "max": 40},
  12. {"name": "远攻", "max": 40},
  13. {"name": "防御", "max": 150},
  14. {"name": "移动速度", "max": 50},
  15. {"name": "攻击速度", "max":2}
  16. ]
  17. with open("soldiers.json", "w") as f:
  18. json.dump(dict_,f)
  19. with open("sample.json","w") as f1:
  20. json.dump(schema_1,f1)

上图是运行结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/196727
推荐阅读
相关标签
  

闽ICP备14008679号