python 画系统关联图_Python基于pyecharts实现关联图绘制

生活中有很多需要用到关联图的地方,至少我认为的是这样的图:https://www.echartsjs.com/examples/zh/editor.html?c=graph-npm

我是在使用Word2Vec计算关联词的余弦距离之后,想要更好的展示出来的时候,遇到的这种情况,就做了下拓展。

画图的步骤主要分为:

1. 将距离数据(或者相关数据)读入;

2. 按照一定的格式和参数将数据保存为json字符串;

3. 根据json串,绘制关联图。

具体而言,主要是:

<1>. 首先有一批数据,如图所示:

<2>. 导入所需要的包

import json

import pandas as pd

import random

import copy

<3>. 产生颜色随机值的函数

# 随机颜色

def randomcolor_func():

color_char = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']

color_code = ""

for i in range(6):

color_code += color_char[random.randint(0,14)] # randint包括前后节点0和14

return "#"+color_code

<4>. 生成随机坐标

# 随机坐标

#生成随机数,浮点类型

def generate_position(n):

# n = 10

for i in range(n):

x = round(random.uniform(-2000, 2000), 5) #一定范围内的随机数,范围可变

y = round(random.uniform(-2000, 2000), 5) #控制随机数的精度round(数值,精度)

return x, y

<5>. 生成json格式的节点数据

def create_json(data, weights):

# 自定义节点

address_dict = {"nodes":[], "edges":[]}

node_dict = {

"color": "",

"label": "",

"attributes": {},

"y": None,

"x": None,

"id": "",

"size": None

}

edge_dict = {

"sourceID": "",

"attributes": {},

"targetID": "",

"size": None

}

# 给节点赋值

for ii in range(len(data)):

for jj in range(len(data.iloc[ii])):

# node,"attributes"属性可自行设置

node_dict[r"color"] = randomcolor_func()

node_dict[r"label"] = data.iloc[ii, jj]

x, y = generate_position(1)

node_dict[r"y"] = y

node_dict[r"x"] = x

node_dict[r"id"] = data.iloc[ii, jj]

node_dict[r"size"] = int(weights.loc[data.iloc[ii, jj]])

tmp_node = copy.deepcopy(node_dict)

address_dict[r"nodes"].append(tmp_node)

for ii in range(len(data)):

for jj in range(1, len(data.iloc[ii])):

# edge

edge_dict[r"sourceID"] = data.iloc[ii, 0]

edge_dict[r"targetID"] = data.iloc[ii, jj]

edge_dict[r"size"] = 2

tmp_edge = copy.deepcopy(edge_dict)

address_dict["edges"].append(tmp_edge)

return address_dict

<6>. 主函数生成json数据

if __name__ == '__main__':

# read data

data = pd.read_excel(r'test_josn_data.xlsx', 0)

weights = pd.DataFrame({"词频":[100, 40, 30, 20, 90, 50, 35, 14, 85, 38, 29, 10]},

index = ['球类','篮球','足球','羽毛球','美食','肯德基','火锅','烤鱼','饮料','可乐','红茶','奶茶']) #建立索引权值列表

address_dict = create_json(data, weights)

with open("write_json.json", "w", encoding='utf-8') as f:

# json.dump(dict_, f) # 写为一行

json.dump(address_dict, f, indent=2, ensure_ascii=False) # 写为多行

最后形成的json数据如下:

<7>. 绘制关联图,里面的文件读取和保存地址自行修改,write_json.json 就是上面保存的json文件

import pyecharts.options as opts

from pyecharts.charts import Graph

import json

with open(r"D:\Python_workspace\spyder_space\test_各种功能\write_json.json", encoding='utf-8') as f: #设置以utf-8解码模式读取文件,encoding参数必须设置,否则默认以gbk模式读取文件,当文件中包含中文时,会报错

data = json.load(f)

#print(data)

nodes = [

{

"x": node["x"],

"y": node["y"],

"id": node["id"],

"name": node["label"],

"symbolSize": node["size"],

"itemStyle": {"normal": {"color": node["color"]}},

}

for node in data["nodes"]

]

edges = [{"source": edge["sourceID"], "target": edge["targetID"]} for edge in data["edges"]]

(

Graph(init_opts=opts.InitOpts(width="1600px", height="800px"))

.add(

series_name="",

nodes=nodes,

links=edges,

layout="none",

is_roam=True,

is_focusnode=True,

label_opts=opts.LabelOpts(is_show=True),

linestyle_opts=opts.LineStyleOpts(width=0.5, curve=0.3, opacity=0.7),

)

.set_global_opts(title_opts=opts.TitleOpts(title="热词对应的关联词"))

.render("关联词图.html")

)

最后,就生成了最开始的那张图。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Python基于pyecharts实现关联图绘制

本文地址: http://www.cppcns.com/jiaoben/python/304165.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答你的问题。首先,你需要准备好数据,包括各省份高校数量。然后,使用pyecharts库中的Map组件进行绘。下面是一个简单的示例代码,可以帮助你开始: ```python from pyecharts import options as opts from pyecharts.charts import Map # 准备数据 data = [ ("北京", 86), ("天津", 37), ("河北", 91), ("山西", 63), ("内蒙古", 42), ("辽宁", 102), ("吉林", 54), ("黑龙江", 64), ("上海", 70), ("江苏", 138), ("浙江", 104), ("安徽", 104), ("福建", 89), ("江西", 79), ("山东", 150), ("河南", 114), ("湖北", 94), ("湖南", 112), ("广东", 123), ("广西", 56), ("海南", 23), ("重庆", 60), ("四川", 141), ("贵州", 43), ("云南", 80), ("西藏", 4), ("陕西", 82), ("甘肃", 34), ("青海", 15), ("宁夏", 11), ("新疆", 29), ("台湾", 2), ("香港", 6), ("澳门", 2) ] # 绘制 map_chart = ( Map() .add("", data, "china") .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts( title_opts=opts.TitleOpts(title="各省份高校数量"), visualmap_opts=opts.VisualMapOpts(max_=150, is_piecewise=True), ) ) # 保存表 map_chart.render("各省份高校数量.html") ``` 在这个示例代码中,我们使用了pyecharts库中的Map组件,将数据以地的形式进行展示。你可以根据自己的数据和需求进行修改。运行这个代码后,你会得到一个名为“各省份高校数量.html”的文件,里面就是你绘制表。希望这个示例能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值