高级可视化图表分析实践——以《大侠立志传》武器系统为例

news2025/5/10 6:17:21

高级可视化图表分析实践——以《大侠立志传》武器系统为例

  • 引言
  • 武器类型分布
    • 矩形树图
    • 结论
  • 不同品质/类别武器的攻击力分布情况
    • 蜂群图
    • 分析结论
  • 武器来源
    • 桑基图
    • 分析结论
  • 武器附加属性
    • 词云图
    • 分析结论
  • 不同品级武器装备熟练度要求/特质要求
    • 离散热力图
    • 结论
      • 品质与熟练度的正相关性
      • 品质与熟练度的非线性关系
      • 装备品质与需求特质的正相关性
      • 不同装备类型对需求特质的类型要求
  • 使用python制作上述图表
    • 矩形树图
    • 蜂群图
    • 桑基图
    • 词云图
    • 离散热点图

引言

引言:当武侠世界遇见数据可视化
在开放世界武侠游戏《大侠立志传》中,武器系统是构建角色成长体系的重要模块。本文将以游戏内192件武器数据为样本,通过5种高级可视化图表矩形树图、蜂群图、桑基图、词云图、离散热力图),深入解析武器系统的设计逻辑,同时熟悉高级可视化图表的制作(python)和作用。

武器类型分布

矩形树图

所有品级武器数量分布
所有品级武器数量分布图
甲级武器数量分布
甲级武器数量分布

乙级武器数量分布
乙级武器数量分布
丙级武器数量分布
丙级武器数量分布
丁级武器数量分布
丁级武器数量分布

结论

  • 剑和刀是最常见的武器,剑和刀各有24个,是图中数量最多的两种武器类型。
  • 锤、长弓、火焰令和笑傲江湖的数量非常少。锤有2个,长弓有1个,火焰令有1个,笑傲江湖有1个。
  • 整体分布不均匀,少数几种武器占据了较大的比例,而其他类型的武器则相对较少。

不同品质/类别武器的攻击力分布情况

蜂群图

不同品质/类别武器的攻击力分布情况

分析结论

  • 品质越高,攻击力普遍越高。
  • 丁级武器攻击力整体偏低。
  • 武器类型对攻击力分布的影响不大,相同品质下攻击力整体相同。

武器来源

桑基图

桑基图

分析结论

  • 品级越高(甲、乙),获取方式越依赖 任务/事件 或 战斗掉落,符合高风险高回报机制。
  • 品级越低(丙、丁),获取方式越依赖 合成 或 商店,可能为普通或基础装备。

武器附加属性

词云图

武器附加属性

分析结论

多个攻击类词汇集中在中心且字号较大,说明攻击强化是武器属性的主要设计方向。

不同品级武器装备熟练度要求/特质要求

离散热力图

不同品级武器装备熟练度要求
不同品级武器装备特质要求

结论

品质与熟练度的正相关性

  • 趋势:品质等级(丁→丙→乙→甲)与所需熟练度呈显著正相关。
  • 丁级:熟练度普遍为 0-5。
  • 丙级:熟练度提升至 5-10。
  • 乙级:熟练度显著提高至 40-50。
  • 甲级:熟练度达到 80-150。

品质与熟练度的非线性关系

  • 跃升式增长:从丁到丙、乙到甲的熟练度增幅更大(如丁→丙:+5;乙→甲:+30-110),说明高品质装备对熟练度要求陡增。

装备品质与需求特质的正相关性

  • 随着装备品质从 丁→甲 升级,需求特质值显著增加
  • 丁级、丙级装备:普遍无需求特质。
  • 乙级装备:开始有需求特质值,大多数装备需求特质值要求3,少数要求5。
  • 甲级装备:大多数装备需求特质值达到10,少数装备要求8或15。

不同装备类型对需求特质的类型要求

1.物理近战武器(拳掌/剑/刀/枪/棍)​:
​核心特质​:臂力、体质、敏捷。
​具体分布​

  • ​拳掌类​:以臂力为主(3/6),其次是体质(2/6)和敏捷(1/6)。
  • ​剑类​:臂力(4/8)和体质(3/8)并重,敏捷次之(2/8)。
  • ​刀类​:体质需求最高(4/7),臂力(2/7)和敏捷(2/7)均衡。
  • 枪类​:臂力(2/4)为主,体质(1/4)和敏捷(1/4)辅助。
  • ​棍类​:完全依赖臂力(4/4),无其他特质需求。 ​

规律​:
物理武器普遍需要臂力​(力量型输出),部分依赖体质​(生存能力)或敏捷​(灵活性)。棍类因高力量需求成为臂力特化武器。

2.轻型武器(匕首/扇子/短兵):​​
​核心特质​:敏捷主导。
​具体分布​:

  • ​匕首类​:敏捷占比最高(3/5),臂力(1/5)和体质(1/5)次要。
  • ​扇子类​:特质分布较均衡(臂力、体质、敏捷各1/3)。
  • ​火焰令/飞雪寒霜刃​:全部需求敏捷。

​规律​:
轻型武器更依赖敏捷​(快速攻击或闪避),部分兼顾臂力或体质。

其他武器(毛笔/琴/箫笛/琵琶)​​

  • 核心特质​:悟性、福缘。

  • 具体分布​: ​毛笔​:悟性和福缘各占一半。 ​琴/琵琶​:悟性(3/5)为主,敏捷(2/5)次之。

​规律​
毛笔/琴/箫笛/琵琶需求的特质更依赖与悟性与福源。

使用python制作上述图表

矩形树图

import squarify
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from pylab import *
mpl.rcParams['font.sans-serif']=['SimHei']
# 示例数据(类别名称和对应的值)
data = [10, 20, 30, 40]
labels = ['A', 'B', 'C', 'D']

# 生成颜色(根据值的大小映射到viridis色系)
colors = cm.viridis([x / max(data) for x in data])

# 创建标签(显示名称和数值)
labels_with_values = [f"{label}\n{val}" for label, val in zip(labels, data)]

# 绘制矩形树图
plt.figure(figsize=(10, 6))
squarify.plot(
    sizes=data,
    label=labels_with_values,
    color=colors,
    alpha=0.6,     # 透明度
    pad=True       # 矩形间留空隙
)
plt.axis('off')    # 关闭坐标轴
plt.title('矩形树图示例')
plt.show()

在这里插入图片描述

蜂群图

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体(Windows用SimHei,macOS用STHeiti)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 生成示例数据
np.random.seed(42)
data = {
    '类别': np.repeat(['A组', 'B组', 'C组'], 50),
    '数值': np.concatenate([
        np.random.normal(90, 10, 50),
        np.random.normal(60, 15, 50),
        np.random.normal(75, 5, 50)
    ])
}

# 创建画布
plt.figure(figsize=(10, 6))

# 绘制蜂群图
sns.swarmplot(
    x='类别',
    y='数值',
    data=data,
    size=6,          # 点的大小
    palette='Set2',  # 颜色方案
    edgecolor='black',  # 点边缘颜色
    linewidth=0.5     # 边缘线宽
)

# 添加标题和标签
plt.title('不同组别的数值分布蜂群图', fontsize=14)
plt.xlabel('实验组别', fontsize=12)
plt.ylabel('测量数值', fontsize=12)

# 显示图形
plt.show()

在这里插入图片描述

桑基图

import plotly.graph_objects as go

# 定义节点(资金流动的所有端点)
labels = [
    "销售收入",   # 0
    "投资收益",   # 1
    "政府补贴",   # 2
    "研发支出",   # 3
    "人力成本",   # 4
    "税费",      # 5
    "股东分红",   # 6
    "运营储备"    # 7
]

# 定义资金流动关系 (source -> target)
source = [0, 0, 1, 1, 2, 3, 4, 5, 7]
target = [3, 4, 4, 7, 7, 5, 5, 6, 6]
value = [120, 80, 50, 30, 20, 90, 70, 60, 40]  # 单位:百万元

# 创建桑基图
fig = go.Figure(go.Sankey(
    node={
        "label": labels,
        "pad": 20,
        "thickness": 15,
        "color": "#1F77B4",  # 统一节点颜色(蓝色系)
        "line": {"color": "black", "width": 0.5}  # 节点边框
    },
    link={
        "source": source,
        "target": target,
        "value": value,
        "color": "rgba(255, 165, 0, 0.4)",  # 橙色半透明流线
        "hoverinfo": "all"  # 悬停显示数值和端点
    }
))

# 设置布局
fig.update_layout(
    title={
        "text": "企业年度资金流动分析(单位:百万元)",
        "x": 0.5,
        "font": {"size": 18}
    },
    font_family="Arial",
    plot_bgcolor="white",
    height=600
)

# 显示图表
fig.show()

# 可选:保存为HTML文件
# fig.write_html("corporate_cash_flow.html")

在这里插入图片描述

词云图

from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 示例文本
text = """
Python is an interpreted, high-level, general-purpose programming language.
Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace.
"""

# 生成词云对象
wordcloud = WordCloud(
    width=800, 
    height=400, 
    background_color='white',
    max_words=100
).generate(text)

# 显示词云
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

# 保存图片
wordcloud.to_file("wordcloud_english.png")

在这里插入图片描述

离散热点图

import pandas as pd
import plotly.express as px
import numpy as np

# 1. 创建数据框架(基于你提供的完整数据样例)
data = {
    "类型": ["拳掌"]*21 + ["剑"]*22 + ["刀"]*22 + ["枪"]*14 + ["棍"]*16 + ["锤"]*2 + ["扇子"]*15 + 
           ["匕首"]*16 + ["火焰令"]*1 + ["毛笔"]*11 + ["琴"]*11 + ["箫笛"]*11 + ["笑傲江湖"]*1 + ["琵琶"]*17,
    "品质": ["丁","丁","丁","丁","丙","丙","丙","丙","乙","乙","乙","乙","乙","乙","甲","甲","甲","甲","甲","甲","甲"] + 
           ["丁","丁","丙","丙","丙","丙","乙","乙","乙","乙","乙","乙","乙","甲","甲","甲","甲","甲","甲","甲","甲","甲"] + 
           ["丁","丁","丙","丙","丙","丙","乙","乙","乙","乙","乙","乙","乙","乙","甲","甲","甲","甲","甲","甲","甲","甲"] + 
           ["丁","丁","丙","丙","丙","丙","乙","乙","乙","乙","甲","甲","甲","甲"] + 
           ["丁","丁","丁","丙","丙","丙","丙","乙","乙","乙","乙","乙","乙","甲","甲","甲"] + 
           ["乙","乙"] + 
           ["丁","丁","丁","丙","丙","丙","乙","乙","乙","乙","乙","乙","甲","甲","甲"] + 
           ["丁","丁","丁","丙","丙","丙","丙","乙","乙","乙","乙","乙","乙","甲","甲","甲"] + 
           ["甲"] + 
           ["丁","丁","丙","丙","丙","乙","乙","乙","乙","甲","甲"] + 
           ["丁","丁","丁","丙","丙","丙","乙","乙","乙","甲","甲"] + 
           ["丁","丁","丁","丙","丙","丙","乙","乙","乙","甲","甲"] + 
           ["甲"] + 
           ["丁","丁","丙","丙","丙","丙","乙","乙","乙","乙","甲","甲","丙","丙","乙","乙","甲"],
    "熟练度": [0,5,5,5,10,10,10,10,40,40,40,40,40,50,80,80,80,80,80,100,100] + 
            [5,5,10,10,10,10,40,50,40,40,40,40,50,60,80,80,80,100,100,80,80,100] + 
            [5,5,10,10,10,10,40,40,40,50,40,40,40,40,80,80,80,100,80,100,80,80] + 
            [5,5,10,10,10,10,40,40,50,40,80,80,100,80] + 
            [5,5,5,10,10,10,10,40,40,40,50,50,50,100,150,150] + 
            [40,40] + 
            [5,5,5,10,10,10,40,40,40,40,40,40,100,100,80] + 
            [5,5,5,10,10,10,10,40,40,40,40,40,50,100,100,100] + 
            [100] + 
            [5,5,10,10,20,40,40,40,40,100,100] + 
            [5,5,5,10,10,10,40,40,40,100,100] + 
            [5,5,5,10,10,10,40,40,40,100,100] + 
            [100] + 
            [5,5,10,10,10,10,40,40,40,40,100,100,10,10,40,40,100]
}

df = pd.DataFrame(data)

# 2. 创建离散热力图
fig = px.scatter(
    df,
    x="品质",
    y="类型",
    color="类型",
    text="熟练度",
    category_orders={  # 强制指定分类顺序
        "品质": ["丁", "丙", "乙", "甲"],
        "类型": ["刀", "剑", "匕首", "扇子", "拳掌", "枪", "棍",
               "毛笔", "火焰令", "琴", "琵琶", "笑傲江湖", "箫笛", "锤"]
    },
    color_discrete_sequence=px.colors.qualitative.Pastel,
    title="武器类型熟练度分布图"
)

# 3. 自定义样式
fig.update_traces(
    marker=dict(size=35, line=dict(width=1, color="Gray")),
    textfont=dict(color="black", size=12),
    textposition="middle center"
)

fig.update_layout(
    height=800,
    width=1000,
    xaxis=dict(title="武器品质", showgrid=False),
    yaxis=dict(title="武器类型", categoryorder="array"),
    plot_bgcolor="white",
    legend=dict(orientation="h", yanchor="bottom", y=1.02),
    uniformtext=dict(minsize=10, mode="show")
)

# 4. 处理重叠点(添加水平抖动)
# 为每个品质等级添加微小的水平位置偏移
df["x_jitter"] = df.groupby(["类型", "品质"]).cumcount().apply(
    lambda x: x * 0.08 - 0.12  # 在X轴方向添加±0.12的偏移
)

fig.update_traces(
    x=pd.Categorical(df["品质"]).codes + 1 + df["x_jitter"]  # 将分类转换为数值坐标
)

# 保持X轴标签正确显示
fig.update_xaxes(
    tickvals=[0, 1, 2, 3],
    ticktext=["丁", "丙", "乙", "甲"]
)

# 显示图表
fig.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RoPE长度外推:外插内插

RoPE:假定 α \alpha α是定值 其中一半位置是用cos表示的 cos ⁡ ( k α − 2 i d ) \cos(k\alpha^{-\frac{2i}{d}}) cos(kα−d2i​)(另一半是sin)(d是词嵌入维度) 当太长如何解决: 1 直接不管—外插 缺点:超过一定长度性能急剧下降。(较大时,对应的很多位置编码…

【C++进阶】第2课—多态

文章目录 1. 认识多态2. 多态的定义和实现2.1 构成多态的必要条件2.2 虚函数2.3 虚函数的重写或覆盖2.4 协变(了解)2.5 析构函数的重写2.6 override和final关键字2.7 重载、重写、隐藏对比 3. 纯虚函数和抽象类4. 多态原理4.1 虚函数表指针4.2 多态的实现4.3 静态绑定和动态绑定…

RSS 2025|斯坦福提出「统一视频行动模型UVA」:实现机器人高精度动作推理

导读 在机器人领域,让机器人像人类一样理解视觉信息并做出精准行动,一直是科研人员努力的方向。今天,我们要探讨的统一视频行动模型(Unified Video Action Model,UVA),就像给机器人装上了一个“…

第十六届蓝桥杯B组第二题

当时在考场的时候这一道题目 无论我是使用JAVA的大数(BIGTHGER)还是赛后 使用PY 都是没有运行出来 今天也是突发奇想在B站上面搜一搜 看了才知道这也是需要一定的数学思维 通过转换 设X来把运算式精简化 避免运行超时 下面则是代码 public class lanba…

Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)

文章目录 1. 项目准备1.1 创建新项目1.2 添加必要依赖 2. 数据库设计3. 实现数据库3.1 创建实体类 (Entity)3.2 创建数据访问对象 (DAO)3.3 创建数据库类 4. 创建 Repository5. 创建 ViewModel6. 实现 UI 层6.1 创建笔记列表 Activityactivity_notes_list.xmlNotesListActivity…

Spring 框架实战:如何实现高效的依赖注入,优化项目结构?

Spring 框架实战:如何实现高效的依赖注入,优化项目结构? 在当今的 Java 开发领域,Spring 框架占据着举足轻重的地位。而依赖注入作为 Spring 的核心概念之一,对于构建高效、灵活且易于维护的项目结构有着关键作用。本…

C++ learning day 01

目录 1. iostream : 2.第一个C++程序 3. 执行过程以及以上例子详解(以上例子为参考) 1. iostream : 全称: input/output stream library 作用: 用于处理输入输出操作 2.第一个C++程序 #include <iostream>int main() {std::cout << "Hello World! &qu…

李沐《动手学深度学习》 | 多层感知机

文章目录 感知机模型《深度学习入门》的解释训练感知机损失函数的选择感知机的收敛定理&#xff1a;什么时候能够停下来&#xff0c;是不是真的可以停下来感知机的不足 多层感知模型案例引入隐藏层从线性到非线性单隐藏层-单分类案例多隐藏层 激活函数softmax函数溢出的问题 多…

vue教程(vuepress版)

Vue 完全指南 项目介绍 这是一个系统化的 Vue.js 学习教程&#xff0c;采用循序渐进的方式&#xff0c;帮助开发者从零开始掌握 Vue 开发技能。 教程特点 循序渐进: 从 Vue 基础概念开始&#xff0c;逐步深入到高级特性&#xff0c;适合不同层次的开发者学习实战驱动: 结合…

【网络原理】深入理解HTTPS协议

本篇博客给大家带来的是网络原理的知识点,本篇解释了为什么有HTTP还要发展HTTPS协议. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅…

Linux上将conda环境VLLM服务注册为开机自启

这里写目录标题 一、Systemd服务方式1、编写启动脚本2、保存脚本并赋予权限3、创建 systemd 服务单元文件3、 启用并测试服务4、停止systemd服务 二、Crontab方式1、编辑crontab文件2、添加开机启动任务 参考链接 项目需要vllm进行模型支撑&#xff0c;所以需要做成开机自启保证…

k8s的pod挂载共享内存

k8s的pod挂载共享内存&#xff0c;限制不生效问题&#xff1a; 注&#xff1a;/dev/shm 是 Linux 系统中用于共享内存的特殊路径。通过将 emptyDir 的 medium 设置为 Memory&#xff0c;可以确保 /dev/shm 正确地挂载到一个基于内存的文件系统&#xff0c;从而实现高效的共享内…

ubuntu创建虚拟环境安装ultralytics

安装Python和pip&#xff08;如果尚未安装&#xff09;: sudo apt update sudo apt install python3 python3-pip 安装virtualenv: sudo pip3 install virtualenv 创建虚拟环境: sudo virtualenv -p python3 myenv 这里myenv是虚拟环境的名称&#xff0c;-p python3指定使用…

【掌握 DDL】:SQL 中的数据库与表管理

掌握 DDL&#xff1a;SQL 中的数据库与表管理 掌握 DDL&#xff1a;SQL 中的数据库与表管理数据库 DDL创建数据库查看数据库查看所有数据库查看数据库创建语句 进入数据库删除数据库备份数据库备份恢复 查看数据库连接深入理解数据库创建与删除数据库字符集与校验规则 表 DLL创…

vscode docker 调试

目录 启动docker&#xff1a; vscode docker 调试 如果已经安装docker并且启动了。 启动docker&#xff1a; docker exec -it nlf /bin/bash vscode docker 调试 按照图中1 2 3 的顺序&#xff0c;进入&#xff0c;可以加载docker进行调试了。

HTML01:HTML基本结构

HTML基本结构 <html> <head><meta charset"UTF-8"><title>我的第一个网页</title> </head> <body>我的第一个网页 </body> </html><body、</body等成对的标签&#xff0c;分别叫开发标签和闭合标签单独…

URP - 屏幕图像(_CameraOpaqueTexture)

首先需要在unity中开启屏幕图像开关才可以使用该纹理 同样只有不透明对象才能被渲染到屏幕图像中 若想要该对象不被渲染到屏幕图像中&#xff0c;可以将其Shader的渲染队列改为 "Queue" "Transparent" 如何在Shader中使用_CameraOpaqueTexture&#xf…

如何在Ubuntu上安装NVIDIA显卡驱动?

作者&#xff1a;算力魔方创始人/英特尔创新大使刘力 一&#xff0c;前言 对于使用NVIDIA显卡的Ubuntu用户来说&#xff0c;正确安装显卡驱动是获得最佳图形性能的关键。与Windows系统不同&#xff0c;Linux系统通常不会自动安装专有显卡驱动。本文将详细介绍在Ubuntu系统上安…

机器视觉的手机FPC油墨丝印应用

在现代智能手机制造过程中&#xff0c;精密的组件装配和质量控制是确保产品性能和用户体验的关键。其中&#xff0c;柔性印刷电路板&#xff08;FPC&#xff09;的油墨丝印工艺尤为关键&#xff0c;它不仅影响到电路板的美观&#xff0c;更直接关系到电路的导电性能和可靠性。而…

Android智能体开发框架-架构文档

编写目的 1 提高智能体的开发效率&#xff0c; 2 降低系统开销&#xff0c; 3 支持跨平台扩展&#xff0c; 4 提供统一的开发范式 整体架构 接口层&#xff08;api层&#xff09;&#xff1a;提供API供开发者调用&#xff0c;支持Java/Kotlin和Native&#xff08;C&#x…