pyehcharts雷达图

本文介绍了如何使用pyecharts库在Python中绘制雷达图,适用于游戏英雄能力值对比可视化。主要内容包括主程序的代码解析,解释了雷达图的背景模板构建和数据添加,以及图例位置和颜色设置。同时,强调了模板中max值与单兵种作战性能数据的关系,以及如何通过json进行数据的导入导出。
摘要由CSDN通过智能技术生成

目录

1.主程序

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


前言

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


 代码展示

from pyecharts import Radar
import webbrowser,os,json

colors=["red","darkblue","lightblue","orange","darkgreen","darkgoldenrod"]

#这一段做的仅仅是打开存放雷达图模板的json文件和存放想展示的各项指标的数据的json文件
with open("soldiers.json", encoding="utf-8") as f:#文件包含中文,要解码,用到uft-8解码
    cont = json.load(f)#各项数据,结构一般为字典嵌套字典

with open("sample.json",encoding="utf-8") as f1:
    st=json.load(f1)#雷达图生成的背景模板
lst_data=[list(cont[key].values()) for key in cont]


#main program
chart=Radar("托斯帕国的兵种战力分析")#创建雷达图对象
chart.config(c_schema=st)#添加背景模板,注意格式

for j in range(len(cont)):#用循环添加多组数据,第一组为键,第二组为分析的对应数据
    chart.add(
        list(cont.keys())[j],#分析的对象名
        [lst_data[j]],#分析的对象属性及其数据
        legend_pos="80%",#图例靠右的程度
        legend_orient="veritcal",#图例的展示方向为垂直方向
        line_color=colors[j]#雷达图的线条颜色
    )


chart.render()#渲染图表
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。

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

剩下的一部分就很简单了,就是通过json库导入导出字典和列表作为雷达图展示的数据和背景图。我大致讲一下:json.dump(data,file)就是将data存入file中;json.load(file)就是把file中的数据加载出来。

import json
dict_={
    "骑兵": {"近战": 20, "远攻": 5, "防御": 70, "速度": 45, "攻击速度": 0.8},
    "剑士": {"近战": 12, "远攻": 1, "防御": 45, "速度": 12, "攻击速度": 1.4},
    "矛兵": {"近战": 18, "远攻": 4, "防御": 45, "速度": 12, "攻击速度": 0.8},
    "重装步兵": {"近战": 15, "远攻": 6, "防御": 90, "速度": 6, "攻击速度": 1.1},
    "巨人": {"近战": 30, "远攻": 0, "防御": 90, "速度": 5, "攻击速度": 0.6},
    "弓箭手": {"近战": 5, "远攻": 15, "防御": 30, "速度": 14, "攻击速度": 1.2}
}

schema_1 = [
    {"name": "近战", "max": 40},
    {"name": "远攻", "max": 40},
    {"name": "防御", "max": 150},
    {"name": "移动速度", "max": 50},
    {"name": "攻击速度", "max":2}
]

with open("soldiers.json", "w") as f:
    json.dump(dict_,f)

with open("sample.json","w") as f1:
    json.dump(schema_1,f1)

e551961d70d756ed4ef89eb58e4769e7.png

上图是运行结果

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值