您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何在Python中使用pyecharts繪制關聯圖,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
畫圖的步驟主要分為:
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繪制關聯圖有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。