利用Python+Gephi生成刀塔霸业棋子关系图

刀塔霸业版本:2019年7月24日

Gephi下载地址:Download

目录

代码

Gephi效果图

词云图

更新


代码

代码如下:

# -*- coding: utf-8 -*-
"""
@author:    d0t4
@date:      2019/7/29
@desc:      生成刀塔霸业中各棋子的关系图(Gephi图文件,需导入Gephi后显示)
"""


# 获取一个列表中的两两无向对
def get_pairs_in_lists(data_list):
    if len(data_list) == 2:
        return data_list[0] + "," + data_list[1] + "\n"
    elif len(data_list) == 1:
        return ""

    pairs = ""
    for i in range(1, len(data_list)):
        pairs += data_list[0] + "," + data_list[i] + "\n"

    return pairs + get_pairs_in_lists(data_list[1:])


# 词云图
def gen_wordcloud(text):
    import matplotlib.pyplot as plt
    import wordcloud
    from PIL import Image
    import numpy as np

    back = np.array(Image.open("logo.png"))
    w = wordcloud.WordCloud(scale=2, font_path="C:/Windows/Fonts/simkai.ttf", mask=back, background_color="white", )
    w.generate(text)

    plt.imshow(w)
    plt.axis("off")
    plt.show()
    w.to_file("cloud.png")


if __name__ == '__main__':
    races = [
        # 种族
        "斧王,主宰,兽王,干扰者",  # 悍将
        "巨魔战将,巫医,暗影萨满,蝙蝠骑士",  # 巨魔
        "修补匠,发条技师,赏金猎人,伐木机,炼金术士,工程师",  # 好斗
        "卓尔游侠,帕吉,亚巴顿,瘟疫法师,巫妖",  # 无情
        "小小,变体精灵,剃刀,天穹守望者,谜团",  # 太古
        "巨牙海民,魅惑魔女,剧毒术士,沙王,狼人,德鲁伊",  # 野人
        "敌法师,先知,帕克,树精卫士,露娜,幻影刺客,风行者,圣堂刺客,米拉娜",  # 无踪
        "术士,食人魔魔法师",  # 血亲
        "血魔,水晶室女,全能骑士,丽娜,光之守卫,昆卡,龙骑士",  # 人族
        "帕克,冥界亚龙,龙骑士",  # 龙
        "斯拉达,斯拉克,美杜莎,潮汐猎人",  # 鳞甲
        "混沌骑士,痛苦女王,影魔,恐怖利刃,末日使者",  # 恶魔
        "狙击手,矮人直升机",  # 神射手

        # 职业
        "血魔,赏金猎人,变体精灵,痛苦女王,冥界亚龙,幻影刺客,斯拉克,沙王,圣堂刺客",  # 刺客
        "魅惑魔女,先知,树精卫士,德鲁伊",  # 德鲁伊
        "敌法师,恐怖利刃",  # 恶魔猎人
        "修补匠,发条技师,伐木机,工程师,矮人直升机",  # 发明家
        "食人魔魔法师,水晶室女,帕克,剃刀,丽娜,光之守卫,巫妖",  # 法师
        "卓尔游侠,兽王,狙击手,风行者,狼人,米拉娜,美杜莎",  # 猎人
        "蝙蝠骑士,混沌骑士,露娜,亚巴顿,全能骑士,龙骑士",  # 骑士
        "暗影萨满,天穹守望者,干扰者",  # 萨满
        "术士,巫医,剧毒术士,影魔,炼金术士,瘟疫法师,谜团",  # 术士
        "小小,巨牙海民,斧王,主宰,帕吉,斯拉达,潮汐猎人,巨魔战将,昆卡,末日使者",  # 勇士
    ]

    graph_data = ""
    for race in races:
        chess_list = race.split(",")
        graph_data += get_pairs_in_lists(chess_list)

    # 将关系图写入文件,将该文件导入Gephi后可显示棋子关系图
    print(graph_data)
    with open("underlords_chess.csv", "w", encoding='utf-8') as f:
        f.write(graph_data)

    # 生成词云图
    gen_wordcloud(graph_data)

Gephi效果图

将以上代码生成的underlords_chess.csv导入Gephi,可得效果图:

棋子根据Betweenness Centrality着色。可见四好斗、三法等只需少量棋子(两个或三个)即可激活两种羁绊。

词云图

词云图如下,使用刀塔霸业的logo作为mask:

参考:利用Python+Gephi构建金庸人物知识图谱_南极向北的博客-CSDN博客

更新

2023-5-15更新:在Win10中运行时报错“ValueError: Only supported for TrueType fonts”,解决方法为更新pillow至最新版本,当天为9.5.0版本。

pip install pillow --upgrade

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值