Python中的数据可视化艺术:用Matplotlib和Seaborn讲故事
Python中的数据可视化艺术:用Matplotlib和Seaborn讲故事
数据可视化不仅仅是图表的绘制,更是通过视觉形式传达复杂信息的一种艺术。使用Python中的两个强大的库——Matplotlib和Seaborn,可以将数据转化为清晰、优美的图表,帮助我们更好地理解数据,甚至讲述一个数据驱动的故事。在这篇博客中,我们将探讨如何使用这两个库进行数据可视化,讲述数据背后的故事。
1. 数据可视化的重要性
在数据科学领域,数据可视化被认为是理解数据的重要工具。它不仅能帮助分析者发现隐藏的模式,还能让普通观众直观地理解数据的含义。通过不同的图表类型(例如散点图、条形图、箱线图等),我们可以针对不同类型的数据讲述不同的故事。
2. Matplotlib简介
Matplotlib是Python中最基础的绘图库之一,灵活且功能强大,几乎可以绘制任何类型的图表。它的API相对底层,意味着用户可以完全控制图表的各个方面。
2.1 Matplotlib安装
在开始使用之前,需要确保安装了Matplotlib。你可以通过pip命令进行安装:
pip install matplotlib
2.2 基础绘图示例
首先,我们来看一个简单的折线图示例:
import matplotlib.pyplot as plt# 数据
years = [2015, 2016, 2017, 2018, 2019, 2020]
sales = [350, 410, 500, 590, 620, 710]# 创建图表
plt.plot(years, sales, marker='o', linestyle='-', color='b')# 添加标题和标签
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales (in USD)')# 显示图表
plt.show()
在这段代码中,我们定义了年份和销售额数据,并通过plt.plot
函数绘制折线图。marker='o'
表示在每个数据点上加上一个圆圈,而linestyle='-'
则定义了线型为实线。
2.3 定制图表
Matplotlib的灵活性允许我们对图表进行高度定制,例如设置颜色、线条样式、添加图例和网格线等:
# 增加图表细节
plt.plot(years, sales, marker='o', linestyle='--', color='g', label='Sales')# 添加网格线
plt.grid(True)# 添加图例
plt.legend()# 添加标题和标签
plt.title('Yearly Sales with Customizations')
plt.xlabel('Year')
plt.ylabel('Sales (in USD)')plt.show()
2.4 使用子图
Matplotlib还可以通过subplot
功能将多个图表展示在同一个窗口中:
# 创建子图
fig, axs = plt.subplots(2)# 绘制第一个子图
axs[0].plot(years, sales, color='r')
axs[0].set_title('Sales Over Time')# 绘制第二个子图
profit = [50, 60, 70, 80, 85, 100]
axs[1].bar(years, profit, color='b')
axs[1].set_title('Profit Over Time')plt.tight_layout()
plt.show()
通过子图功能,你可以在一个窗口中呈现多个图表,便于对比和分析不同的数据集。
3. Seaborn简介
虽然Matplotlib功能强大,但在美观度和简洁性上有时稍显不足。Seaborn是基于Matplotlib构建的高级库,它提供了更为美观的默认图表,并且能够更方便地处理Pandas数据框数据。
3.1 Seaborn安装
安装Seaborn同样非常简单:
pip install seaborn
3.2 基础绘图示例
我们来看一个简单的Seaborn绘图示例——绘制散点图:
import seaborn as sns
import matplotlib.pyplot as plt# 示例数据
tips = sns.load_dataset("tips")# 使用seaborn绘制散点图
sns.scatterplot(x="total_bill", y="tip", data=tips)# 添加标题
plt.title('Scatter Plot of Total Bill vs Tip')plt.show()
在这个示例中,Seaborn使用了一个内置的“tips”数据集,并生成了总账单和小费之间的散点图。Seaborn的API设计非常简洁,自动处理了许多图表的美化细节。
3.3 主题和样式
Seaborn提供了多种内置的主题和样式,可以让图表看起来更加美观:
# 设置主题
sns.set_theme(style="darkgrid")# 重新绘制散点图
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title('Scatter Plot with Darkgrid Theme')plt.show()
3.4 使用不同类型的图表
Seaborn非常适合绘制统计图表,以下是几个常见图表类型的示例:
- 箱线图(Boxplot)
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title('Boxplot of Total Bill by Day')
plt.show()
- 直方图(Histogram)
sns.histplot(tips['total_bill'], bins=20)
plt.title('Histogram of Total Bill')
plt.show()
- 热力图(Heatmap)
# 计算相关性矩阵
corr = tips.corr()# 绘制热力图
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Heatmap of Correlations')
plt.show()
3.5 可视化分布
Seaborn可以通过distplot
等函数可视化数据的分布情况。例如,查看总账单的分布:
sns.histplot(tips['total_bill'], kde=True)
plt.title('Distribution of Total Bill with KDE')
plt.show()
3.6 组合图表
Seaborn的pairplot
函数可以轻松创建数据集中不同变量之间的组合图表:
sns.pairplot(tips)
plt.show()
pairplot
能自动生成数据集中各变量两两组合的散点图,并在对角线上绘制每个变量的分布图,从而全面了解数据的关系。
4. 讲述数据故事
通过Matplotlib和Seaborn,你可以使用多种图表来传达数据背后的故事。关键在于根据数据的特点选择合适的图表类型,并在必要时组合多个图表,来揭示更深层次的模式或趋势。
例如,你可以结合使用箱线图和散点图,来分析不同类别中的数据分布及异常值,或者使用热力图和相关性分析图,来揭示变量之间的关系。
5. 总结
数据可视化不仅是数据分析中的工具,更是一门艺术。通过Matplotlib和Seaborn,我们可以构建精美的图表,将复杂的数据转化为易于理解的信息,帮助我们更好地讲述数据背后的故事。在实际应用中,根据不同的数据特点和目标,选择合适的可视化方法,能让你的数据分析更有说服力。
掌握了这两种库,你不仅可以绘制各种统计图,还可以通过多种方式定制、优化图表,从而更好地传达信息。在未来的数据分析工作中,不妨多花点心思在图表的设计上,让你的数据可视化真正成为一门讲故事的艺术。
为了进一步提升这篇博客的深度,我们可以探讨更多的数据可视化实战技巧,特别是结合Matplotlib和Seaborn来解决一些现实中的问题和需求。通过实际案例和多样化的图表类型,你可以更好地理解如何利用这些工具讲述数据背后的故事。
6. 实战:股票数据的可视化
假设我们要分析一家公司的股票数据,例如从股票价格、成交量等角度展示其变化趋势。首先,我们可以通过Pandas读取股票数据,并结合Matplotlib和Seaborn进行可视化。
6.1 数据准备
在这个例子中,我们将使用Yahoo Finance提供的股票数据。可以通过yfinance
库来获取:
pip install yfinance
接着,我们可以用下面的代码来抓取和可视化股票数据:
import yfinance as yf
import matplotlib.pyplot as plt
import seaborn as sns# 下载股票数据
ticker = 'AAPL'
data = yf.download(ticker, start='2023-01-01', end='2023-10-01')# 查看前几行数据
print(data.head())# 绘制股票收盘价
plt.figure(figsize=(10, 6))
plt.plot(data.index, data['Close'], label=f'{ticker} Close Price')
plt.title(f'{ticker} Closing Price Over Time')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.grid(True)
plt.legend()
plt.show()
在这个实战中,我们下载了苹果公司(AAPL)的股票数据,绘制了其在2023年1月到2023年10月之间的收盘价走势。通过这样的可视化,投资者可以直观地看到股票价格的波动情况。
6.2 多图合并:价格与成交量
为了更全面地了解股票的走势,我们可以将价格和成交量放在同一个图中:
# 创建子图
fig, ax1 = plt.subplots(figsize=(10, 6))# 绘制收盘价
ax1.set_xlabel('Date')
ax1.set_ylabel('Close Price (USD)', color='tab:blue')
ax1.plot(data.index, data['Close'], label='Close Price', color='tab:blue')
ax1.tick_params(axis='y', labelcolor='tab:blue')# 创建另一个y轴用于成交量
ax2 = ax1.twinx()
ax2.set_ylabel('Volume', color='tab:red')
ax2.bar(data.index, data['Volume'], alpha=0.3, color='tab:red')
ax2.tick_params(axis='y', labelcolor='tab:red')plt.title(f'{ticker} Closing Price and Volume')
plt.show()
在这段代码中,我们使用了双y轴(twinx()
)来同时展示收盘价和成交量。这样一来,观众可以通过一张图同时看到价格的波动和成交量的变化,帮助我们理解价格变化背后是否伴随着交易量的显著增长。
6.3 用Seaborn展示分布和相关性
接下来,我们可以进一步分析不同价格指标之间的关系,比如开盘价、收盘价、最高价和最低价。使用Seaborn绘制这些指标的相关性热力图:
# 计算相关性矩阵
corr_matrix = data[['Open', 'High', 'Low', 'Close']].corr()# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Correlation Between Price Metrics')
plt.show()
通过相关性热力图,我们可以一目了然地看到这些价格指标之间的相关程度,帮助我们更好地理解股票市场的波动行为。
6.4 分析每日价格波动范围
股票市场中的波动性是投资者非常关心的指标之一。我们可以通过绘制每日的价格波动范围来分析股票的波动情况。
# 计算每日波动范围
data['Range'] = data['High'] - data['Low']# 绘制波动范围的时间序列图
plt.figure(figsize=(10, 6))
plt.plot(data.index, data['Range'], label='Daily Price Range', color='orange')
plt.title(f'{ticker} Daily Price Range Over Time')
plt.xlabel('Date')
plt.ylabel('Range (USD)')
plt.grid(True)
plt.legend()
plt.show()
在这段代码中,我们计算了股票每日的最高价与最低价的差值,并将其可视化。通过这个图表,观众可以直观地看到某些时间点股票价格的波动变得更加剧烈,从而揭示市场动荡时期。
7. 实战:天气数据的可视化
接下来我们探讨另一个实际应用——天气数据的可视化。假设我们有一个城市的每日气温数据,想要展示这一年的温度变化。
7.1 数据准备
你可以用Pandas
读取天气数据文件,然后进行可视化:
import pandas as pd# 示例天气数据
data = pd.DataFrame({'Date': pd.date_range(start='2023-01-01', periods=365),'Temperature': np.random.normal(loc=20, scale=10, size=365)
})# 转换日期格式
data['Date'] = pd.to_datetime(data['Date'])# 绘制每日温度
plt.figure(figsize=(10, 6))
plt.plot(data['Date'], data['Temperature'], color='b', label='Temperature')
plt.title('Daily Temperature Over Time')
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.grid(True)
plt.legend()
plt.show()
在这段代码中,我们随机生成了一年内的气温数据,并绘制了每日气温变化图。通过这个可视化,用户可以轻松看出气温的波动情况。
7.2 月度平均温度
为了更深入的分析,我们可以计算月度的平均温度,并通过条形图进行展示:
# 计算每月平均温度
data['Month'] = data['Date'].dt.month
monthly_avg_temp = data.groupby('Month')['Temperature'].mean()# 绘制月度平均温度条形图
plt.figure(figsize=(10, 6))
sns.barplot(x=monthly_avg_temp.index, y=monthly_avg_temp.values, palette='Blues_d')
plt.title('Average Monthly Temperature')
plt.xlabel('Month')
plt.ylabel('Temperature (°C)')
plt.show()
在这段代码中,我们利用Seaborn的barplot
绘制了月度平均温度的条形图,帮助观众快速了解每个月的气温变化趋势。
7.3 热力图展示气温分布
我们还可以通过热力图来展示全年气温的分布:
# 创建一个二维数组表示每个月每天的气温
pivot_data = data.pivot_table(values='Temperature', index=data['Date'].dt.day, columns=data['Date'].dt.month)# 绘制热力图
plt.figure(figsize=(12, 8))
sns.heatmap(pivot_data, cmap='coolwarm', cbar=True)
plt.title('Heatmap of Daily Temperatures Throughout the Year')
plt.xlabel('Month')
plt.ylabel('Day')
plt.show()
在这个热力图中,每个格子表示一年中的某一天,其颜色代表当天的气温。通过这种可视化,我们可以很容易地发现全年气温的波动模式,例如炎热的夏季和寒冷的冬季。
8. 实战:可视化数据趋势和异常值
在某些场景下,我们不仅需要展示数据,还要发现数据中的趋势和异常值。例如,检测某些时段的异常波动,或者分析某个变量随时间的趋势变化。
8.1 识别趋势和异常
我们可以使用滚动平均线和上下限来展示趋势和异常值:
# 计算滚动平均和标准差
data['RollingMean'] = data['Temperature'].rolling(window=7).mean()
data['UpperBound'] = data['RollingMean'] + 2 * data['Temperature'].rolling(window=7).std()
data['LowerBound'] = data['RollingMean'] - 2 * data['Temperature'].rolling(window=7).std()# 绘制温度和趋势
plt.figure(figsize=(10, 6))
plt.plot(data['Date'], data['Temperature'], label='Daily Temperature', alpha=0.5)
plt.plot(data['Date'], data['RollingMean'], color='r', label='Rolling Mean')
plt.fill_between(data['Date'], data['UpperBound'], data['LowerBound'], color='gray', alpha=0.3, label='Normal Range')
plt.title('Temperature Trends and Anomalies')
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.legend()
plt.show()
在这个可视化中,我们展示了每日气温的滚动平均线,并使用标准差定义了一个正常范围。这样,任何超出上下限的点都可以被认为是异常值,帮助我们识别数据中的异常模式。
9. 总结
在实际项目中,数据可视化不仅仅是展示数据的手段,更是通过图形化展示帮助我们更好地理解数据、发现模式和趋势、分析关联性、识别异常值等重要任务的关键工具。Matplotlib和Seaborn作为Python中最流行的数据可视化库,提供了丰富的功能和灵活的绘图选项,能够满足从简单到复杂的可视化需求。通过本文的实战案例,希望能够帮助你更好地掌握这些工具,为数据科学和分析工作提供更强有力的支持。
这篇博客总结了从基础到高级的数据可视化技术,帮助你用Matplotlib和Seaborn讲述数据的故事,展示数据的复杂关系和趋势变化。
相关文章:

Python中的数据可视化艺术:用Matplotlib和Seaborn讲故事
Python中的数据可视化艺术:用Matplotlib和Seaborn讲故事 数据可视化不仅仅是图表的绘制,更是通过视觉形式传达复杂信息的一种艺术。使用Python中的两个强大的库——Matplotlib和Seaborn,可以将数据转化为清晰、优美的图表,帮助我…...
python机器学习(手写数字识别)
# 导包 import matplotlib.pyplot as plt import pandas as pd from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier import joblib from collections import Counter # 1. 定义函数 show_digit(idx), 用于查看: 数字图…...

如何针对项目中的技术难点准备面试?——黑马点评为例
最核心的,包装和准备 个人项目,怎么包装?一定要写出代码才可以吗? 你可以在系统A中实现就可以,了解其中实现的细节,怎么跟面试官对线等等,这些话术到位了之后,再把它融入到系统B&a…...

ARP欺骗的多种手法
学习参考: ARP欺骗的各种d玩法-CSDN博客 https://juejin.cn/post/7383702153892954164 一、什么是ARP欺骗 1.什么是ARP? ARP (Address Resolution Protocol) 是一种网络层协议,用于将 IP 地址转换为物理地址(MAC 地址࿰…...

HCIA——one
推荐电影:《模仿游戏》《黑客帝国》《头号玩家》 图灵机每秒五千次计算,当今计算机4080ti算力每秒21万亿次的计算。 OSI七层模型 应用层:人机交互,将抽象语言转换成编码 表示层:将编码转换成二进制 介质访问控制层…...

【vue】⾃定义指令+插槽+商品列表案例
代码获取 07-⾃定义指令插槽商品列表案例 ⼀、⾃定义指令 1. 基本使⽤ 1.1 指令介绍 内置指令:v-model、v-for、v-bind、v-on… 这都是Vue给咱们内置的⼀些指令,可以直接使⽤ ⾃定义指令:同时Vue也⽀持让开发者,⾃⼰注册⼀些…...

多线程——线程的等待通知
目录 前言 一、wait() 方法 1.方法介绍 2.代码示例 3.wait 和 sleep 的区别 二、notify() 方法 1.方法介绍 2.代码示例 三、notifyAll() 方法 1.方法介绍 2.代码示例 结尾 前言 由于线程之间是抢占式执行的,因此线程之间的执行顺序是难以预知的…...

模态与非模态的对话框
本文学习自: 《Qt Creato快速入门》 #include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }1. #include "widget.h" #include "ui_w…...

C语言练习
题目: 1.运用switch选择语句,编写一段C语言,请根据输入的数字,显示相应的星期日,如果数字所对应的星期日并不存在请显示“抱歉,您输入的内容并不存在。” 分析:1.在本题中,要运用到…...

CyberRt实践之Hello Apollo(Apollo 9.0版本)
apollo9.0环境安装参考官方网站 apollo.baidu.com/community/Apollo-Homepage-Document?docBYFxAcGcC4HpYIbgPYBtXIHQCMEEsATAV0wGNkBbWA5UyRFdZWVBEAU0hFgoIH0adPgCY%2BADwCiAVnEAhAILiAnABZxEgOzK1Y%2BQA51M3ROUnJBsbK2WZoyUdkBhcXoAMhlwDFlARnUXZdzE9AGY%2BbFINADYpUhCEFW…...

【JavaScript】LeetCode:61-65
文章目录 61 课程表62 实现Trie(前缀树)63 全排列64 子集65 电话号码的字母组合 61 课程表 Map BFS拓扑排序:将有向无环图转为线性顺序。遍历prerequisites:1. 数组记录每个节点的入度,2. 哈希表记录依赖关系。n 6&a…...

【SpringAI】(一)从实际场景入门大模型——适合Java宝宝的大模型应用开发
一、简单场景介绍 假设你需要为一个商城项目接入一个基于SpringAI的智能客服系统,现在我们来基本模拟一下: 当我通过系统提问,大模型会针对我的问题进行回答。 当我们通过程序提问时,SpringAI会将我们的提问封装成Prompts&#x…...

植物大战僵尸杂交版
最新版植物大战僵尸杂交版 最近本款游戏火爆 下载资源如下: win版本:2.3.7 链接:下载地址 提取码:9N3P Mac(苹果版本):2.0.0 链接:下载地址 提取码:Bjaa 介绍ÿ…...

live2d 实时虚拟数字人形象页面显示,对接大模型
live2dSpeek 测试不用gpu可以正常运行 https://github.com/lyz1810/live2dSpeek 运行的话还需要额外下载https://github.com/lyz1810/edge-tts支持语音 ## 运行live2dSpeek >npm install -g http-server >http-server . ## 运行edge-tts python edge-tts.py...

SpringCloud-持久层框架MyBatis Plus的使用与原理详解
在现代微服务架构中,SpringCloud 是一个非常流行的解决方案。而在数据库操作层面,MyBatis Plus 作为 MyBatis 的增强工具,能够简化开发,提升效率,特别是在开发企业级应用和分布式系统时尤为有用。本文将详细介绍 MyBat…...
Servlet的HttpServletRequest
HttpServletRequest是Java Servlet规范中定义的一个接口,它表示客户端向服务器发送的请求,并提供了与HTTP请求相关的方法和属性。 getSession方法():用于获取与当前请求相关联的HttpSession对象。 setAttribute(String name, Object value)…...

U9销售订单不能带出最新价格出来
业务员突然说系统带不出来销售价格。了解之后,不是带不出来价格,是做了价格调整之后,最新价格没有匹配出来,带出来的价格是历史价格。检查,分析相关的单据,生效日期,失效日期,审核状…...

Jmeter接口测试企业级项目实战day1
1.接口测试 接口测试工具: JMeter:支持多种接口类型,还能测试性能,开源,开源进行二次扩展。 Postman:简单,方便,局限性比较大,适合开发临时行调试 APIFox等:新…...

接口测试面试题含答案
1、解释一下正向和逆向测试。 正向测试:针对接口设计预期的功能和行为,验证接口是否按照预期工作。 逆向测试:针对错误输入、不合理的条件或非预期的使用方式,验证接口是否能够适当地处理这些情况并提供合理的错误处理。 2、什…...

横板营业执照提取生成
前言 有一段时间没发博客了,今天分享下几个月前做的营业执照提取器UI 预览图 框架 b-ui很好用,这个前端框架作者 发布的插件我都会用,鱿鱼助手也是基于这个框架开发的 代码 html <template><view><template><view…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...